From cbc21c2a8ce54b0181eb882d03e5401c7ba850a1 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 16 Jul 2023 17:38:33 -0700 Subject: [PATCH 01/45] Transaction Router refactor --- __tests__/transactionRouter.test.ts | 104 ++++++++----- .../index.ts} | 29 ++-- .../transactionRouter/reserveTransfer.ts | 0 src/utils/transactionRouter/transferAsset.ts | 137 ++++++++++++++++++ src/utils/transactionRouter/types.ts | 31 ++++ 5 files changed, 246 insertions(+), 55 deletions(-) rename src/utils/{transactionRouter.ts => transactionRouter/index.ts} (88%) create mode 100644 src/utils/transactionRouter/reserveTransfer.ts create mode 100644 src/utils/transactionRouter/transferAsset.ts create mode 100644 src/utils/transactionRouter/types.ts diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index 76b32dc..f91d325 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -5,6 +5,7 @@ import TransactionRouter from "../src/utils/transactionRouter"; import IdentityContractFactory from "../types/constructors/identity"; import IdentityContract from "../types/contracts/identity"; import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; +import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; const wsProvider = new WsProvider("ws://127.0.0.1:9944"); const keyring = new Keyring({ type: "sr25519" }); @@ -32,9 +33,6 @@ describe("TransactionRouter", () => { }); it("Can't send tokens to yourself", async () => { - const sender = alice; - const receiver = alice; - // First lets add a network and create an identity. await addNetwork(identityContract, alice, { @@ -42,23 +40,43 @@ describe("TransactionRouter", () => { accountType: AccountType.accountId32, }); + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: alice.addressRaw, + type: AccountType.accountId32, + network: 0, + }; + + const asset: Fungible = { + multiAsset: {}, + amount: 1000 + }; + await expect( TransactionRouter.sendTokens( identityContract, sender, - 0, // origin network - receiver.addressRaw, - AccountType.accountId32, - 0, // destination network - {}, // multi asset - 1000 + receiver, + asset ) ).rejects.toThrow("Cannot send tokens to yourself"); }); it("Sending native asset on the same network works", async () => { - const sender = alice; - const receiver = bob; + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 0, + }; const westendProvider = new WsProvider("ws://127.0.0.1:4242"); const westendApi = await ApiPromise.create({ provider: westendProvider }); @@ -66,7 +84,7 @@ describe("TransactionRouter", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const { data: balance } = await westendApi.query.system.account( - receiver.address + receiver.addressRaw ); const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); @@ -78,25 +96,25 @@ describe("TransactionRouter", () => { const amount = Math.pow(10, 12); - await TransactionRouter.sendTokens( - identityContract, - sender, - 0, // origin network - receiver.addressRaw, - AccountType.accountId32, - 0, // destination network - // MultiAsset: - { + const asset: Fungible = { + multiAsset: { interior: "Here", parents: 0, }, amount + }; + + await TransactionRouter.sendTokens( + identityContract, + sender, + receiver, + asset ); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const { data: balance } = await westendApi.query.system.account( - receiver.address + receiver.addressRaw ); const newReceiverBalance = parseInt( balance.free.toHuman().replace(/,/g, "") @@ -106,8 +124,16 @@ describe("TransactionRouter", () => { }, 30000); it("Sending non-native asset on the same network works", async () => { - const sender = alice; - const receiver = bob; + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 0, + }; const assetHubProvider = new WsProvider("ws://127.0.0.1:4243"); const assetHubApi = await ApiPromise.create({ @@ -116,24 +142,24 @@ describe("TransactionRouter", () => { // First create an asset. if (!(await getAsset(assetHubApi, 0))) { - await createAsset(assetHubApi, sender, 0); + await createAsset(assetHubApi, sender.keypair, 0); } // Mint some assets to the creator. - await mintAsset(assetHubApi, sender, 0, 500); + await mintAsset(assetHubApi, sender.keypair, 0, 500); const amount = 200; const senderAccountBefore: any = (await assetHubApi.query.assets.account( 0, - sender.address + sender.keypair.address )).toHuman(); const senderBalanceBefore = parseInt(senderAccountBefore.balance.replace(/,/g, "")); const receiverAccountBefore: any = (await assetHubApi.query.assets.account( 0, - receiver.address + receiver.addressRaw )).toHuman(); const receiverBalanceBefore = receiverAccountBefore ? parseInt(receiverAccountBefore.balance.replace(/,/g, "")) : 0; @@ -144,15 +170,8 @@ describe("TransactionRouter", () => { accountType: AccountType.accountId32, }); - await TransactionRouter.sendTokens( - identityContract, - sender, - 0, // origin network - receiver.addressRaw, - AccountType.accountId32, - 0, // destination network - // MultiAsset: - { + const asset: Fungible = { + multiAsset: { interior: { X2: [ { PalletInstance: 50 }, // assets pallet @@ -162,18 +181,25 @@ describe("TransactionRouter", () => { parents: 0, }, amount + }; + + await TransactionRouter.sendTokens( + identityContract, + sender, + receiver, + asset ); const senderAccountAfter: any = (await assetHubApi.query.assets.account( 0, - sender.address + sender.keypair.address )).toHuman(); const senderBalanceAfter = parseInt(senderAccountAfter.balance.replace(/,/g, "")); const receiverAccountAfter: any = (await assetHubApi.query.assets.account( 0, - receiver.address + receiver.addressRaw )).toHuman(); const receiverBalanceAfter = parseInt(receiverAccountAfter.balance.replace(/,/g, "")); diff --git a/src/utils/transactionRouter.ts b/src/utils/transactionRouter/index.ts similarity index 88% rename from src/utils/transactionRouter.ts rename to src/utils/transactionRouter/index.ts index 2afb29a..5a1de4c 100644 --- a/src/utils/transactionRouter.ts +++ b/src/utils/transactionRouter/index.ts @@ -1,39 +1,36 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; -import IdentityContract from "../../types/contracts/identity"; -import { AccountType } from "../../types/types-arguments/identity"; +import IdentityContract from "../../../types/contracts/identity"; +import { AccountType } from "../../../types/types-arguments/identity"; + +import { Sender, Receiver, Fungible } from "./types"; +import TransferAsset from "./transferAsset"; class TransactionRouter { public static async sendTokens( identityContract: IdentityContract, - sender: KeyringPair, - originNetworkId: number, - receiver: Uint8Array, - receiverAccountType: AccountType, - destinationNetworkId: number, - multiAsset: any, - amount: number + sender: Sender, + receiver: Receiver, + asset: Fungible ): Promise { - if (originNetworkId === destinationNetworkId && sender.addressRaw === receiver) { + if (sender.network === receiver.network && sender.keypair.addressRaw === receiver.addressRaw) { throw new Error("Cannot send tokens to yourself"); } - if (originNetworkId === destinationNetworkId) { + if (sender.network === receiver.network) { // We will extract all the chain information from the RPC node. - const rpcUrl = (await identityContract.query.networkInfoOf(originNetworkId)).value + const rpcUrl = (await identityContract.query.networkInfoOf(sender.network)).value .ok?.rpcUrl; const wsProvider = new WsProvider(rpcUrl); const api = await ApiPromise.create({ provider: wsProvider }); - await this.sendOnSameBlockchain( + await TransferAsset.send( api, sender, receiver, - receiverAccountType, - multiAsset, - amount + asset ); } else { // Send cross-chain. diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts new file mode 100644 index 0000000..c3e7dd3 --- /dev/null +++ b/src/utils/transactionRouter/transferAsset.ts @@ -0,0 +1,137 @@ +import { ApiPromise } from "@polkadot/api"; +import { KeyringPair } from "@polkadot/keyring/types"; +import { AccountType } from "../../../types/types-arguments/identity"; + +import { Sender, Receiver, Fungible, TransactionSender } from "./types"; + +class TransferAsset { + send(api: ApiPromise, sender: KeyringPair, receiver: Receiver, asset: Fungible) { + throw new Error("Method not implemented."); + } + + public static async send( + api: ApiPromise, + sender: Sender, + receiver: Receiver, + asset: Fungible + ): Promise { + // We use XCM even for transfers that are occurring on the same chain. The + // reason for this is that we cannot know what is the pallet and function + // for transferring tokens since it can be different on each chain. For that + // reason we will use the XCM `TransferAsset` instruction which is + // standardized and as far as the chain has an XCM executor the transaction + // will be executed correctly. + + const chainInfo = api.registry.getChainProperties(); + if (!chainInfo) { + throw new Error("Failed to get chain info"); + } + + const xcm = this.xcmTransferAssetMessage( + receiver.addressRaw, + receiver.type, + asset.multiAsset, + asset.amount + ); + + let xcmExecute: any; + + if (api.tx.xcmPallet) { + const paymentInfo = (await api.tx.xcmPallet + .execute(xcm, 0) + .paymentInfo(sender.keypair)).toHuman(); + + if (!paymentInfo || !paymentInfo.weight) { + throw new Error("Couldn't estimate transaction fee"); + } + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); + + // TODO: don't hardcode the max weight. + xcmExecute = api.tx.xcmPallet.execute(xcm, xcmMaxRefTime * 10); + } else if (api.tx.polkadotXcm) { + const paymentInfo = (await api.tx.polkadotXcm + .execute(xcm, 0) + .paymentInfo(sender.keypair)).toHuman(); + + if (!paymentInfo || !paymentInfo.weight) { + throw new Error("Couldn't estimate transaction fee"); + } + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); + + // TODO: don't hardcode the max weight. + xcmExecute = api.tx.polkadotXcm.execute(xcm, xcmMaxRefTime * 10); + } else { + throw new Error("The blockchain does not support XCM"); + } + + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve) => { + const unsub = await xcmExecute.signAndSend(sender, (result: any) => { + if (result.status.isFinalized) { + unsub(); + resolve(); + } + }) + }); + } + + // Constructs a `TransferAsset` XCM message that will be executed when sending + // tokens on the same chain. + private static xcmTransferAssetMessage( + receiverAddress: Uint8Array, + receiverAccountType: AccountType, + multiAsset: any, + amount: number + ): any { + let receiverAccount; + if (receiverAccountType == AccountType.accountId32) { + receiverAccount = { + AccountId32: { + network: "Any", + id: receiverAddress, + }, + }; + } else if (receiverAccountType == AccountType.accountKey20) { + receiverAccount = { + AccountKey20: { + network: "Any", + id: receiverAddress, + }, + }; + } + + const xcmMessage = { + V2: [ + { + TransferAsset: { + assets: [ + { + fun: { + Fungible: amount, + }, + id: { + Concrete: multiAsset, + }, + }, + ], + beneficiary: { + interior: { + X1: receiverAccount, + }, + parents: 0, + }, + }, + }, + ], + }; + return xcmMessage; + } +} + +export default TransferAsset; diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts new file mode 100644 index 0000000..d100e49 --- /dev/null +++ b/src/utils/transactionRouter/types.ts @@ -0,0 +1,31 @@ +import { KeyringPair } from "@polkadot/keyring/types"; +import { AccountType } from "../../../types/types-arguments/identity"; +import { ApiPromise } from "@polkadot/api"; + +export type AccountIdRaw = Uint8Array; +export type NetworkId = number; + +export type Sender = { + keypair: KeyringPair; + network: NetworkId; +} + +export type Receiver = { + addressRaw: AccountIdRaw; + type: AccountType; + network: NetworkId; +} + +export type Fungible = { + multiAsset: any, + amount: number +} + +export interface TransactionSender { + send( + api: ApiPromise, + sender: KeyringPair, + receiver: Receiver, + asset: Fungible + ): any; +} From f11d0221cf0326752a282f25279f986a50f309a4 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 17 Jul 2023 20:52:22 -0700 Subject: [PATCH 02/45] lint --- src/utils/transactionRouter/index.ts | 5 ++--- src/utils/transactionRouter/transferAsset.ts | 4 ++-- src/utils/transactionRouter/types.ts | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 5a1de4c..de1ebd1 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -1,12 +1,11 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; +import TransferAsset from "./transferAsset"; +import { Fungible,Receiver, Sender } from "./types"; import IdentityContract from "../../../types/contracts/identity"; import { AccountType } from "../../../types/types-arguments/identity"; -import { Sender, Receiver, Fungible } from "./types"; -import TransferAsset from "./transferAsset"; - class TransactionRouter { public static async sendTokens( identityContract: IdentityContract, diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index c3e7dd3..1221dcd 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -1,8 +1,8 @@ import { ApiPromise } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; -import { AccountType } from "../../../types/types-arguments/identity"; -import { Sender, Receiver, Fungible, TransactionSender } from "./types"; +import { Fungible, Receiver, Sender } from "./types"; +import { AccountType } from "../../../types/types-arguments/identity"; class TransferAsset { send(api: ApiPromise, sender: KeyringPair, receiver: Receiver, asset: Fungible) { diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts index d100e49..c35f229 100644 --- a/src/utils/transactionRouter/types.ts +++ b/src/utils/transactionRouter/types.ts @@ -1,6 +1,7 @@ +import { ApiPromise } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; + import { AccountType } from "../../../types/types-arguments/identity"; -import { ApiPromise } from "@polkadot/api"; export type AccountIdRaw = Uint8Array; export type NetworkId = number; From 4c8ec6401c0d96183707c3caf2bc54856747fefc Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 17 Jul 2023 21:06:57 -0700 Subject: [PATCH 03/45] fixes --- src/utils/transactionRouter/index.ts | 130 +------------------ src/utils/transactionRouter/transferAsset.ts | 5 - 2 files changed, 1 insertion(+), 134 deletions(-) diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index de1ebd1..b2b8992 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -1,10 +1,8 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; import TransferAsset from "./transferAsset"; -import { Fungible,Receiver, Sender } from "./types"; +import { Fungible, Receiver, Sender } from "./types"; import IdentityContract from "../../../types/contracts/identity"; -import { AccountType } from "../../../types/types-arguments/identity"; class TransactionRouter { public static async sendTokens( @@ -35,132 +33,6 @@ class TransactionRouter { // Send cross-chain. } } - - private static async sendOnSameBlockchain( - api: ApiPromise, - sender: KeyringPair, - receiver: Uint8Array, - receiverAccountType: AccountType, - multiAsset: any, - amount: number - ): Promise { - // We use XCM even for transfers that are occurring on the same chain. The - // reason for this is that we cannot know what is the pallet and function - // for transferring tokens since it can be different on each chain. For that - // reason we will use the XCM `TransferAsset` instruction which is - // standardized and as far as the chain has an XCM executor the transaction - // will be executed correctly. - - const chainInfo = api.registry.getChainProperties(); - if (!chainInfo) { - throw new Error("Failed to get chain info"); - } - - const xcm = this.xcmTransferAssetMessage( - receiver, - receiverAccountType, - multiAsset, - amount - ); - - let xcmExecute: any; - - if (api.tx.xcmPallet) { - const paymentInfo = (await api.tx.xcmPallet - .execute(xcm, 0) - .paymentInfo(sender)).toHuman(); - - if (!paymentInfo || !paymentInfo.weight) { - throw new Error("Couldn't estimate transaction fee"); - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); - - // TODO: don't hardcode the max weight. - xcmExecute = api.tx.xcmPallet.execute(xcm, xcmMaxRefTime * 10); - } else if (api.tx.polkadotXcm) { - const paymentInfo = (await api.tx.polkadotXcm - .execute(xcm, 0) - .paymentInfo(sender)).toHuman(); - - if (!paymentInfo || !paymentInfo.weight) { - throw new Error("Couldn't estimate transaction fee"); - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); - - // TODO: don't hardcode the max weight. - xcmExecute = api.tx.polkadotXcm.execute(xcm, xcmMaxRefTime * 10); - } else { - throw new Error("The blockchain does not support XCM"); - } - - // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { - const unsub = await xcmExecute.signAndSend(sender, (result: any) => { - if (result.status.isFinalized) { - unsub(); - resolve(); - } - }) - }); - } - - // Constructs a `TransferAsset` XCM message that will be executed when sending - // tokens on the same chain. - private static xcmTransferAssetMessage( - receiverAddress: Uint8Array, - receiverAccountType: AccountType, - multiAsset: any, - amount: number - ): any { - let receiverAccount; - if (receiverAccountType == AccountType.accountId32) { - receiverAccount = { - AccountId32: { - network: "Any", - id: receiverAddress, - }, - }; - } else if (receiverAccountType == AccountType.accountKey20) { - receiverAccount = { - AccountKey20: { - network: "Any", - id: receiverAddress, - }, - }; - } - - const xcmMessage = { - V2: [ - { - TransferAsset: { - assets: [ - { - fun: { - Fungible: amount, - }, - id: { - Concrete: multiAsset, - }, - }, - ], - beneficiary: { - interior: { - X1: receiverAccount, - }, - parents: 0, - }, - }, - }, - ], - }; - return xcmMessage; - } } export default TransactionRouter; diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index 1221dcd..2231114 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -1,14 +1,9 @@ import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; import { Fungible, Receiver, Sender } from "./types"; import { AccountType } from "../../../types/types-arguments/identity"; class TransferAsset { - send(api: ApiPromise, sender: KeyringPair, receiver: Receiver, asset: Fungible) { - throw new Error("Method not implemented."); - } - public static async send( api: ApiPromise, sender: Sender, From 86029b9aeea8015a82f813752ab426b0fa366678 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Tue, 18 Jul 2023 07:27:39 -0700 Subject: [PATCH 04/45] for now remove interface --- src/utils/transactionRouter/types.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts index c35f229..2d1e874 100644 --- a/src/utils/transactionRouter/types.ts +++ b/src/utils/transactionRouter/types.ts @@ -21,12 +21,3 @@ export type Fungible = { multiAsset: any, amount: number } - -export interface TransactionSender { - send( - api: ApiPromise, - sender: KeyringPair, - receiver: Receiver, - asset: Fungible - ): any; -} From 80b014dd7c4c4d25121dd50bab6da37848cecde8 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Tue, 18 Jul 2023 07:28:56 -0700 Subject: [PATCH 05/45] linter happy --- src/utils/transactionRouter/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts index 2d1e874..0cb3604 100644 --- a/src/utils/transactionRouter/types.ts +++ b/src/utils/transactionRouter/types.ts @@ -1,4 +1,3 @@ -import { ApiPromise } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; import { AccountType } from "../../../types/types-arguments/identity"; From ee9a02082b92c683c5f08ce4956cf3f78905324f Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Tue, 18 Jul 2023 07:59:41 -0700 Subject: [PATCH 06/45] fix --- __tests__/transactionRouter.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index f91d325..57bd1d1 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -84,7 +84,7 @@ describe("TransactionRouter", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const { data: balance } = await westendApi.query.system.account( - receiver.addressRaw + bob.address ); const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); @@ -114,7 +114,7 @@ describe("TransactionRouter", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const { data: balance } = await westendApi.query.system.account( - receiver.addressRaw + bob.address ); const newReceiverBalance = parseInt( balance.free.toHuman().replace(/,/g, "") @@ -159,7 +159,7 @@ describe("TransactionRouter", () => { const receiverAccountBefore: any = (await assetHubApi.query.assets.account( 0, - receiver.addressRaw + bob.address )).toHuman(); const receiverBalanceBefore = receiverAccountBefore ? parseInt(receiverAccountBefore.balance.replace(/,/g, "")) : 0; @@ -199,7 +199,7 @@ describe("TransactionRouter", () => { const receiverAccountAfter: any = (await assetHubApi.query.assets.account( 0, - receiver.addressRaw + bob.address )).toHuman(); const receiverBalanceAfter = parseInt(receiverAccountAfter.balance.replace(/,/g, "")); From 188d0076aa977ea10861a463da4f64acf7424b70 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 12:21:40 -0700 Subject: [PATCH 07/45] fixes --- .gitignore | 4 + __tests__/assetRegistry.test.ts | 4 +- __tests__/transactionRouter.test.ts | 8 +- artifacts/address_book.contract | 2 +- artifacts/address_book.json | 4 +- artifacts/identity.contract | 2 +- artifacts/identity.json | 6 +- package.json | 1 + types/build-extrinsic/address_book.ts | 61 +- types/build-extrinsic/identity.ts | 109 ++- types/constructors/address_book.ts | 83 +- types/constructors/identity.ts | 68 +- types/contract-info/address_book.ts | 4 +- types/contract-info/identity.ts | 4 +- types/contracts/address_book.ts | 41 +- types/contracts/identity.ts | 41 +- types/data/address_book.json | 350 +++++++- types/data/identity.json | 1039 +++++++++++++++++++++++- types/event-types/address_book.ts | 1 + types/event-types/identity.ts | 1 + types/events/address_book.ts | 56 +- types/events/identity.ts | 80 +- types/mixed-methods/address_book.ts | 86 +- types/mixed-methods/identity.ts | 134 ++- types/query/address_book.ts | 91 ++- types/query/identity.ts | 155 ++-- types/shared/utils.ts | 13 +- types/tx-sign-and-send/address_book.ts | 86 +- types/tx-sign-and-send/identity.ts | 150 ++-- types/types-arguments/address_book.ts | 2 +- types/types-arguments/identity.ts | 1 - types/types-returns/address_book.ts | 3 +- types/types-returns/identity.ts | 3 +- 33 files changed, 2028 insertions(+), 665 deletions(-) diff --git a/.gitignore b/.gitignore index a55a34d..92b644d 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,7 @@ package-lock.json # zombienet bin/ + +# typechain +types/ +artifacts/ diff --git a/__tests__/assetRegistry.test.ts b/__tests__/assetRegistry.test.ts index 31d84ed..c425f1d 100644 --- a/__tests__/assetRegistry.test.ts +++ b/__tests__/assetRegistry.test.ts @@ -427,8 +427,8 @@ describe('AssetRegistry', () => { asset: { Token: 'AUSD', }, - name: 'Acala Dollar', - symbol: 'aUSD', + name: 'aUSD SEED', + symbol: 'aSEED', decimals: 12, xcmInteriorKey: [ { network: 'polkadot' }, diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index 57bd1d1..cbfd6f5 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -83,8 +83,8 @@ describe("TransactionRouter", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - const { data: balance } = await westendApi.query.system.account( - bob.address + var { data: balance } = await westendApi.query.system.account( + receiver.addressRaw ); const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); @@ -113,8 +113,8 @@ describe("TransactionRouter", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - const { data: balance } = await westendApi.query.system.account( - bob.address + var { data: balance } = await westendApi.query.system.account( + receiver.addressRaw ); const newReceiverBalance = parseInt( balance.free.toHuman().replace(/,/g, "") diff --git a/artifacts/address_book.contract b/artifacts/address_book.contract index e4126ee..cdef3b7 100644 --- a/artifacts/address_book.contract +++ b/artifacts/address_book.contract @@ -1 +1 @@ -{"source":{"hash":"0xf3351b91ee1e761f370e3e86fc1b6489a2e275ca59944958300a8def008ca8e2","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c020100690000007b000000110000005c0201006900000078000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of `Identity` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file +{"source":{"hash":"0xc4b25de87d73f70b7b8c799703d86c163d58e7a9f474ac63de4f53e4542b88f9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c0201006900000078000000110000005c020100690000007b000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of `Identity` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/artifacts/address_book.json b/artifacts/address_book.json index e50dba0..d7826a1 100644 --- a/artifacts/address_book.json +++ b/artifacts/address_book.json @@ -1,11 +1,11 @@ { "source": { - "hash": "0xf3351b91ee1e761f370e3e86fc1b6489a2e275ca59944958300a8def008ca8e2", + "hash": "0xf7970b103d9644b533629c2938375218f75ee515fc2628648cf2b326f72a5232", "language": "ink! 4.2.0", "compiler": "rustc 1.68.0-nightly", "build_info": { "build_mode": "Debug", - "cargo_contract_version": "3.0.1", + "cargo_contract_version": "2.0.0-rc.1", "rust_toolchain": "nightly-aarch64-apple-darwin", "wasm_opt_settings": { "keep_debug_symbols": false, diff --git a/artifacts/identity.contract b/artifacts/identity.contract index def3cff..4a02b56 100644 --- a/artifacts/identity.contract +++ b/artifacts/identity.contract @@ -1 +1 @@ -{"source":{"hash":"0xc58b8fed4f9222b100630773cb8793c9db7548b0a03a6ef1e55b87d6794fe0c9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000000000303030503060500050000000305060b0002040008050000000005030903050200000303000900000503000003030300080003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241dc8104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d012004200310392203450d020b200041003602082000200336020420002001360200200241106a24000f0b103c000b2004103d000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241dc81043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102620022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310b0c0041e481042000200110280ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141dc81043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103d000b0f0b103c000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b910101017f230041d0006b22022400200241086a41e481042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103a20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103b200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103d000b103c000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103e20004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a103f200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110260c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103820032802142202450d01200328021022014100480d012001200210392206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b22021038200328020c210b200328020821042003200110382003200636026020032003290300370264200341d0006a2004200b200341e0006a103a2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103b2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103c000b2001103d000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011026200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110242001200041d8026a10272000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41e481042002105c41e881042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011057000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41e081042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a2006103e027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a103f410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061024200620004198026a10272002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011057000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41e08104200028024c2203200041b8026a1028200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011057000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41ec81042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011057000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10254108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011057000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10252000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1058000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011057000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1025200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1058000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103b200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103a20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f0000005906000024000000b16cd67c6dbd733300e945ca3b605e7d7733867e4661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The `IdentityNo` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The `NetworkId` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The `NetworkId` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The `NetworkId` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the `IdentityInfo` of an identity that is associated with"," the provided `IdentityNo`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified `NetworkId`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a `NetworkId`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the `IdentityNo`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file +{"source":{"hash":"0x1273ee72516d892381f0287cf57ce8f7b7a161916755c78083999284ab8280ac","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000300000003030503060500050000000305060b0000000204000805000005030903050200000303000900000503000003030308000003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241e08104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d0120042003103b2203450d020b200041003602082000200336020420002001360200200241106a24000f0b103e000b2004103f000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000b0c0041dc81042000200110250ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102720022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241e081043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141e081043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b910101017f230041d0006b22022400200241086a41dc81042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103f000b0f0b103e000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103c20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103d200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103f000b103e000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103820004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a1039200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110270c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103a20032802142202450d01200328021022014100480d0120012002103b2206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b2202103a200328020c210b2003280208210420032001103a2003200636026020032003290300370264200341d0006a2004200b200341e0006a103c2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103d2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103e000b2001103f000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011027200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110282001200041d8026a10242000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41dc81042002105c41e481042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011058000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41ec81042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a20061038027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a1039410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061028200620004198026a10242002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011058000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41ec8104200028024c2203200041b8026a1025200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011058000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41e881042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011058000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10264108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011058000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10262000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1057000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011058000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1026200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1057000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103d200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103d200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103c20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f000000590600002400000000e945cab16cd67c3b605e7d7733867e6dbd73334661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The `IdentityNo` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The `NetworkId` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The `NetworkId` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The `NetworkId` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the `IdentityInfo` of an identity that is associated with"," the provided `IdentityNo`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified `NetworkId`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a `NetworkId`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the `IdentityNo`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/artifacts/identity.json b/artifacts/identity.json index ae8b090..3688fa4 100644 --- a/artifacts/identity.json +++ b/artifacts/identity.json @@ -1,11 +1,11 @@ { "source": { - "hash": "0xc58b8fed4f9222b100630773cb8793c9db7548b0a03a6ef1e55b87d6794fe0c9", + "hash": "0xee17bba51b46f56affec703536dcecd32824105ca8fb9bb2a86d11e7c93c99bc", "language": "ink! 4.2.0", "compiler": "rustc 1.68.0-nightly", "build_info": { - "build_mode": "Debug", - "cargo_contract_version": "3.0.1", + "build_mode": "Release", + "cargo_contract_version": "2.0.0-rc.1", "rust_toolchain": "nightly-aarch64-apple-darwin", "wasm_opt_settings": { "keep_debug_symbols": false, diff --git a/package.json b/package.json index 106d369..4f77381 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@polkadot/keyring": "^12.3.2", "@polkadot/types": "^10.8.1", "@polkadot/util": "^12.3.1", + "@polkadot/wasm-crypto-init": "^7.2.1", "@scio-labs/use-inkathon": "^0.0.1-alpha.44", "@types/react-copy-to-clipboard": "^5.0.4", "aes-js": "^3.1.2", diff --git a/types/build-extrinsic/address_book.ts b/types/build-extrinsic/address_book.ts index c260685..6926713 100644 --- a/types/build-extrinsic/address_book.ts +++ b/types/build-extrinsic/address_book.ts @@ -1,21 +1,20 @@ /* This file is auto-generated */ -import type { GasLimit } from '@727-ventures/typechain-types'; -import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; -import type BN from 'bn.js'; - +import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; +import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; import type * as ArgumentTypes from '../types-arguments/address_book'; +import type BN from 'bn.js'; +import type { ApiPromise } from '@polkadot/api'; export default class Methods { - private __nativeContract: ContractPromise; + private __nativeContract : ContractPromise; private __apiPromise: ApiPromise; constructor( - nativeContract: ContractPromise, + nativeContract : ContractPromise, apiPromise: ApiPromise, ) { this.__nativeContract = nativeContract; @@ -25,30 +24,30 @@ export default class Methods { * identityContract * */ - "identityContract"( + "identityContract" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "identityContract", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityContract", [], __options); } /** * createAddressBook * */ - "createAddressBook"( + "createAddressBook" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "createAddressBook", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createAddressBook", [], __options); } /** * removeAddressBook * */ - "removeAddressBook"( + "removeAddressBook" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "removeAddressBook", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddressBook", [], __options); } /** @@ -57,12 +56,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { string | null } nickname, */ - "addIdentity"( + "addIdentity" ( identityNo: (number | string | BN), nickname: string | null, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "addIdentity", [identityNo, nickname], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addIdentity", [identityNo, nickname], __options); } /** @@ -70,11 +69,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "removeIdentity"( + "removeIdentity" ( identityNo: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "removeIdentity", [identityNo], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [identityNo], __options); } /** @@ -83,12 +82,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { string | null } newNickname, */ - "updateNickname"( + "updateNickname" ( identityNo: (number | string | BN), newNickname: string | null, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "updateNickname", [identityNo, newNickname], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNickname", [identityNo, newNickname], __options); } /** @@ -96,21 +95,21 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } account, */ - "identitiesOf"( + "identitiesOf" ( account: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "identitiesOf", [account], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identitiesOf", [account], __options); } /** * hasAddressBook * */ - "hasAddressBook"( + "hasAddressBook" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "hasAddressBook", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "hasAddressBook", [], __options); } } \ No newline at end of file diff --git a/types/build-extrinsic/identity.ts b/types/build-extrinsic/identity.ts index 3481097..b4df9e4 100644 --- a/types/build-extrinsic/identity.ts +++ b/types/build-extrinsic/identity.ts @@ -1,21 +1,20 @@ /* This file is auto-generated */ -import type { GasLimit } from '@727-ventures/typechain-types'; -import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; -import type BN from 'bn.js'; - +import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; +import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; import type * as ArgumentTypes from '../types-arguments/identity'; +import type BN from 'bn.js'; +import type { ApiPromise } from '@polkadot/api'; export default class Methods { - private __nativeContract: ContractPromise; + private __nativeContract : ContractPromise; private __apiPromise: ApiPromise; constructor( - nativeContract: ContractPromise, + nativeContract : ContractPromise, apiPromise: ApiPromise, ) { this.__nativeContract = nativeContract; @@ -26,11 +25,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "identity"( + "identity" ( identityNo: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "identity", [identityNo], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identity", [identityNo], __options); } /** @@ -38,11 +37,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "ownerOf"( + "ownerOf" ( identityNo: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "ownerOf", [identityNo], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "ownerOf", [identityNo], __options); } /** @@ -50,11 +49,11 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } owner, */ - "identityOf"( + "identityOf" ( owner: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "identityOf", [owner], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityOf", [owner], __options); } /** @@ -62,11 +61,11 @@ export default class Methods { * * @param { (number | string | BN) } networkId, */ - "networkInfoOf"( + "networkInfoOf" ( networkId: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "networkInfoOf", [networkId], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "networkInfoOf", [networkId], __options); } /** @@ -75,32 +74,32 @@ export default class Methods { * @param { (number | string | BN) } receiver, * @param { (number | string | BN) } network, */ - "transactionDestination"( + "transactionDestination" ( receiver: (number | string | BN), network: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "transactionDestination", [receiver, network], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transactionDestination", [receiver, network], __options); } /** * availableNetworks * */ - "availableNetworks"( + "availableNetworks" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "availableNetworks", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "availableNetworks", [], __options); } /** * createIdentity * */ - "createIdentity"( + "createIdentity" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "createIdentity", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createIdentity", [], __options); } /** @@ -109,12 +108,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @param { Array<(number | string | BN)> } address, */ - "addAddress"( + "addAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "addAddress", [network, address], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addAddress", [network, address], __options); } /** @@ -123,12 +122,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @param { Array<(number | string | BN)> } address, */ - "updateAddress"( + "updateAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "updateAddress", [network, address], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateAddress", [network, address], __options); } /** @@ -136,21 +135,21 @@ export default class Methods { * * @param { (number | string | BN) } network, */ - "removeAddress"( + "removeAddress" ( network: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "removeAddress", [network], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddress", [network], __options); } /** * removeIdentity * */ - "removeIdentity"( + "removeIdentity" ( __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "removeIdentity", [], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [], __options); } /** @@ -158,11 +157,11 @@ export default class Methods { * * @param { ArgumentTypes.NetworkInfo } info, */ - "addNetwork"( + "addNetwork" ( info: ArgumentTypes.NetworkInfo, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "addNetwork", [info], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addNetwork", [info], __options); } /** @@ -172,13 +171,13 @@ export default class Methods { * @param { string | null } newRpcUrl, * @param { ArgumentTypes.AccountType | null } newAddressType, */ - "updateNetwork"( + "updateNetwork" ( networkId: (number | string | BN), newRpcUrl: string | null, newAddressType: ArgumentTypes.AccountType | null, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options); } /** @@ -186,11 +185,11 @@ export default class Methods { * * @param { (number | string | BN) } networkId, */ - "removeNetwork"( + "removeNetwork" ( networkId: (number | string | BN), __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "removeNetwork", [networkId], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeNetwork", [networkId], __options); } /** @@ -198,11 +197,11 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } recoveryAccount, */ - "setRecoveryAccount"( + "setRecoveryAccount" ( recoveryAccount: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "setRecoveryAccount", [recoveryAccount], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "setRecoveryAccount", [recoveryAccount], __options); } /** @@ -211,12 +210,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { ArgumentTypes.AccountId } newOwner, */ - "transferOwnership"( + "transferOwnership" ( identityNo: (number | string | BN), newOwner: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return buildSubmittableExtrinsic(this.__apiPromise, this.__nativeContract, "transferOwnership", [identityNo, newOwner], __options); + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transferOwnership", [identityNo, newOwner], __options); } } \ No newline at end of file diff --git a/types/constructors/address_book.ts b/types/constructors/address_book.ts index 56eee49..5b88358 100644 --- a/types/constructors/address_book.ts +++ b/types/constructors/address_book.ts @@ -1,70 +1,53 @@ -import type { ConstructorOptions } from '@727-ventures/typechain-types'; -import { - _genValidGasLimitAndValue, - _signAndSend, - SignAndSendSuccessResponse, -} from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; -import { CodePromise } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { WeightV2 } from '@polkadot/types/interfaces'; - -import { ContractFile } from '../contract-info/address_book'; +import {CodePromise} from "@polkadot/api-contract"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import type {ApiPromise} from "@polkadot/api"; +import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; +import type {ConstructorOptions} from "@727-ventures/typechain-types"; +import type {WeightV2} from "@polkadot/types/interfaces"; import type * as ArgumentTypes from '../types-arguments/address_book'; +import { ContractFile } from '../contract-info/address_book'; +import type BN from 'bn.js'; export default class Constructors { readonly nativeAPI: ApiPromise; readonly signer: KeyringPair; - constructor(nativeAPI: ApiPromise, signer: KeyringPair) { + constructor( + nativeAPI: ApiPromise, + signer: KeyringPair, + ) { this.nativeAPI = nativeAPI; this.signer = signer; } /** - * new - * - * @param { ArgumentTypes.AccountId } identityContract, - */ - async new( + * new + * + * @param { ArgumentTypes.AccountId } identityContract, + */ + async "new" ( identityContract: ArgumentTypes.AccountId, - __options?: ConstructorOptions - ) { - const __contract = JSON.parse(ContractFile); - const code = new CodePromise( - this.nativeAPI, - __contract, - __contract.source.wasm - ); - const gasLimit = ( - await _genValidGasLimitAndValue(this.nativeAPI, __options) - ).gasLimit as WeightV2; + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx['new']!( - { gasLimit, storageDepositLimit, value: __options?.value }, - identityContract - ); - let response; + const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, identityContract); + let response; - try { - response = await _signAndSend( - this.nativeAPI.registry, - tx, - this.signer, - (event: any) => event - ); - } catch (error) { - // eslint-disable-next-line no-console - console.log(error); - } + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } return { result: response as SignAndSendSuccessResponse, - address: - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), }; } -} +} \ No newline at end of file diff --git a/types/constructors/identity.ts b/types/constructors/identity.ts index e4c2e71..7887d46 100644 --- a/types/constructors/identity.ts +++ b/types/constructors/identity.ts @@ -1,12 +1,12 @@ -import type { ConstructorOptions } from "@727-ventures/typechain-types"; -import { _genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse } from "@727-ventures/typechain-types"; -import type { ApiPromise } from "@polkadot/api"; -import { CodePromise } from "@polkadot/api-contract"; -import type { KeyringPair } from "@polkadot/keyring/types"; -import type { WeightV2 } from "@polkadot/types/interfaces"; - -import { ContractFile } from '../contract-info/identity'; +import {CodePromise} from "@polkadot/api-contract"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import type {ApiPromise} from "@polkadot/api"; +import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; +import type {ConstructorOptions} from "@727-ventures/typechain-types"; +import type {WeightV2} from "@polkadot/types/interfaces"; import type * as ArgumentTypes from '../types-arguments/identity'; +import { ContractFile } from '../contract-info/identity'; +import type BN from 'bn.js'; export default class Constructors { readonly nativeAPI: ApiPromise; @@ -24,28 +24,26 @@ export default class Constructors { * new * */ - async "new"( - __options?: ConstructorOptions, - ) { - const __contract = JSON.parse(ContractFile); + async "new" ( + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value },); - let response; + const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, ); + let response; - try { - response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); - } - catch (error) { - // eslint-disable-next-line no-console - console.log(error); - } + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } return { result: response as SignAndSendSuccessResponse, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), }; @@ -55,29 +53,27 @@ export default class Constructors { * * @param { Array } networks, */ - async "initWithNetworks"( + async "initWithNetworks" ( networks: Array, - __options?: ConstructorOptions, - ) { - const __contract = JSON.parse(ContractFile); + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx["initWithNetworks"]!({ gasLimit, storageDepositLimit, value: __options?.value }, networks); - let response; + const tx = code.tx["initWithNetworks"]!({ gasLimit, storageDepositLimit, value: __options?.value }, networks); + let response; - try { - response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); - } - catch (error) { - // eslint-disable-next-line no-console - console.log(error); - } + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } return { result: response as SignAndSendSuccessResponse, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), }; diff --git a/types/contract-info/address_book.ts b/types/contract-info/address_book.ts index 720ed8e..94f1d69 100644 --- a/types/contract-info/address_book.ts +++ b/types/contract-info/address_book.ts @@ -1,2 +1,2 @@ -export const ContractAbi = `{"source":{"hash":"0xf3351b91ee1e761f370e3e86fc1b6489a2e275ca59944958300a8def008ca8e2","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; -export const ContractFile = `{"source":{"hash":"0xf3351b91ee1e761f370e3e86fc1b6489a2e275ca59944958300a8def008ca8e2","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c020100690000007b000000110000005c0201006900000078000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file +export const ContractAbi = `{"source":{"hash":"0xf7970b103d9644b533629c2938375218f75ee515fc2628648cf2b326f72a5232","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; +export const ContractFile = `{"source":{"hash":"0xc4b25de87d73f70b7b8c799703d86c163d58e7a9f474ac63de4f53e4542b88f9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c0201006900000078000000110000005c020100690000007b000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contract-info/identity.ts b/types/contract-info/identity.ts index 0038ffe..0ce00bb 100644 --- a/types/contract-info/identity.ts +++ b/types/contract-info/identity.ts @@ -1,2 +1,2 @@ -export const ContractAbi = `{"source":{"hash":"0xc58b8fed4f9222b100630773cb8793c9db7548b0a03a6ef1e55b87d6794fe0c9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; -export const ContractFile = `{"source":{"hash":"0xc58b8fed4f9222b100630773cb8793c9db7548b0a03a6ef1e55b87d6794fe0c9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000000000303030503060500050000000305060b0002040008050000000005030903050200000303000900000503000003030300080003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241dc8104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d012004200310392203450d020b200041003602082000200336020420002001360200200241106a24000f0b103c000b2004103d000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241dc81043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102620022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310b0c0041e481042000200110280ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141dc81043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103d000b0f0b103c000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b910101017f230041d0006b22022400200241086a41e481042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103a20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103b200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103d000b103c000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103e20004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a103f200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110260c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103820032802142202450d01200328021022014100480d012001200210392206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b22021038200328020c210b200328020821042003200110382003200636026020032003290300370264200341d0006a2004200b200341e0006a103a2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103b2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103c000b2001103d000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011026200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110242001200041d8026a10272000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41e481042002105c41e881042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011057000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41e081042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a2006103e027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a103f410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061024200620004198026a10272002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011057000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41e08104200028024c2203200041b8026a1028200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011057000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41ec81042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011057000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10254108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011057000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10252000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1058000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011057000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1025200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1058000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103b200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103a20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f0000005906000024000000b16cd67c6dbd733300e945ca3b605e7d7733867e4661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e322f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"3.0.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file +export const ContractAbi = `{"source":{"hash":"0xee17bba51b46f56affec703536dcecd32824105ca8fb9bb2a86d11e7c93c99bc","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Release","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; +export const ContractFile = `{"source":{"hash":"0x1273ee72516d892381f0287cf57ce8f7b7a161916755c78083999284ab8280ac","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000300000003030503060500050000000305060b0000000204000805000005030903050200000303000900000503000003030308000003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241e08104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d0120042003103b2203450d020b200041003602082000200336020420002001360200200241106a24000f0b103e000b2004103f000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000b0c0041dc81042000200110250ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102720022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241e081043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141e081043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b910101017f230041d0006b22022400200241086a41dc81042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103f000b0f0b103e000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103c20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103d200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103f000b103e000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103820004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a1039200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110270c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103a20032802142202450d01200328021022014100480d0120012002103b2206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b2202103a200328020c210b2003280208210420032001103a2003200636026020032003290300370264200341d0006a2004200b200341e0006a103c2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103d2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103e000b2001103f000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011027200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110282001200041d8026a10242000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41dc81042002105c41e481042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011058000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41ec81042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a20061038027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a1039410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061028200620004198026a10242002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011058000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41ec8104200028024c2203200041b8026a1025200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011058000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41e881042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011058000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10264108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011058000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10262000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1057000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011058000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1026200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1057000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103d200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103d200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103c20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f000000590600002400000000e945cab16cd67c3b605e7d7733867e6dbd73334661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contracts/address_book.ts b/types/contracts/address_book.ts index 6dd6d82..e80d81b 100644 --- a/types/contracts/address_book.ts +++ b/types/contracts/address_book.ts @@ -2,29 +2,28 @@ import type { ApiPromise } from '@polkadot/api'; import { Abi } from '@polkadot/api-contract'; -import { ContractPromise } from '@polkadot/api-contract'; import type { KeyringPair } from '@polkadot/keyring/types'; - -import BuildExtrinsicMethods from '../build-extrinsic/address_book'; +import { ContractPromise } from '@polkadot/api-contract'; import { ContractAbi } from '../contract-info/address_book'; -import EventsClass from '../events/address_book'; -import MixedMethods from '../mixed-methods/address_book'; import QueryMethods from '../query/address_book'; +import BuildExtrinsicMethods from '../build-extrinsic/address_book'; import TxSignAndSendMethods from '../tx-sign-and-send/address_book'; +import MixedMethods from '../mixed-methods/address_book'; +import EventsClass from '../events/address_book'; export default class Contract { - readonly query: QueryMethods; - readonly buildExtrinsic: BuildExtrinsicMethods; - readonly tx: TxSignAndSendMethods; - readonly methods: MixedMethods; + readonly query : QueryMethods; + readonly buildExtrinsic : BuildExtrinsicMethods; + readonly tx : TxSignAndSendMethods; + readonly methods : MixedMethods; readonly events: EventsClass; - readonly address: string; - readonly signer: KeyringPair; + readonly address : string; + readonly signer : KeyringPair; - private nativeContract: ContractPromise; - private nativeAPI: ApiPromise; + private nativeContract : ContractPromise; + private nativeAPI : ApiPromise; private contractAbi: Abi; /** @@ -35,9 +34,9 @@ export default class Contract { * @param nativeAPI - The API instance to use for queries. */ constructor( - address: string, - signer: KeyringPair, - nativeAPI: ApiPromise, + address : string, + signer : KeyringPair, + nativeAPI : ApiPromise, ) { this.address = address; this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); @@ -57,7 +56,7 @@ export default class Contract { * * @returns The name of the contract. */ - get name(): string { + get name() : string { return this.nativeContract.abi.info.contract.name.toString(); } @@ -66,7 +65,7 @@ export default class Contract { * * @returns The abi of the contract. */ - get abi(): Abi { + get abi() : Abi { return this.contractAbi; } @@ -82,7 +81,7 @@ export default class Contract { * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); * ``` */ - withSigner(signer: KeyringPair): Contract { + withSigner(signer : KeyringPair) : Contract { return new Contract(this.address, signer, this.nativeAPI); } @@ -92,7 +91,7 @@ export default class Contract { * @param address - The address of the contract. * @returns New instance of the contract class to interact with new contract. */ - withAddress(address: string): Contract { + withAddress(address : string) : Contract { return new Contract(address, this.signer, this.nativeAPI); } @@ -102,7 +101,7 @@ export default class Contract { * @param api - The API instance to use for queries. * @returns New instance of the contract class to interact with new API. */ - withAPI(api: ApiPromise): Contract { + withAPI(api : ApiPromise) : Contract { return new Contract(this.address, this.signer, api); } } \ No newline at end of file diff --git a/types/contracts/identity.ts b/types/contracts/identity.ts index b38e319..85277d2 100644 --- a/types/contracts/identity.ts +++ b/types/contracts/identity.ts @@ -2,29 +2,28 @@ import type { ApiPromise } from '@polkadot/api'; import { Abi } from '@polkadot/api-contract'; -import { ContractPromise } from '@polkadot/api-contract'; import type { KeyringPair } from '@polkadot/keyring/types'; - -import BuildExtrinsicMethods from '../build-extrinsic/identity'; +import { ContractPromise } from '@polkadot/api-contract'; import { ContractAbi } from '../contract-info/identity'; -import EventsClass from '../events/identity'; -import MixedMethods from '../mixed-methods/identity'; import QueryMethods from '../query/identity'; +import BuildExtrinsicMethods from '../build-extrinsic/identity'; import TxSignAndSendMethods from '../tx-sign-and-send/identity'; +import MixedMethods from '../mixed-methods/identity'; +import EventsClass from '../events/identity'; export default class Contract { - readonly query: QueryMethods; - readonly buildExtrinsic: BuildExtrinsicMethods; - readonly tx: TxSignAndSendMethods; - readonly methods: MixedMethods; + readonly query : QueryMethods; + readonly buildExtrinsic : BuildExtrinsicMethods; + readonly tx : TxSignAndSendMethods; + readonly methods : MixedMethods; readonly events: EventsClass; - readonly address: string; - readonly signer: KeyringPair; + readonly address : string; + readonly signer : KeyringPair; - private nativeContract: ContractPromise; - private nativeAPI: ApiPromise; + private nativeContract : ContractPromise; + private nativeAPI : ApiPromise; private contractAbi: Abi; /** @@ -35,9 +34,9 @@ export default class Contract { * @param nativeAPI - The API instance to use for queries. */ constructor( - address: string, - signer: KeyringPair, - nativeAPI: ApiPromise, + address : string, + signer : KeyringPair, + nativeAPI : ApiPromise, ) { this.address = address; this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); @@ -57,7 +56,7 @@ export default class Contract { * * @returns The name of the contract. */ - get name(): string { + get name() : string { return this.nativeContract.abi.info.contract.name.toString(); } @@ -66,7 +65,7 @@ export default class Contract { * * @returns The abi of the contract. */ - get abi(): Abi { + get abi() : Abi { return this.contractAbi; } @@ -82,7 +81,7 @@ export default class Contract { * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); * ``` */ - withSigner(signer: KeyringPair): Contract { + withSigner(signer : KeyringPair) : Contract { return new Contract(this.address, signer, this.nativeAPI); } @@ -92,7 +91,7 @@ export default class Contract { * @param address - The address of the contract. * @returns New instance of the contract class to interact with new contract. */ - withAddress(address: string): Contract { + withAddress(address : string) : Contract { return new Contract(address, this.signer, this.nativeAPI); } @@ -102,7 +101,7 @@ export default class Contract { * @param api - The API instance to use for queries. * @returns New instance of the contract class to interact with new API. */ - withAPI(api: ApiPromise): Contract { + withAPI(api : ApiPromise) : Contract { return new Contract(this.address, this.signer, api); } } \ No newline at end of file diff --git a/types/data/address_book.json b/types/data/address_book.json index 746b734..7735b58 100644 --- a/types/data/address_book.json +++ b/types/data/address_book.json @@ -1,3 +1,351 @@ { -"0": {"name":"Array","body":{"0":{"name":"Tuple","body":{"0":{"name":"number","isResult":false,"isPrimitive":true,"isConvertable":false},"1":{"name":"Option","body":{"0":{"name":"string","isResult":false,"isPrimitive":true,"isConvertable":false},"1":{"name":"null","isResult":false,"isPrimitive":true,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false},"1": {"name":"Tuple","body":{"0":{"name":"number","isResult":false,"isPrimitive":true,"isConvertable":false},"1":{"name":"Option","body":{"0":{"name":"string","isResult":false,"isPrimitive":true,"isConvertable":false},"1":{"name":"null","isResult":false,"isPrimitive":true,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false},"2": {"name":"number","isResult":false,"isPrimitive":true,"isConvertable":false},"3": {"name":"Option","body":{"0":{"name":"string","isResult":false,"isPrimitive":true,"isConvertable":false},"1":{"name":"null","isResult":false,"isPrimitive":true,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false},"4": {"name":"string","isResult":false,"isPrimitive":true,"isConvertable":false},"5": {"name":"AccountId","body":"string | number[]","isResult":false,"isPrimitive":true,"isConvertable":false},"6": {"name":"Array","body":{"0":{"name":"number","isResult":false,"isPrimitive":true,"isConvertable":false}},"isResult":false,"isPrimitive":false,"isConvertable":false},"7": {"name":"number","isResult":false,"isPrimitive":true,"isConvertable":false},"9": {"name":"null","isResult":false,"isPrimitive":true,"isConvertable":false},"10": {"name":"LangError","body":{"CouldNotReadInput":null},"isResult":false,"isPrimitive":false,"isConvertable":false},"11": {"name":"Result void) { + public subscribeOnAddressBookCreatedEvent(callback : (event : EventTypes.AddressBookCreated) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -29,12 +28,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('AddressBookCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookCreated); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'AddressBookCreated'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookCreated'); } - public subscribeOnAddressBookRemovedEvent(callback: (_event: EventTypes.AddressBookRemoved) => void) { + public subscribeOnAddressBookRemovedEvent(callback : (event : EventTypes.AddressBookRemoved) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -43,12 +42,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('AddressBookRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookRemoved); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'AddressBookRemoved'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookRemoved'); } - public subscribeOnIdentityAddedEvent(callback: (_event: EventTypes.IdentityAdded) => void) { + public subscribeOnIdentityAddedEvent(callback : (event : EventTypes.IdentityAdded) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -57,12 +56,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('IdentityAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityAdded); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'IdentityAdded'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityAdded'); } - public subscribeOnNickNameUpdatedEvent(callback: (_event: EventTypes.NickNameUpdated) => void) { + public subscribeOnNickNameUpdatedEvent(callback : (event : EventTypes.NickNameUpdated) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -71,12 +70,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('NickNameUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NickNameUpdated); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'NickNameUpdated'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NickNameUpdated'); } - public subscribeOnIdentityRemovedEvent(callback: (_event: EventTypes.IdentityRemoved) => void) { + public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -85,15 +84,14 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'IdentityRemoved'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); } private __subscribeOnEvent( - callback: (_args: any[], _event: any) => void, - filter: (_eventName: string) => boolean = () => true + callback : (args: any[], event: any) => void, + filter : (eventName: string) => boolean = () => true ) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return this.__api.query.system.events((events) => { events.forEach((record: any) => { @@ -103,7 +101,7 @@ export default class EventsClass { const [address, data] = record.event.data; if (address.toString() === this.__nativeContract.address.toString()) { - const { args, event } = this.__nativeContract.abi.decodeEvent(data); + const {args, event} = this.__nativeContract.abi.decodeEvent(data); if (filter(event.identifier.toString())) callback(args, event); diff --git a/types/events/identity.ts b/types/events/identity.ts index 2f0fbb0..b84a1d5 100644 --- a/types/events/identity.ts +++ b/types/events/identity.ts @@ -1,26 +1,25 @@ -import { handleEventReturn } from "@727-ventures/typechain-types"; -import type { ApiPromise } from "@polkadot/api"; -import type { ContractPromise } from "@polkadot/api-contract"; - -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; import type * as EventTypes from '../event-types/identity'; -import { getEventTypeDescription } from "../shared/utils"; +import type {ContractPromise} from "@polkadot/api-contract"; +import type {ApiPromise} from "@polkadot/api"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; +import {getEventTypeDescription} from "../shared/utils"; +import {handleEventReturn} from "@727-ventures/typechain-types"; export default class EventsClass { - private __nativeContract: ContractPromise; - private __api: ApiPromise; + private __nativeContract : ContractPromise; + private __api : ApiPromise; constructor( - nativeContract: ContractPromise, - api: ApiPromise, + nativeContract : ContractPromise, + api : ApiPromise, ) { this.__nativeContract = nativeContract; this.__api = api; } - public subscribeOnIdentityCreatedEvent(callback: (_event: EventTypes.IdentityCreated) => void) { + public subscribeOnIdentityCreatedEvent(callback : (event : EventTypes.IdentityCreated) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -29,12 +28,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('IdentityCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityCreated); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'IdentityCreated'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityCreated'); } - public subscribeOnAddressAddedEvent(callback: (_event: EventTypes.AddressAdded) => void) { + public subscribeOnAddressAddedEvent(callback : (event : EventTypes.AddressAdded) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -43,12 +42,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('AddressAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressAdded); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'AddressAdded'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressAdded'); } - public subscribeOnAddressUpdatedEvent(callback: (_event: EventTypes.AddressUpdated) => void) { + public subscribeOnAddressUpdatedEvent(callback : (event : EventTypes.AddressUpdated) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -57,12 +56,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('AddressUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressUpdated); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'AddressUpdated'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressUpdated'); } - public subscribeOnAddressRemovedEvent(callback: (_event: EventTypes.AddressRemoved) => void) { + public subscribeOnAddressRemovedEvent(callback : (event : EventTypes.AddressRemoved) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -71,12 +70,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('AddressRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressRemoved); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'AddressRemoved'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressRemoved'); } - public subscribeOnIdentityRemovedEvent(callback: (_event: EventTypes.IdentityRemoved) => void) { + public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -85,12 +84,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'IdentityRemoved'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); } - public subscribeOnNetworkAddedEvent(callback: (_event: EventTypes.NetworkAdded) => void) { + public subscribeOnNetworkAddedEvent(callback : (event : EventTypes.NetworkAdded) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -99,12 +98,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('NetworkAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkAdded); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'NetworkAdded'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkAdded'); } - public subscribeOnNetworkUpdatedEvent(callback: (_event: EventTypes.NetworkUpdated) => void) { + public subscribeOnNetworkUpdatedEvent(callback : (event : EventTypes.NetworkUpdated) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -113,12 +112,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('NetworkUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkUpdated); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'NetworkUpdated'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkUpdated'); } - public subscribeOnNetworkRemovedEvent(callback: (_event: EventTypes.NetworkRemoved) => void) { + public subscribeOnNetworkRemovedEvent(callback : (event : EventTypes.NetworkRemoved) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -127,12 +126,12 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('NetworkRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkRemoved); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'NetworkRemoved'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkRemoved'); } - public subscribeOnRecoveryAccountSetEvent(callback: (_event: EventTypes.RecoveryAccountSet) => void) { + public subscribeOnRecoveryAccountSetEvent(callback : (event : EventTypes.RecoveryAccountSet) => void) { const callbackWrapper = (args: any[], event: any) => { - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); @@ -141,15 +140,14 @@ export default class EventsClass { callback(handleEventReturn(_event, getEventTypeDescription('RecoveryAccountSet', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.RecoveryAccountSet); }; - return this.__subscribeOnEvent(callbackWrapper, (eventName: string) => eventName == 'RecoveryAccountSet'); + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'RecoveryAccountSet'); } private __subscribeOnEvent( - callback: (_args: any[], _event: any) => void, - filter: (_eventName: string) => boolean = () => true + callback : (args: any[], event: any) => void, + filter : (eventName: string) => boolean = () => true ) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return this.__api.query.system.events((events) => { events.forEach((record: any) => { @@ -159,7 +157,7 @@ export default class EventsClass { const [address, data] = record.event.data; if (address.toString() === this.__nativeContract.address.toString()) { - const { args, event } = this.__nativeContract.abi.decodeEvent(data); + const {args, event} = this.__nativeContract.abi.decodeEvent(data); if (filter(event.identifier.toString())) callback(args, event); diff --git a/types/mixed-methods/address_book.ts b/types/mixed-methods/address_book.ts index fc088ef..b305e43 100644 --- a/types/mixed-methods/address_book.ts +++ b/types/mixed-methods/address_book.ts @@ -1,37 +1,35 @@ /* This file is auto-generated */ -import type { GasLimit, Result } from '@727-ventures/typechain-types'; +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { handleReturnType, queryOkJSON } from '@727-ventures/typechain-types'; +import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; import { txSignAndSend } from '@727-ventures/typechain-types'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment +import type * as ArgumentTypes from '../types-arguments/address_book'; +import type * as ReturnTypes from '../types-returns/address_book'; +import type BN from 'bn.js'; //@ts-ignore -import type { ApiPromise } from '@polkadot/api'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; // @ts-ignore -import type { EventRecord } from "@polkadot/api/submittable"; -import type { ContractPromise } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type BN from 'bn.js'; - -import { getTypeDescription } from './../shared/utils'; +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; -import { decodeEvents } from "../shared/utils"; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import type * as ReturnTypes from '../types-returns/address_book'; export default class Methods { - private __nativeContract: ContractPromise; - private __keyringPair: KeyringPair; - private __callerAddress: string; + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __callerAddress : string; private __apiPromise: ApiPromise; constructor( - apiPromise: ApiPromise, - nativeContract: ContractPromise, - keyringPair: KeyringPair, + apiPromise : ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, ) { this.__apiPromise = apiPromise; this.__nativeContract = nativeContract; @@ -44,10 +42,10 @@ export default class Methods { * * @returns { Result } */ - "identityContract"( + "identityContract" ( __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options, (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options, (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -55,10 +53,10 @@ export default class Methods { * * @returns { void } */ - "createAddressBook"( + "createAddressBook" ( __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -68,10 +66,10 @@ export default class Methods { * * @returns { void } */ - "removeAddressBook"( + "removeAddressBook" ( __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -83,12 +81,12 @@ export default class Methods { * @param { string | null } nickname, * @returns { void } */ - "addIdentity"( + "addIdentity" ( identityNo: (number | string | BN), nickname: string | null, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, nickname], __options); } @@ -99,11 +97,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { void } */ - "removeIdentity"( + "removeIdentity" ( identityNo: (number | string | BN), __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo], __options); } @@ -115,12 +113,12 @@ export default class Methods { * @param { string | null } newNickname, * @returns { void } */ - "updateNickname"( + "updateNickname" ( identityNo: (number | string | BN), newNickname: string | null, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, newNickname], __options); } @@ -131,11 +129,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } account, * @returns { Result, ReturnTypes.LangError> } */ - "identitiesOf"( + "identitiesOf" ( account: ArgumentTypes.AccountId, __options: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options, (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options, (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -143,10 +141,10 @@ export default class Methods { * * @returns { Result } */ - "hasAddressBook"( + "hasAddressBook" ( __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); } } \ No newline at end of file diff --git a/types/mixed-methods/identity.ts b/types/mixed-methods/identity.ts index 98a5154..c2485c2 100644 --- a/types/mixed-methods/identity.ts +++ b/types/mixed-methods/identity.ts @@ -1,37 +1,35 @@ /* This file is auto-generated */ -import type { GasLimit, Result } from '@727-ventures/typechain-types'; +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { handleReturnType, queryOkJSON } from '@727-ventures/typechain-types'; +import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; import { txSignAndSend } from '@727-ventures/typechain-types'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment +import type * as ArgumentTypes from '../types-arguments/identity'; +import type * as ReturnTypes from '../types-returns/identity'; +import type BN from 'bn.js'; //@ts-ignore -import type { ApiPromise } from '@polkadot/api'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; // @ts-ignore -import type { EventRecord } from "@polkadot/api/submittable"; -import type { ContractPromise } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type BN from 'bn.js'; - -import { getTypeDescription } from './../shared/utils'; +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; -import { decodeEvents } from "../shared/utils"; -import type * as ArgumentTypes from '../types-arguments/identity'; -import type * as ReturnTypes from '../types-returns/identity'; export default class Methods { - private __nativeContract: ContractPromise; - private __keyringPair: KeyringPair; - private __callerAddress: string; + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __callerAddress : string; private __apiPromise: ApiPromise; constructor( - apiPromise: ApiPromise, - nativeContract: ContractPromise, - keyringPair: KeyringPair, + apiPromise : ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, ) { this.__apiPromise = apiPromise; this.__nativeContract = nativeContract; @@ -45,11 +43,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { Result } */ - "identity"( + "identity" ( identityNo: (number | string | BN), __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -58,11 +56,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { Result } */ - "ownerOf"( + "ownerOf" ( identityNo: (number | string | BN), __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -71,11 +69,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } owner, * @returns { Result } */ - "identityOf"( + "identityOf" ( owner: ArgumentTypes.AccountId, __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options, (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options, (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -84,11 +82,11 @@ export default class Methods { * @param { (number | string | BN) } networkId, * @returns { Result } */ - "networkInfoOf"( + "networkInfoOf" ( networkId: (number | string | BN), __options: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -98,12 +96,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } */ - "transactionDestination"( + "transactionDestination" ( receiver: (number | string | BN), network: (number | string | BN), __options: GasLimit, - ): Promise, ReturnTypes.Error>, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options, (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options, (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -111,10 +109,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "availableNetworks"( + "availableNetworks" ( __options: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options, (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options, (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -122,10 +120,10 @@ export default class Methods { * * @returns { void } */ - "createIdentity"( + "createIdentity" ( __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -137,12 +135,12 @@ export default class Methods { * @param { Array<(number | string | BN)> } address, * @returns { void } */ - "addAddress"( + "addAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network, address], __options); } @@ -154,12 +152,12 @@ export default class Methods { * @param { Array<(number | string | BN)> } address, * @returns { void } */ - "updateAddress"( + "updateAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network, address], __options); } @@ -170,11 +168,11 @@ export default class Methods { * @param { (number | string | BN) } network, * @returns { void } */ - "removeAddress"( + "removeAddress" ( network: (number | string | BN), __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network], __options); } @@ -184,10 +182,10 @@ export default class Methods { * * @returns { void } */ - "removeIdentity"( + "removeIdentity" ( __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -198,11 +196,11 @@ export default class Methods { * @param { ArgumentTypes.NetworkInfo } info, * @returns { void } */ - "addNetwork"( + "addNetwork" ( info: ArgumentTypes.NetworkInfo, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [info], __options); } @@ -215,13 +213,13 @@ export default class Methods { * @param { ArgumentTypes.AccountType | null } newAddressType, * @returns { void } */ - "updateNetwork"( + "updateNetwork" ( networkId: (number | string | BN), newRpcUrl: string | null, newAddressType: ArgumentTypes.AccountType | null, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [networkId, newRpcUrl, newAddressType], __options); } @@ -232,11 +230,11 @@ export default class Methods { * @param { (number | string | BN) } networkId, * @returns { void } */ - "removeNetwork"( + "removeNetwork" ( networkId: (number | string | BN), __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [networkId], __options); } @@ -247,11 +245,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } recoveryAccount, * @returns { void } */ - "setRecoveryAccount"( + "setRecoveryAccount" ( recoveryAccount: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [recoveryAccount], __options); } @@ -263,12 +261,12 @@ export default class Methods { * @param { ArgumentTypes.AccountId } newOwner, * @returns { void } */ - "transferOwnership"( + "transferOwnership" ( identityNo: (number | string | BN), newOwner: ArgumentTypes.AccountId, __options: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, newOwner], __options); } diff --git a/types/query/address_book.ts b/types/query/address_book.ts index 8bbe968..bb1a8f6 100644 --- a/types/query/address_book.ts +++ b/types/query/address_book.ts @@ -1,27 +1,28 @@ /* This file is auto-generated */ -import type { GasLimit, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { handleReturnType, queryOkJSON } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; -import type BN from 'bn.js'; - -import { getTypeDescription } from './../shared/utils'; -import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; import type * as ArgumentTypes from '../types-arguments/address_book'; import type * as ReturnTypes from '../types-returns/address_book'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; export default class Methods { - private __nativeContract: ContractPromise; + private __nativeContract : ContractPromise; private __apiPromise: ApiPromise; - private __callerAddress: string; + private __callerAddress : string; constructor( - nativeContract: ContractPromise, - nativeApi: ApiPromise, - callerAddress: string, + nativeContract : ContractPromise, + nativeApi : ApiPromise, + callerAddress : string, ) { this.__nativeContract = nativeContract; this.__callerAddress = callerAddress; @@ -33,10 +34,10 @@ export default class Methods { * * @returns { Result } */ - "identityContract"( - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options, (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); + "identityContract" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options , (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -44,10 +45,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "createAddressBook"( - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "createAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + "createAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -55,10 +56,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "removeAddressBook"( - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + "removeAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -68,12 +69,12 @@ export default class Methods { * @param { string | null } nickname, * @returns { Result, ReturnTypes.LangError> } */ - "addIdentity"( + "addIdentity" ( identityNo: (number | string | BN), nickname: string | null, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "addIdentity", [identityNo, nickname], __options, (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addIdentity", [identityNo, nickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -82,11 +83,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { Result, ReturnTypes.LangError> } */ - "removeIdentity"( + "removeIdentity" ( identityNo: (number | string | BN), - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -96,12 +97,12 @@ export default class Methods { * @param { string | null } newNickname, * @returns { Result, ReturnTypes.LangError> } */ - "updateNickname"( + "updateNickname" ( identityNo: (number | string | BN), newNickname: string | null, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNickname", [identityNo, newNickname], __options, (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNickname", [identityNo, newNickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -110,11 +111,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } account, * @returns { Result, ReturnTypes.LangError> } */ - "identitiesOf"( + "identitiesOf" ( account: ArgumentTypes.AccountId, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options, (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options , (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -122,10 +123,10 @@ export default class Methods { * * @returns { Result } */ - "hasAddressBook"( - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); + "hasAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); } } \ No newline at end of file diff --git a/types/query/identity.ts b/types/query/identity.ts index 7311edc..dede6d4 100644 --- a/types/query/identity.ts +++ b/types/query/identity.ts @@ -1,27 +1,28 @@ /* This file is auto-generated */ -import type { GasLimit, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { handleReturnType, queryOkJSON } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; -import type BN from 'bn.js'; - -import { getTypeDescription } from './../shared/utils'; -import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; import type * as ArgumentTypes from '../types-arguments/identity'; import type * as ReturnTypes from '../types-returns/identity'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; export default class Methods { - private __nativeContract: ContractPromise; + private __nativeContract : ContractPromise; private __apiPromise: ApiPromise; - private __callerAddress: string; + private __callerAddress : string; constructor( - nativeContract: ContractPromise, - nativeApi: ApiPromise, - callerAddress: string, + nativeContract : ContractPromise, + nativeApi : ApiPromise, + callerAddress : string, ) { this.__nativeContract = nativeContract; this.__callerAddress = callerAddress; @@ -34,11 +35,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { Result } */ - "identity"( + "identity" ( identityNo: (number | string | BN), - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -47,11 +48,11 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @returns { Result } */ - "ownerOf"( + "ownerOf" ( identityNo: (number | string | BN), - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -60,11 +61,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } owner, * @returns { Result } */ - "identityOf"( + "identityOf" ( owner: ArgumentTypes.AccountId, - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options, (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options , (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -73,11 +74,11 @@ export default class Methods { * @param { (number | string | BN) } networkId, * @returns { Result } */ - "networkInfoOf"( + "networkInfoOf" ( networkId: (number | string | BN), - __options?: GasLimit, - ): Promise>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -87,12 +88,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } */ - "transactionDestination"( + "transactionDestination" ( receiver: (number | string | BN), network: (number | string | BN), - __options?: GasLimit, - ): Promise, ReturnTypes.Error>, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options, (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options , (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -100,10 +101,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "availableNetworks"( - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options, (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); + "availableNetworks" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options , (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -111,10 +112,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "createIdentity"( - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "createIdentity", [], __options, (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); + "createIdentity" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -124,12 +125,12 @@ export default class Methods { * @param { Array<(number | string | BN)> } address, * @returns { Result, ReturnTypes.LangError> } */ - "addAddress"( + "addAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "addAddress", [network, address], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -139,12 +140,12 @@ export default class Methods { * @param { Array<(number | string | BN)> } address, * @returns { Result, ReturnTypes.LangError> } */ - "updateAddress"( + "updateAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateAddress", [network, address], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -153,11 +154,11 @@ export default class Methods { * @param { (number | string | BN) } network, * @returns { Result, ReturnTypes.LangError> } */ - "removeAddress"( + "removeAddress" ( network: (number | string | BN), - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddress", [network], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddress", [network], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -165,10 +166,10 @@ export default class Methods { * * @returns { Result, ReturnTypes.LangError> } */ - "removeIdentity"( - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + "removeIdentity" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -177,11 +178,11 @@ export default class Methods { * @param { ArgumentTypes.NetworkInfo } info, * @returns { Result, ReturnTypes.LangError> } */ - "addNetwork"( + "addNetwork" ( info: ArgumentTypes.NetworkInfo, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "addNetwork", [info], __options, (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addNetwork", [info], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -192,13 +193,13 @@ export default class Methods { * @param { ArgumentTypes.AccountType | null } newAddressType, * @returns { Result, ReturnTypes.LangError> } */ - "updateNetwork"( + "updateNetwork" ( networkId: (number | string | BN), newRpcUrl: string | null, newAddressType: ArgumentTypes.AccountType | null, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -207,11 +208,11 @@ export default class Methods { * @param { (number | string | BN) } networkId, * @returns { Result, ReturnTypes.LangError> } */ - "removeNetwork"( + "removeNetwork" ( networkId: (number | string | BN), - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeNetwork", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeNetwork", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -220,11 +221,11 @@ export default class Methods { * @param { ArgumentTypes.AccountId } recoveryAccount, * @returns { Result, ReturnTypes.LangError> } */ - "setRecoveryAccount"( + "setRecoveryAccount" ( recoveryAccount: ArgumentTypes.AccountId, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "setRecoveryAccount", [recoveryAccount], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "setRecoveryAccount", [recoveryAccount], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } /** @@ -234,12 +235,12 @@ export default class Methods { * @param { ArgumentTypes.AccountId } newOwner, * @returns { Result, ReturnTypes.LangError> } */ - "transferOwnership"( + "transferOwnership" ( identityNo: (number | string | BN), newOwner: ArgumentTypes.AccountId, - __options?: GasLimit, - ): Promise, ReturnTypes.LangError>>> { - return queryOkJSON(this.__apiPromise, this.__nativeContract, this.__callerAddress, "transferOwnership", [identityNo, newOwner], __options, (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transferOwnership", [identityNo, newOwner], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); } } \ No newline at end of file diff --git a/types/shared/utils.ts b/types/shared/utils.ts index cafebb7..395aa48 100644 --- a/types/shared/utils.ts +++ b/types/shared/utils.ts @@ -1,5 +1,6 @@ -import { handleEventReturn } from "@727-ventures/typechain-types"; -import type { ContractPromise } from "@polkadot/api-contract"; +import fs from "fs"; +import type {ContractPromise} from "@polkadot/api-contract"; +import {handleEventReturn} from "@727-ventures/typechain-types"; export function getTypeDescription(id: number | string, types: any): any { return types[id]; @@ -13,15 +14,15 @@ export function decodeEvents(events: any[], contract: ContractPromise, types: an return events.filter((record: any) => { const { event } = record; - const [address] = record.event.data; + const [address, data] = record.event.data; return event.method == 'ContractEmitted' && address.toString() === contract.address.toString(); }).map((record: any) => { - const [data] = record.event.data; + const [address, data] = record.event.data; - const { args, event } = contract.abi.decodeEvent(data); + const {args, event} = contract.abi.decodeEvent(data); - const _event: Record = {}; + const _event: Record < string, any > = {}; for (let i = 0; i < args.length; i++) { _event[event.args[i]!.name] = args[i]!.toJSON(); diff --git a/types/tx-sign-and-send/address_book.ts b/types/tx-sign-and-send/address_book.ts index 00fc0f7..705ce90 100644 --- a/types/tx-sign-and-send/address_book.ts +++ b/types/tx-sign-and-send/address_book.ts @@ -1,27 +1,27 @@ /* This file is auto-generated */ -import type { GasLimit } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; import type { KeyringPair } from '@polkadot/keyring/types'; -import { EventRecord } from '@polkadot/types/interfaces'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/address_book'; import type BN from 'bn.js'; - +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; -import { decodeEvents } from "../shared/utils"; -import type * as ArgumentTypes from '../types-arguments/address_book'; export default class Methods { - private __nativeContract: ContractPromise; - private __keyringPair: KeyringPair; + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; private __apiPromise: ApiPromise; constructor( apiPromise: ApiPromise, - nativeContract: ContractPromise, - keyringPair: KeyringPair, + nativeContract : ContractPromise, + keyringPair : KeyringPair, ) { this.__apiPromise = apiPromise; this.__nativeContract = nativeContract; @@ -32,10 +32,10 @@ export default class Methods { * identityContract * */ - "identityContract"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityContract", (events: EventRecord[]) => { + "identityContract" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityContract", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -44,10 +44,10 @@ export default class Methods { * createAddressBook * */ - "createAddressBook"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord[]) => { + "createAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -56,10 +56,10 @@ export default class Methods { * removeAddressBook * */ - "removeAddressBook"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord[]) => { + "removeAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -70,12 +70,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { string | null } nickname, */ - "addIdentity"( + "addIdentity" ( identityNo: (number | string | BN), nickname: string | null, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, nickname], __options); } @@ -85,11 +85,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "removeIdentity"( + "removeIdentity" ( identityNo: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo], __options); } @@ -100,12 +100,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { string | null } newNickname, */ - "updateNickname"( + "updateNickname" ( identityNo: (number | string | BN), newNickname: string | null, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, newNickname], __options); } @@ -115,11 +115,11 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } account, */ - "identitiesOf"( + "identitiesOf" ( account: ArgumentTypes.AccountId, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "identitiesOf", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identitiesOf", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [account], __options); } @@ -128,10 +128,10 @@ export default class Methods { * hasAddressBook * */ - "hasAddressBook"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "hasAddressBook", (events: EventRecord[]) => { + "hasAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "hasAddressBook", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } diff --git a/types/tx-sign-and-send/identity.ts b/types/tx-sign-and-send/identity.ts index 3e9908b..8698e12 100644 --- a/types/tx-sign-and-send/identity.ts +++ b/types/tx-sign-and-send/identity.ts @@ -1,27 +1,27 @@ /* This file is auto-generated */ -import type { GasLimit } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type { ApiPromise } from '@polkadot/api'; import type { ContractPromise } from '@polkadot/api-contract'; import type { KeyringPair } from '@polkadot/keyring/types'; -import { EventRecord } from '@polkadot/types/interfaces'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/identity'; import type BN from 'bn.js'; - +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; -import { decodeEvents } from "../shared/utils"; -import type * as ArgumentTypes from '../types-arguments/identity'; export default class Methods { - private __nativeContract: ContractPromise; - private __keyringPair: KeyringPair; + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; private __apiPromise: ApiPromise; constructor( apiPromise: ApiPromise, - nativeContract: ContractPromise, - keyringPair: KeyringPair, + nativeContract : ContractPromise, + keyringPair : KeyringPair, ) { this.__apiPromise = apiPromise; this.__nativeContract = nativeContract; @@ -33,11 +33,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "identity"( + "identity" ( identityNo: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "identity", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo], __options); } @@ -47,11 +47,11 @@ export default class Methods { * * @param { (number | string | BN) } identityNo, */ - "ownerOf"( + "ownerOf" ( identityNo: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "ownerOf", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "ownerOf", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo], __options); } @@ -61,11 +61,11 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } owner, */ - "identityOf"( + "identityOf" ( owner: ArgumentTypes.AccountId, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityOf", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityOf", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [owner], __options); } @@ -75,11 +75,11 @@ export default class Methods { * * @param { (number | string | BN) } networkId, */ - "networkInfoOf"( + "networkInfoOf" ( networkId: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "networkInfoOf", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "networkInfoOf", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [networkId], __options); } @@ -90,12 +90,12 @@ export default class Methods { * @param { (number | string | BN) } receiver, * @param { (number | string | BN) } network, */ - "transactionDestination"( + "transactionDestination" ( receiver: (number | string | BN), network: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "transactionDestination", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transactionDestination", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [receiver, network], __options); } @@ -104,10 +104,10 @@ export default class Methods { * availableNetworks * */ - "availableNetworks"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "availableNetworks", (events: EventRecord[]) => { + "availableNetworks" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "availableNetworks", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -116,10 +116,10 @@ export default class Methods { * createIdentity * */ - "createIdentity"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord[]) => { + "createIdentity" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -130,12 +130,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @param { Array<(number | string | BN)> } address, */ - "addAddress"( + "addAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network, address], __options); } @@ -146,12 +146,12 @@ export default class Methods { * @param { (number | string | BN) } network, * @param { Array<(number | string | BN)> } address, */ - "updateAddress"( + "updateAddress" ( network: (number | string | BN), address: Array<(number | string | BN)>, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network, address], __options); } @@ -161,11 +161,11 @@ export default class Methods { * * @param { (number | string | BN) } network, */ - "removeAddress"( + "removeAddress" ( network: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [network], __options); } @@ -174,10 +174,10 @@ export default class Methods { * removeIdentity * */ - "removeIdentity"( - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord[]) => { + "removeIdentity" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [], __options); } @@ -187,11 +187,11 @@ export default class Methods { * * @param { ArgumentTypes.NetworkInfo } info, */ - "addNetwork"( + "addNetwork" ( info: ArgumentTypes.NetworkInfo, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [info], __options); } @@ -203,13 +203,13 @@ export default class Methods { * @param { string | null } newRpcUrl, * @param { ArgumentTypes.AccountType | null } newAddressType, */ - "updateNetwork"( + "updateNetwork" ( networkId: (number | string | BN), newRpcUrl: string | null, newAddressType: ArgumentTypes.AccountType | null, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [networkId, newRpcUrl, newAddressType], __options); } @@ -219,11 +219,11 @@ export default class Methods { * * @param { (number | string | BN) } networkId, */ - "removeNetwork"( + "removeNetwork" ( networkId: (number | string | BN), - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [networkId], __options); } @@ -233,11 +233,11 @@ export default class Methods { * * @param { ArgumentTypes.AccountId } recoveryAccount, */ - "setRecoveryAccount"( + "setRecoveryAccount" ( recoveryAccount: ArgumentTypes.AccountId, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [recoveryAccount], __options); } @@ -248,12 +248,12 @@ export default class Methods { * @param { (number | string | BN) } identityNo, * @param { ArgumentTypes.AccountId } newOwner, */ - "transferOwnership"( + "transferOwnership" ( identityNo: (number | string | BN), newOwner: ArgumentTypes.AccountId, - __options?: GasLimit, - ) { - return txSignAndSend(this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord[]) => { + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); }, [identityNo, newOwner], __options); } diff --git a/types/types-arguments/address_book.ts b/types/types-arguments/address_book.ts index a95f4ad..d85fb9e 100644 --- a/types/types-arguments/address_book.ts +++ b/types/types-arguments/address_book.ts @@ -1,4 +1,4 @@ -/* eslint-disable no-unused-vars */ +import type BN from 'bn.js'; export type AccountId = string | number[] diff --git a/types/types-arguments/identity.ts b/types/types-arguments/identity.ts index 88e4657..4155926 100644 --- a/types/types-arguments/identity.ts +++ b/types/types-arguments/identity.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import type BN from 'bn.js'; export type AccountId = string | number[] diff --git a/types/types-returns/address_book.ts b/types/types-returns/address_book.ts index a95f4ad..a0f027f 100644 --- a/types/types-returns/address_book.ts +++ b/types/types-returns/address_book.ts @@ -1,4 +1,5 @@ -/* eslint-disable no-unused-vars */ +import type BN from 'bn.js'; +import type {ReturnNumber} from '@727-ventures/typechain-types'; export type AccountId = string | number[] diff --git a/types/types-returns/identity.ts b/types/types-returns/identity.ts index f22e3d8..8d9ca47 100644 --- a/types/types-returns/identity.ts +++ b/types/types-returns/identity.ts @@ -1,4 +1,5 @@ -/* eslint-disable no-unused-vars */ +import type BN from 'bn.js'; +import type {ReturnNumber} from '@727-ventures/typechain-types'; export type AccountId = string | number[] From ded65f449039be8649dfdca010005643cc0fcefa Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:28:38 -0700 Subject: [PATCH 08/45] all tests passing :)) --- src/utils/transactionRouter/index.ts | 2 +- src/utils/transactionRouter/transferAsset.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index b2b8992..162f32b 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -25,7 +25,7 @@ class TransactionRouter { await TransferAsset.send( api, - sender, + sender.keypair, receiver, asset ); diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index 2231114..f542d96 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -1,12 +1,13 @@ import { ApiPromise } from "@polkadot/api"; -import { Fungible, Receiver, Sender } from "./types"; +import { Fungible, Receiver } from "./types"; import { AccountType } from "../../../types/types-arguments/identity"; +import { KeyringPair } from "@polkadot/keyring/types"; class TransferAsset { public static async send( api: ApiPromise, - sender: Sender, + sender: KeyringPair, receiver: Receiver, asset: Fungible ): Promise { @@ -34,7 +35,7 @@ class TransferAsset { if (api.tx.xcmPallet) { const paymentInfo = (await api.tx.xcmPallet .execute(xcm, 0) - .paymentInfo(sender.keypair)).toHuman(); + .paymentInfo(sender)).toHuman(); if (!paymentInfo || !paymentInfo.weight) { throw new Error("Couldn't estimate transaction fee"); @@ -49,7 +50,7 @@ class TransferAsset { } else if (api.tx.polkadotXcm) { const paymentInfo = (await api.tx.polkadotXcm .execute(xcm, 0) - .paymentInfo(sender.keypair)).toHuman(); + .paymentInfo(sender)).toHuman(); if (!paymentInfo || !paymentInfo.weight) { throw new Error("Couldn't estimate transaction fee"); From 520c9c0e85bc33d63302dea238331822f36951b5 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:29:20 -0700 Subject: [PATCH 09/45] lint fix --- src/utils/transactionRouter/transferAsset.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index f542d96..b9ea65b 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -1,8 +1,8 @@ import { ApiPromise } from "@polkadot/api"; +import { KeyringPair } from "@polkadot/keyring/types"; import { Fungible, Receiver } from "./types"; import { AccountType } from "../../../types/types-arguments/identity"; -import { KeyringPair } from "@polkadot/keyring/types"; class TransferAsset { public static async send( From 84c52951fd7c4aa36671188ded2952701688daa7 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:31:56 -0700 Subject: [PATCH 10/45] remove types & artifacts --- artifacts/address_book.contract | 1 - artifacts/address_book.json | 983 ----------- artifacts/identity.contract | 1 - artifacts/identity.json | 2075 ------------------------ types/build-extrinsic/address_book.ts | 115 -- types/build-extrinsic/identity.ts | 221 --- types/constructors/address_book.ts | 53 - types/constructors/identity.ts | 81 - types/contract-info/address_book.ts | 2 - types/contract-info/identity.ts | 2 - types/contracts/address_book.ts | 107 -- types/contracts/identity.ts | 107 -- types/data/address_book.json | 351 ---- types/data/identity.json | 1040 ------------ types/event-data/address_book.json | 3 - types/event-data/identity.json | 3 - types/event-types/address_book.ts | 27 - types/event-types/identity.ts | 50 - types/events/address_book.ts | 114 -- types/events/identity.ts | 170 -- types/mixed-methods/address_book.ts | 150 -- types/mixed-methods/identity.ts | 274 ---- types/query/address_book.ts | 132 -- types/query/identity.ts | 246 --- types/shared/utils.ts | 38 - types/tx-sign-and-send/address_book.ts | 139 -- types/tx-sign-and-send/identity.ts | 261 --- types/types-arguments/address_book.ts | 17 - types/types-arguments/identity.ts | 33 - types/types-returns/address_book.ts | 18 - types/types-returns/identity.ts | 34 - 31 files changed, 6848 deletions(-) delete mode 100644 artifacts/address_book.contract delete mode 100644 artifacts/address_book.json delete mode 100644 artifacts/identity.contract delete mode 100644 artifacts/identity.json delete mode 100644 types/build-extrinsic/address_book.ts delete mode 100644 types/build-extrinsic/identity.ts delete mode 100644 types/constructors/address_book.ts delete mode 100644 types/constructors/identity.ts delete mode 100644 types/contract-info/address_book.ts delete mode 100644 types/contract-info/identity.ts delete mode 100644 types/contracts/address_book.ts delete mode 100644 types/contracts/identity.ts delete mode 100644 types/data/address_book.json delete mode 100644 types/data/identity.json delete mode 100644 types/event-data/address_book.json delete mode 100644 types/event-data/identity.json delete mode 100644 types/event-types/address_book.ts delete mode 100644 types/event-types/identity.ts delete mode 100644 types/events/address_book.ts delete mode 100644 types/events/identity.ts delete mode 100644 types/mixed-methods/address_book.ts delete mode 100644 types/mixed-methods/identity.ts delete mode 100644 types/query/address_book.ts delete mode 100644 types/query/identity.ts delete mode 100644 types/shared/utils.ts delete mode 100644 types/tx-sign-and-send/address_book.ts delete mode 100644 types/tx-sign-and-send/identity.ts delete mode 100644 types/types-arguments/address_book.ts delete mode 100644 types/types-arguments/identity.ts delete mode 100644 types/types-returns/address_book.ts delete mode 100644 types/types-returns/identity.ts diff --git a/artifacts/address_book.contract b/artifacts/address_book.contract deleted file mode 100644 index cdef3b7..0000000 --- a/artifacts/address_book.contract +++ /dev/null @@ -1 +0,0 @@ -{"source":{"hash":"0xc4b25de87d73f70b7b8c799703d86c163d58e7a9f474ac63de4f53e4542b88f9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c0201006900000078000000110000005c020100690000007b000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of `Identity` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/artifacts/address_book.json b/artifacts/address_book.json deleted file mode 100644 index d7826a1..0000000 --- a/artifacts/address_book.json +++ /dev/null @@ -1,983 +0,0 @@ -{ - "source": { - "hash": "0xf7970b103d9644b533629c2938375218f75ee515fc2628648cf2b326f72a5232", - "language": "ink! 4.2.0", - "compiler": "rustc 1.68.0-nightly", - "build_info": { - "build_mode": "Debug", - "cargo_contract_version": "2.0.0-rc.1", - "rust_toolchain": "nightly-aarch64-apple-darwin", - "wasm_opt_settings": { - "keep_debug_symbols": false, - "optimization_passes": "Z" - } - } - }, - "contract": { - "name": "address_book", - "version": "0.1.0", - "authors": [ - "Master Union " - ] - }, - "spec": { - "constructors": [ - { - "args": [ - { - "label": "identity_contract", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "default": false, - "docs": [ - "Constructor", - "Instantiate with the address of `Identity` contract." - ], - "label": "new", - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "ConstructorResult" - ], - "type": 8 - }, - "selector": "0x9bae9d5e" - } - ], - "docs": [], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 5 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 18 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 2 - }, - "chainExtension": { - "displayName": [ - "ChainExtension" - ], - "type": 21 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 19 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 20 - } - }, - "events": [ - { - "args": [ - { - "docs": [ - " The owner of the newly created address book." - ], - "indexed": true, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "docs": [], - "label": "AddressBookCreated" - }, - { - "args": [ - { - "docs": [ - " The owner of the removed address book." - ], - "indexed": true, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "docs": [], - "label": "AddressBookRemoved" - }, - { - "args": [ - { - "docs": [ - " The owner of the address book." - ], - "indexed": true, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - }, - { - "docs": [ - " The identity added to the address book." - ], - "indexed": false, - "label": "identity", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "docs": [], - "label": "IdentityAdded" - }, - { - "args": [ - { - "docs": [ - " The owner of the address book." - ], - "indexed": true, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - }, - { - "docs": [ - " The identity that received a new nickname." - ], - "indexed": false, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "docs": [ - " The new nickname." - ], - "indexed": false, - "label": "new_nickname", - "type": { - "displayName": [ - "Option" - ], - "type": 3 - } - } - ], - "docs": [], - "label": "NickNameUpdated" - }, - { - "args": [ - { - "docs": [], - "indexed": false, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - }, - { - "docs": [], - "indexed": false, - "label": "identity", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "docs": [], - "label": "IdentityRemoved" - } - ], - "lang_error": { - "displayName": [ - "ink", - "LangError" - ], - "type": 10 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - " Returns the address of the identity contract." - ], - "label": "identity_contract", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 11 - }, - "selector": "0x69081926" - }, - { - "args": [], - "default": false, - "docs": [ - " Creates an address book for the caller." - ], - "label": "create_address_book", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 12 - }, - "selector": "0x07411baf" - }, - { - "args": [], - "default": false, - "docs": [ - " Removes the address book of the caller." - ], - "label": "remove_address_book", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 12 - }, - "selector": "0x1fe0816f" - }, - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "label": "nickname", - "type": { - "displayName": [ - "Option" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - " Adds an identity to the user's address book." - ], - "label": "add_identity", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 12 - }, - "selector": "0x83b06419" - }, - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Removes an identity from the user's address book." - ], - "label": "remove_identity", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 12 - }, - "selector": "0x08026740" - }, - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "label": "new_nickname", - "type": { - "displayName": [ - "Option" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - " Update nickname of an identity." - ], - "label": "update_nickname", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 12 - }, - "selector": "0x484daeb1" - }, - { - "args": [ - { - "label": "account", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "default": false, - "docs": [ - " Returns the identities stored in the address book of a user." - ], - "label": "identities_of", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 15 - }, - "selector": "0x29daba02" - }, - { - "args": [], - "default": false, - "docs": [ - " Returns whether the user has created an address book or not" - ], - "label": "has_address_book", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 16 - }, - "selector": "0xc468ded4" - } - ] - }, - "storage": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x02a833ee", - "ty": 0 - } - }, - "name": "identities" - } - ], - "name": "AddressBookInfo" - } - }, - "root_key": "0x02a833ee" - } - }, - "name": "address_book_of" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 5 - } - }, - "name": "identity_contract" - } - ], - "name": "AddressBook" - } - }, - "root_key": "0x00000000" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "sequence": { - "type": 1 - } - } - } - }, - { - "id": 1, - "type": { - "def": { - "tuple": [ - 2, - 3 - ] - } - } - }, - { - "id": 2, - "type": { - "def": { - "primitive": "u32" - } - } - }, - { - "id": 3, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 4 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 4 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "primitive": "str" - } - } - }, - { - "id": 5, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "array": { - "len": 32, - "type": 7 - } - } - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "u8" - } - } - }, - { - "id": 8, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 9 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 9 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "tuple": [] - } - } - }, - { - "id": 10, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 1, - "name": "CouldNotReadInput" - } - ] - } - }, - "path": [ - "ink_primitives", - "LangError" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 5 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 5 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 12, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 13 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 13 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 13, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 9 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 14 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 9 - }, - { - "name": "E", - "type": 14 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 14, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "AddressBookAlreadyCreated" - }, - { - "index": 1, - "name": "AddressBookDoesntExist" - }, - { - "index": 2, - "name": "IdentityDoesntExist" - }, - { - "index": 3, - "name": "IdentityNotAdded" - }, - { - "index": 4, - "name": "IdentityAlreadyAdded" - }, - { - "index": 5, - "name": "NickNameTooLong" - } - ] - } - }, - "path": [ - "address_book", - "Error" - ] - } - }, - { - "id": 15, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 0 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 0 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 16, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 17 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 17 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 17, - "type": { - "def": { - "primitive": "bool" - } - } - }, - { - "id": 18, - "type": { - "def": { - "primitive": "u128" - } - } - }, - { - "id": 19, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 20, - "type": { - "def": { - "primitive": "u64" - } - } - }, - { - "id": 21, - "type": { - "def": { - "variant": {} - }, - "path": [ - "ink_env", - "types", - "NoChainExtension" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/artifacts/identity.contract b/artifacts/identity.contract deleted file mode 100644 index 4a02b56..0000000 --- a/artifacts/identity.contract +++ /dev/null @@ -1 +0,0 @@ -{"source":{"hash":"0x1273ee72516d892381f0287cf57ce8f7b7a161916755c78083999284ab8280ac","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000300000003030503060500050000000305060b0000000204000805000005030903050200000303000900000503000003030308000003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241e08104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d0120042003103b2203450d020b200041003602082000200336020420002001360200200241106a24000f0b103e000b2004103f000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000b0c0041dc81042000200110250ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102720022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241e081043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141e081043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b910101017f230041d0006b22022400200241086a41dc81042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103f000b0f0b103e000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103c20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103d200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103f000b103e000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103820004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a1039200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110270c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103a20032802142202450d01200328021022014100480d0120012002103b2206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b2202103a200328020c210b2003280208210420032001103a2003200636026020032003290300370264200341d0006a2004200b200341e0006a103c2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103d2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103e000b2001103f000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011027200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110282001200041d8026a10242000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41dc81042002105c41e481042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011058000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41ec81042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a20061038027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a1039410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061028200620004198026a10242002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011058000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41ec8104200028024c2203200041b8026a1025200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011058000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41e881042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011058000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10264108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011058000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10262000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1057000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011058000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1026200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1057000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103d200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103d200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103c20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f000000590600002400000000e945cab16cd67c3b605e7d7733867e6dbd73334661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The `IdentityNo` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The `IdentityNo` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The `NetworkId` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The `NetworkId` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The `NetworkId` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The `IdentityNo` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the `IdentityInfo` of an identity that is associated with"," the provided `IdentityNo`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified `NetworkId`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a `NetworkId`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the `IdentityNo`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/artifacts/identity.json b/artifacts/identity.json deleted file mode 100644 index 3688fa4..0000000 --- a/artifacts/identity.json +++ /dev/null @@ -1,2075 +0,0 @@ -{ - "source": { - "hash": "0xee17bba51b46f56affec703536dcecd32824105ca8fb9bb2a86d11e7c93c99bc", - "language": "ink! 4.2.0", - "compiler": "rustc 1.68.0-nightly", - "build_info": { - "build_mode": "Release", - "cargo_contract_version": "2.0.0-rc.1", - "rust_toolchain": "nightly-aarch64-apple-darwin", - "wasm_opt_settings": { - "keep_debug_symbols": false, - "optimization_passes": "Z" - } - } - }, - "contract": { - "name": "identity", - "version": "0.1.0", - "authors": [ - "Master Union " - ] - }, - "spec": { - "constructors": [ - { - "args": [], - "default": false, - "docs": [], - "label": "new", - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "ConstructorResult" - ], - "type": 8 - }, - "selector": "0x9bae9d5e" - }, - { - "args": [ - { - "label": "networks", - "type": { - "displayName": [ - "Vec" - ], - "type": 11 - } - } - ], - "default": false, - "docs": [], - "label": "init_with_networks", - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "ConstructorResult" - ], - "type": 8 - }, - "selector": "0x056543ac" - } - ], - "docs": [], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 5 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 35 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 2 - }, - "chainExtension": { - "displayName": [ - "ChainExtension" - ], - "type": 38 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 36 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 37 - } - }, - "events": [ - { - "args": [ - { - "docs": [ - " Owner of the created identity." - ], - "indexed": true, - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - }, - { - "docs": [ - " The `IdentityNo` associated with the created identity." - ], - "indexed": false, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "docs": [ - "Events" - ], - "label": "IdentityCreated" - }, - { - "args": [ - { - "docs": [ - " The `IdentityNo` of the identity that got updated." - ], - "indexed": true, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "docs": [ - " The network on which a new address has been added." - ], - "indexed": false, - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "docs": [ - " The newly added address." - ], - "indexed": false, - "label": "address", - "type": { - "displayName": [ - "NetworkAddress" - ], - "type": 3 - } - } - ], - "docs": [], - "label": "AddressAdded" - }, - { - "args": [ - { - "docs": [ - " The `IdentityNo` of the identity that got updated." - ], - "indexed": true, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "docs": [ - " The network on which the address has been updated." - ], - "indexed": false, - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "docs": [ - " The updated address value." - ], - "indexed": false, - "label": "updated_address", - "type": { - "displayName": [ - "NetworkAddress" - ], - "type": 3 - } - } - ], - "docs": [], - "label": "AddressUpdated" - }, - { - "args": [ - { - "docs": [ - " The `IdentityNo` of the identity that got updated." - ], - "indexed": true, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "docs": [ - " The network on which the address has been removed." - ], - "indexed": false, - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "docs": [], - "label": "AddressRemoved" - }, - { - "args": [ - { - "docs": [ - " The `IdentityNo` of the identity that got removed." - ], - "indexed": true, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "docs": [], - "label": "IdentityRemoved" - }, - { - "args": [ - { - "docs": [ - " The `NetworkId` that is associated with the newly added network." - ], - "indexed": true, - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "docs": [ - " The rpc url of the network that got added." - ], - "indexed": false, - "label": "rpc_url", - "type": { - "displayName": [ - "String" - ], - "type": 7 - } - }, - { - "docs": [ - " The address type used on the network." - ], - "indexed": false, - "label": "account_type", - "type": { - "displayName": [ - "AccountType" - ], - "type": 13 - } - } - ], - "docs": [], - "label": "NetworkAdded" - }, - { - "args": [ - { - "docs": [ - " The `NetworkId` that is associated with the updated network." - ], - "indexed": true, - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "docs": [ - " The rpc url of the updated network." - ], - "indexed": false, - "label": "rpc_url", - "type": { - "displayName": [ - "String" - ], - "type": 7 - } - }, - { - "docs": [ - " The address type used on the updated network." - ], - "indexed": false, - "label": "account_type", - "type": { - "displayName": [ - "AccountType" - ], - "type": 13 - } - } - ], - "docs": [], - "label": "NetworkUpdated" - }, - { - "args": [ - { - "docs": [ - " The `NetworkId` that is associated with the network that got", - " removed." - ], - "indexed": true, - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "docs": [], - "label": "NetworkRemoved" - }, - { - "args": [ - { - "docs": [ - " The `IdentityNo` of the identity that set a recovery account." - ], - "indexed": true, - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "docs": [ - " The newly set recovery account." - ], - "indexed": false, - "label": "recovery_account", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "docs": [], - "label": "RecoveryAccountSet" - } - ], - "lang_error": { - "displayName": [ - "ink", - "LangError" - ], - "type": 10 - }, - "messages": [ - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Returns the `IdentityInfo` of an identity that is associated with", - " the provided `IdentityNo`." - ], - "label": "identity", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 14 - }, - "selector": "0xcbfefbec" - }, - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Returns the owner of an identity." - ], - "label": "owner_of", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 17 - }, - "selector": "0x99720c1e" - }, - { - "args": [ - { - "label": "owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "default": false, - "docs": [ - " Returns the owner of an identity." - ], - "label": "identity_of", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 19 - }, - "selector": "0x713ca232" - }, - { - "args": [ - { - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Returns the network name that is associated with the specified `NetworkId`." - ], - "label": "network_info_of", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 21 - }, - "selector": "0x3dffc61c" - }, - { - "args": [ - { - "label": "receiver", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Returns the destination address of a transaction that needs to be", - " routed to the specified identity on the specified network." - ], - "label": "transaction_destination", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 23 - }, - "selector": "0x525505e4" - }, - { - "args": [], - "default": false, - "docs": [ - " A list of all the available networks each associated with a `NetworkId`." - ], - "label": "available_networks", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 26 - }, - "selector": "0xbd5ddfcd" - }, - { - "args": [], - "default": false, - "docs": [ - " Creates an identity and returns the `IdentityNo`.", - "", - " A user can only create one identity." - ], - "label": "create_identity", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 29 - }, - "selector": "0xfb893664" - }, - { - "args": [ - { - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "label": "address", - "type": { - "displayName": [ - "NetworkAddress" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - " Adds an address for a given network" - ], - "label": "add_address", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0x71cc798d" - }, - { - "args": [ - { - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "label": "address", - "type": { - "displayName": [ - "NetworkAddress" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - " Updates the address of the given network" - ], - "label": "update_address", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0x892f75e4" - }, - { - "args": [ - { - "label": "network", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - " Removes the address by network" - ], - "label": "remove_address", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0xdca7a60f" - }, - { - "args": [], - "default": false, - "docs": [ - " Removes an identity" - ], - "label": "remove_identity", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0x08026740" - }, - { - "args": [ - { - "label": "info", - "type": { - "displayName": [ - "NetworkInfo" - ], - "type": 12 - } - } - ], - "default": false, - "docs": [], - "label": "add_network", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 29 - }, - "selector": "0x97a3ee09" - }, - { - "args": [ - { - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - }, - { - "label": "new_rpc_url", - "type": { - "displayName": [ - "Option" - ], - "type": 33 - } - }, - { - "label": "new_address_type", - "type": { - "displayName": [ - "Option" - ], - "type": 34 - } - } - ], - "default": false, - "docs": [], - "label": "update_network", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0xcfbe8bcc" - }, - { - "args": [ - { - "label": "network_id", - "type": { - "displayName": [ - "NetworkId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [], - "label": "remove_network", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0x14b17dbe" - }, - { - "args": [ - { - "label": "recovery_account", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "default": false, - "docs": [ - " Sets the recovery account that will be able to change the ownership", - " of the identity.", - "", - " Only callable by the identity owner." - ], - "label": "set_recovery_account", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0xd3b93403" - }, - { - "args": [ - { - "label": "identity_no", - "type": { - "displayName": [ - "IdentityNo" - ], - "type": 2 - } - }, - { - "label": "new_owner", - "type": { - "displayName": [ - "AccountId" - ], - "type": 5 - } - } - ], - "default": false, - "docs": [ - " Transfers the ownership of an identity to another account.", - "", - " Only callable by the identity owner or any account that the identity", - " owner added as a proxy." - ], - "label": "transfer_ownership", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 31 - }, - "selector": "0x107e33ea" - } - ] - }, - "storage": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x7d5e603b", - "ty": 0 - } - }, - "name": "addresses" - } - ], - "name": "IdentityInfo" - } - }, - "root_key": "0x7d5e603b" - } - }, - "name": "number_to_identity" - }, - { - "layout": { - "root": { - "layout": { - "leaf": { - "key": "0xca45e900", - "ty": 5 - } - }, - "root_key": "0xca45e900" - } - }, - "name": "owner_of" - }, - { - "layout": { - "root": { - "layout": { - "leaf": { - "key": "0x7cd66cb1", - "ty": 2 - } - }, - "root_key": "0x7cd66cb1" - } - }, - "name": "identity_of" - }, - { - "layout": { - "root": { - "layout": { - "leaf": { - "key": "0x3373bd6d", - "ty": 5 - } - }, - "root_key": "0x3373bd6d" - } - }, - "name": "recovery_account_of" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 2 - } - }, - "name": "latest_identity_no" - }, - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x7e863377", - "ty": 7 - } - }, - "name": "rpc_url" - }, - { - "layout": { - "enum": { - "dispatchKey": "0x7e863377", - "name": "AccountType", - "variants": { - "0": { - "fields": [], - "name": "AccountId32" - }, - "1": { - "fields": [], - "name": "AccountKey20" - } - } - } - }, - "name": "account_type" - } - ], - "name": "NetworkInfo" - } - }, - "root_key": "0x7e863377" - } - }, - "name": "network_info_of" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 5 - } - }, - "name": "admin" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 2 - } - }, - "name": "network_id_count" - } - ], - "name": "Identity" - } - }, - "root_key": "0x00000000" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "sequence": { - "type": 1 - } - } - } - }, - { - "id": 1, - "type": { - "def": { - "tuple": [ - 2, - 3 - ] - } - } - }, - { - "id": 2, - "type": { - "def": { - "primitive": "u32" - } - } - }, - { - "id": 3, - "type": { - "def": { - "sequence": { - "type": 4 - } - } - } - }, - { - "id": 4, - "type": { - "def": { - "primitive": "u8" - } - } - }, - { - "id": 5, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "array": { - "len": 32, - "type": 4 - } - } - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "str" - } - } - }, - { - "id": 8, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 9 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 9 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "tuple": [] - } - } - }, - { - "id": 10, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 1, - "name": "CouldNotReadInput" - } - ] - } - }, - "path": [ - "ink_primitives", - "LangError" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "sequence": { - "type": 12 - } - } - } - }, - { - "id": 12, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "rpc_url", - "type": 7, - "typeName": "String" - }, - { - "name": "account_type", - "type": 13, - "typeName": "AccountType" - } - ] - } - }, - "path": [ - "common", - "types", - "NetworkInfo" - ] - } - }, - { - "id": 13, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "AccountId32" - }, - { - "index": 1, - "name": "AccountKey20" - } - ] - } - }, - "path": [ - "common", - "types", - "AccountType" - ] - } - }, - { - "id": 14, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 15 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 15 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 15, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 16 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 16 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 16, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "addresses", - "type": 0, - "typeName": "Vec<(NetworkId, NetworkAddress)>" - } - ] - } - }, - "path": [ - "identity", - "types", - "IdentityInfo" - ] - } - }, - { - "id": 17, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 18 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 18 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 18, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 5 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 5 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 19, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 20 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 20 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 20, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 2 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 2 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 21, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 22 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 22 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 22, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 12 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 12 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 23, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 24 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 24 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 24, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 3 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 25 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 3 - }, - { - "name": "E", - "type": 25 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 25, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "NotAllowed" - }, - { - "index": 1, - "name": "IdentityDoesntExist" - }, - { - "index": 2, - "name": "AddressAlreadyAdded" - }, - { - "index": 3, - "name": "InvalidNetwork" - }, - { - "index": 4, - "name": "AddressSizeExceeded" - }, - { - "index": 5, - "name": "NetworkNameTooLong" - }, - { - "index": 6, - "name": "NetworkRpcUrlTooLong" - }, - { - "index": 7, - "name": "AlreadyIdentityOwner" - } - ] - } - }, - "path": [ - "identity", - "Error" - ] - } - }, - { - "id": 26, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 27 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 27 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 27, - "type": { - "def": { - "sequence": { - "type": 28 - } - } - } - }, - { - "id": 28, - "type": { - "def": { - "tuple": [ - 2, - 12 - ] - } - } - }, - { - "id": 29, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 30 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 30 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 30, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 2 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 25 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "E", - "type": 25 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 31, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 32 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 10 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 32 - }, - { - "name": "E", - "type": 10 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 32, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 9 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 25 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 9 - }, - { - "name": "E", - "type": 25 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 33, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 7 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 7 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 34, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 13 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 13 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 35, - "type": { - "def": { - "primitive": "u128" - } - } - }, - { - "id": 36, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 6, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 37, - "type": { - "def": { - "primitive": "u64" - } - } - }, - { - "id": 38, - "type": { - "def": { - "variant": {} - }, - "path": [ - "ink_env", - "types", - "NoChainExtension" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/types/build-extrinsic/address_book.ts b/types/build-extrinsic/address_book.ts deleted file mode 100644 index 6926713..0000000 --- a/types/build-extrinsic/address_book.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; -import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import type BN from 'bn.js'; -import type { ApiPromise } from '@polkadot/api'; - - - -export default class Methods { - private __nativeContract : ContractPromise; - private __apiPromise: ApiPromise; - - constructor( - nativeContract : ContractPromise, - apiPromise: ApiPromise, - ) { - this.__nativeContract = nativeContract; - this.__apiPromise = apiPromise; - } - /** - * identityContract - * - */ - "identityContract" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityContract", [], __options); - } - - /** - * createAddressBook - * - */ - "createAddressBook" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createAddressBook", [], __options); - } - - /** - * removeAddressBook - * - */ - "removeAddressBook" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddressBook", [], __options); - } - - /** - * addIdentity - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } nickname, - */ - "addIdentity" ( - identityNo: (number | string | BN), - nickname: string | null, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addIdentity", [identityNo, nickname], __options); - } - - /** - * removeIdentity - * - * @param { (number | string | BN) } identityNo, - */ - "removeIdentity" ( - identityNo: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [identityNo], __options); - } - - /** - * updateNickname - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } newNickname, - */ - "updateNickname" ( - identityNo: (number | string | BN), - newNickname: string | null, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNickname", [identityNo, newNickname], __options); - } - - /** - * identitiesOf - * - * @param { ArgumentTypes.AccountId } account, - */ - "identitiesOf" ( - account: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identitiesOf", [account], __options); - } - - /** - * hasAddressBook - * - */ - "hasAddressBook" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "hasAddressBook", [], __options); - } - -} \ No newline at end of file diff --git a/types/build-extrinsic/identity.ts b/types/build-extrinsic/identity.ts deleted file mode 100644 index b4df9e4..0000000 --- a/types/build-extrinsic/identity.ts +++ /dev/null @@ -1,221 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; -import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/identity'; -import type BN from 'bn.js'; -import type { ApiPromise } from '@polkadot/api'; - - - -export default class Methods { - private __nativeContract : ContractPromise; - private __apiPromise: ApiPromise; - - constructor( - nativeContract : ContractPromise, - apiPromise: ApiPromise, - ) { - this.__nativeContract = nativeContract; - this.__apiPromise = apiPromise; - } - /** - * identity - * - * @param { (number | string | BN) } identityNo, - */ - "identity" ( - identityNo: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identity", [identityNo], __options); - } - - /** - * ownerOf - * - * @param { (number | string | BN) } identityNo, - */ - "ownerOf" ( - identityNo: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "ownerOf", [identityNo], __options); - } - - /** - * identityOf - * - * @param { ArgumentTypes.AccountId } owner, - */ - "identityOf" ( - owner: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityOf", [owner], __options); - } - - /** - * networkInfoOf - * - * @param { (number | string | BN) } networkId, - */ - "networkInfoOf" ( - networkId: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "networkInfoOf", [networkId], __options); - } - - /** - * transactionDestination - * - * @param { (number | string | BN) } receiver, - * @param { (number | string | BN) } network, - */ - "transactionDestination" ( - receiver: (number | string | BN), - network: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transactionDestination", [receiver, network], __options); - } - - /** - * availableNetworks - * - */ - "availableNetworks" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "availableNetworks", [], __options); - } - - /** - * createIdentity - * - */ - "createIdentity" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createIdentity", [], __options); - } - - /** - * addAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - */ - "addAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addAddress", [network, address], __options); - } - - /** - * updateAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - */ - "updateAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateAddress", [network, address], __options); - } - - /** - * removeAddress - * - * @param { (number | string | BN) } network, - */ - "removeAddress" ( - network: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddress", [network], __options); - } - - /** - * removeIdentity - * - */ - "removeIdentity" ( - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [], __options); - } - - /** - * addNetwork - * - * @param { ArgumentTypes.NetworkInfo } info, - */ - "addNetwork" ( - info: ArgumentTypes.NetworkInfo, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addNetwork", [info], __options); - } - - /** - * updateNetwork - * - * @param { (number | string | BN) } networkId, - * @param { string | null } newRpcUrl, - * @param { ArgumentTypes.AccountType | null } newAddressType, - */ - "updateNetwork" ( - networkId: (number | string | BN), - newRpcUrl: string | null, - newAddressType: ArgumentTypes.AccountType | null, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options); - } - - /** - * removeNetwork - * - * @param { (number | string | BN) } networkId, - */ - "removeNetwork" ( - networkId: (number | string | BN), - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeNetwork", [networkId], __options); - } - - /** - * setRecoveryAccount - * - * @param { ArgumentTypes.AccountId } recoveryAccount, - */ - "setRecoveryAccount" ( - recoveryAccount: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "setRecoveryAccount", [recoveryAccount], __options); - } - - /** - * transferOwnership - * - * @param { (number | string | BN) } identityNo, - * @param { ArgumentTypes.AccountId } newOwner, - */ - "transferOwnership" ( - identityNo: (number | string | BN), - newOwner: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transferOwnership", [identityNo, newOwner], __options); - } - -} \ No newline at end of file diff --git a/types/constructors/address_book.ts b/types/constructors/address_book.ts deleted file mode 100644 index 5b88358..0000000 --- a/types/constructors/address_book.ts +++ /dev/null @@ -1,53 +0,0 @@ -import {CodePromise} from "@polkadot/api-contract"; -import type {KeyringPair} from "@polkadot/keyring/types"; -import type {ApiPromise} from "@polkadot/api"; -import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; -import type {ConstructorOptions} from "@727-ventures/typechain-types"; -import type {WeightV2} from "@polkadot/types/interfaces"; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import { ContractFile } from '../contract-info/address_book'; -import type BN from 'bn.js'; - -export default class Constructors { - readonly nativeAPI: ApiPromise; - readonly signer: KeyringPair; - - constructor( - nativeAPI: ApiPromise, - signer: KeyringPair, - ) { - this.nativeAPI = nativeAPI; - this.signer = signer; - } - - /** - * new - * - * @param { ArgumentTypes.AccountId } identityContract, - */ - async "new" ( - identityContract: ArgumentTypes.AccountId, - __options ? : ConstructorOptions, - ) { - const __contract = JSON.parse(ContractFile); - const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); - const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; - - const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, identityContract); - let response; - - try { - response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); - } - catch (error) { - console.log(error); - } - - return { - result: response as SignAndSendSuccessResponse, - // @ts-ignore - address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), - }; - } -} \ No newline at end of file diff --git a/types/constructors/identity.ts b/types/constructors/identity.ts deleted file mode 100644 index 7887d46..0000000 --- a/types/constructors/identity.ts +++ /dev/null @@ -1,81 +0,0 @@ -import {CodePromise} from "@polkadot/api-contract"; -import type {KeyringPair} from "@polkadot/keyring/types"; -import type {ApiPromise} from "@polkadot/api"; -import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; -import type {ConstructorOptions} from "@727-ventures/typechain-types"; -import type {WeightV2} from "@polkadot/types/interfaces"; -import type * as ArgumentTypes from '../types-arguments/identity'; -import { ContractFile } from '../contract-info/identity'; -import type BN from 'bn.js'; - -export default class Constructors { - readonly nativeAPI: ApiPromise; - readonly signer: KeyringPair; - - constructor( - nativeAPI: ApiPromise, - signer: KeyringPair, - ) { - this.nativeAPI = nativeAPI; - this.signer = signer; - } - - /** - * new - * - */ - async "new" ( - __options ? : ConstructorOptions, - ) { - const __contract = JSON.parse(ContractFile); - const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); - const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; - - const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, ); - let response; - - try { - response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); - } - catch (error) { - console.log(error); - } - - return { - result: response as SignAndSendSuccessResponse, - // @ts-ignore - address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), - }; - } - /** - * initWithNetworks - * - * @param { Array } networks, - */ - async "initWithNetworks" ( - networks: Array, - __options ? : ConstructorOptions, - ) { - const __contract = JSON.parse(ContractFile); - const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); - const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; - - const storageDepositLimit = __options?.storageDepositLimit; - const tx = code.tx["initWithNetworks"]!({ gasLimit, storageDepositLimit, value: __options?.value }, networks); - let response; - - try { - response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); - } - catch (error) { - console.log(error); - } - - return { - result: response as SignAndSendSuccessResponse, - // @ts-ignore - address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), - }; - } -} \ No newline at end of file diff --git a/types/contract-info/address_book.ts b/types/contract-info/address_book.ts deleted file mode 100644 index 94f1d69..0000000 --- a/types/contract-info/address_book.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const ContractAbi = `{"source":{"hash":"0xf7970b103d9644b533629c2938375218f75ee515fc2628648cf2b326f72a5232","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; -export const ContractFile = `{"source":{"hash":"0xc4b25de87d73f70b7b8c799703d86c163d58e7a9f474ac63de4f53e4542b88f9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030101080601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103e200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103a000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103e20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103f2000412636029403200041ec890436029003200020023602980320004180036a220820012003103e20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103a000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103f200041263602940320004198890436029003200020033602980320004180036a220820012006103e20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103a000b41010b2004103a000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b4101210120020d010b410121010b20012003103a000b103b000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103b000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c0201006900000078000000110000005c020100690000007b000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contract-info/identity.ts b/types/contract-info/identity.ts deleted file mode 100644 index 0ce00bb..0000000 --- a/types/contract-info/identity.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const ContractAbi = `{"source":{"hash":"0xee17bba51b46f56affec703536dcecd32824105ca8fb9bb2a86d11e7c93c99bc","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Release","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; -export const ContractFile = `{"source":{"hash":"0x1273ee72516d892381f0287cf57ce8f7b7a161916755c78083999284ab8280ac","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000500000300000003030503060500050000000305060b0000000204000805000005030903050200000303000900000503000003030308000003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b102320022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241e08104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b101f0240200104400340200241d8006a200241306a102020022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1021200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10220b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d0120042003103b2203450d020b200041003602082000200336020420002001360200200241106a24000f0b103e000b2004103f000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000b0c0041dc81042000200110250ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102720022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241e081043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141e081043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b910101017f230041d0006b22022400200241086a41dc81042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103f000b0f0b103e000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103c20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103d200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002101f20002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103f000b103e000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10202000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10202000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a102320002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101e20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103820004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a1039200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110270c010b200141011031200110300b0c170b20004188036a2006101e200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10220b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110212005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910220b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10220c130b410421010b20004198026a10220b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10220c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102241030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103a20032802142202450d01200328021022014100480d0120012002103b2206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b2202103a200328020c210b2003280208210420032001103a2003200636026020032003290300370264200341d0006a2004200b200341e0006a103c2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103d2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103e000b2001103f000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011027200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110282001200041d8026a10242000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10222002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41dc81042002105c41e481042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011058000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41ec81042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a20061038027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a1039410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061028200620004198026a10242002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011058000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41ec8104200028024c2203200041b8026a1025200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011058000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41e881042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011058000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10264108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011058000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10262000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1057000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011058000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101e2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b101f2003450d01200041e5006a21040340200041d8006a200041206a10230240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10220c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a2005101f2000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1026200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10220c030b1057000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103d200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103d200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103c20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f000000590600002400000000e945cab16cd67c3b605e7d7733867e6dbd73334661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contracts/address_book.ts b/types/contracts/address_book.ts deleted file mode 100644 index e80d81b..0000000 --- a/types/contracts/address_book.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* This file is auto-generated */ - -import type { ApiPromise } from '@polkadot/api'; -import { Abi } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import { ContractPromise } from '@polkadot/api-contract'; -import { ContractAbi } from '../contract-info/address_book'; -import QueryMethods from '../query/address_book'; -import BuildExtrinsicMethods from '../build-extrinsic/address_book'; -import TxSignAndSendMethods from '../tx-sign-and-send/address_book'; -import MixedMethods from '../mixed-methods/address_book'; -import EventsClass from '../events/address_book'; - - -export default class Contract { - readonly query : QueryMethods; - readonly buildExtrinsic : BuildExtrinsicMethods; - readonly tx : TxSignAndSendMethods; - readonly methods : MixedMethods; - readonly events: EventsClass; - - readonly address : string; - readonly signer : KeyringPair; - - private nativeContract : ContractPromise; - private nativeAPI : ApiPromise; - private contractAbi: Abi; - - /** - * @constructor - - * @param address - The address of the contract. - * @param signer - The signer to use for signing transactions. - * @param nativeAPI - The API instance to use for queries. - */ - constructor( - address : string, - signer : KeyringPair, - nativeAPI : ApiPromise, - ) { - this.address = address; - this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); - this.nativeAPI = nativeAPI; - this.signer = signer; - this.contractAbi = new Abi(ContractAbi); - - this.query = new QueryMethods(this.nativeContract, this.nativeAPI, signer.address); - this.buildExtrinsic = new BuildExtrinsicMethods(this.nativeContract, this.nativeAPI); - this.tx = new TxSignAndSendMethods(nativeAPI, this.nativeContract, signer); - this.methods = new MixedMethods(nativeAPI, this.nativeContract, signer); - this.events = new EventsClass(this.nativeContract, nativeAPI); - } - - /** - * name - * - * @returns The name of the contract. - */ - get name() : string { - return this.nativeContract.abi.info.contract.name.toString(); - } - - /** - * abi - * - * @returns The abi of the contract. - */ - get abi() : Abi { - return this.contractAbi; - } - - /** - * withSigner - * - * @param signer - The signer to use for signing transactions. - * @returns New instance of the contract class with new signer. - * @example - * ```typescript - * const contract = new Contract(address, signerAlice, api); - * await contract.mint(signerBob.address, 100); - * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); - * ``` - */ - withSigner(signer : KeyringPair) : Contract { - return new Contract(this.address, signer, this.nativeAPI); - } - - /** - * withAddress - * - * @param address - The address of the contract. - * @returns New instance of the contract class to interact with new contract. - */ - withAddress(address : string) : Contract { - return new Contract(address, this.signer, this.nativeAPI); - } - - /** - * withAPI - * - * @param api - The API instance to use for queries. - * @returns New instance of the contract class to interact with new API. - */ - withAPI(api : ApiPromise) : Contract { - return new Contract(this.address, this.signer, api); - } -} \ No newline at end of file diff --git a/types/contracts/identity.ts b/types/contracts/identity.ts deleted file mode 100644 index 85277d2..0000000 --- a/types/contracts/identity.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* This file is auto-generated */ - -import type { ApiPromise } from '@polkadot/api'; -import { Abi } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import { ContractPromise } from '@polkadot/api-contract'; -import { ContractAbi } from '../contract-info/identity'; -import QueryMethods from '../query/identity'; -import BuildExtrinsicMethods from '../build-extrinsic/identity'; -import TxSignAndSendMethods from '../tx-sign-and-send/identity'; -import MixedMethods from '../mixed-methods/identity'; -import EventsClass from '../events/identity'; - - -export default class Contract { - readonly query : QueryMethods; - readonly buildExtrinsic : BuildExtrinsicMethods; - readonly tx : TxSignAndSendMethods; - readonly methods : MixedMethods; - readonly events: EventsClass; - - readonly address : string; - readonly signer : KeyringPair; - - private nativeContract : ContractPromise; - private nativeAPI : ApiPromise; - private contractAbi: Abi; - - /** - * @constructor - - * @param address - The address of the contract. - * @param signer - The signer to use for signing transactions. - * @param nativeAPI - The API instance to use for queries. - */ - constructor( - address : string, - signer : KeyringPair, - nativeAPI : ApiPromise, - ) { - this.address = address; - this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); - this.nativeAPI = nativeAPI; - this.signer = signer; - this.contractAbi = new Abi(ContractAbi); - - this.query = new QueryMethods(this.nativeContract, this.nativeAPI, signer.address); - this.buildExtrinsic = new BuildExtrinsicMethods(this.nativeContract, this.nativeAPI); - this.tx = new TxSignAndSendMethods(nativeAPI, this.nativeContract, signer); - this.methods = new MixedMethods(nativeAPI, this.nativeContract, signer); - this.events = new EventsClass(this.nativeContract, nativeAPI); - } - - /** - * name - * - * @returns The name of the contract. - */ - get name() : string { - return this.nativeContract.abi.info.contract.name.toString(); - } - - /** - * abi - * - * @returns The abi of the contract. - */ - get abi() : Abi { - return this.contractAbi; - } - - /** - * withSigner - * - * @param signer - The signer to use for signing transactions. - * @returns New instance of the contract class with new signer. - * @example - * ```typescript - * const contract = new Contract(address, signerAlice, api); - * await contract.mint(signerBob.address, 100); - * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); - * ``` - */ - withSigner(signer : KeyringPair) : Contract { - return new Contract(this.address, signer, this.nativeAPI); - } - - /** - * withAddress - * - * @param address - The address of the contract. - * @returns New instance of the contract class to interact with new contract. - */ - withAddress(address : string) : Contract { - return new Contract(address, this.signer, this.nativeAPI); - } - - /** - * withAPI - * - * @param api - The API instance to use for queries. - * @returns New instance of the contract class to interact with new API. - */ - withAPI(api : ApiPromise) : Contract { - return new Contract(this.address, this.signer, api); - } -} \ No newline at end of file diff --git a/types/data/address_book.json b/types/data/address_book.json deleted file mode 100644 index 7735b58..0000000 --- a/types/data/address_book.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "0": { - "name": "Array", - "body": { - "0": { - "name": "Tuple", - "body": { - "0": { - "name": "number", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "1": { - "name": "Option", - "body": { - "0": { - "name": "string", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "1": { - "name": "null", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - }, - "1": { - "name": "Tuple", - "body": { - "0": { - "name": "number", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "1": { - "name": "Option", - "body": { - "0": { - "name": "string", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "1": { - "name": "null", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - }, - "2": { - "name": "number", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "3": { - "name": "Option", - "body": { - "0": { - "name": "string", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "1": { - "name": "null", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - }, - "4": { - "name": "string", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "5": { - "name": "AccountId", - "body": "string | number[]", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "6": { - "name": "Array", - "body": { - "0": { - "name": "number", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - } - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - }, - "7": { - "name": "number", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "9": { - "name": "null", - "isResult": false, - "isPrimitive": true, - "isConvertable": false - }, - "10": { - "name": "LangError", - "body": { - "CouldNotReadInput": null - }, - "isResult": false, - "isPrimitive": false, - "isConvertable": false - }, - "11": { - "name": "Result; -} - -export interface AddressUpdated { - identityNo: number; - network: number; - updatedAddress: Array; -} - -export interface AddressRemoved { - identityNo: number; - network: number; -} - -export interface IdentityRemoved { - identityNo: number; -} - -export interface NetworkAdded { - networkId: number; - rpcUrl: string; - accountType: ReturnTypes.AccountType; -} - -export interface NetworkUpdated { - networkId: number; - rpcUrl: string; - accountType: ReturnTypes.AccountType; -} - -export interface NetworkRemoved { - networkId: number; -} - -export interface RecoveryAccountSet { - identityNo: number; - recoveryAccount: ReturnTypes.AccountId; -} - diff --git a/types/events/address_book.ts b/types/events/address_book.ts deleted file mode 100644 index 19ff03c..0000000 --- a/types/events/address_book.ts +++ /dev/null @@ -1,114 +0,0 @@ -import type * as EventTypes from '../event-types/address_book'; -import type {ContractPromise} from "@polkadot/api-contract"; -import type {ApiPromise} from "@polkadot/api"; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; -import {getEventTypeDescription} from "../shared/utils"; -import {handleEventReturn} from "@727-ventures/typechain-types"; - -export default class EventsClass { - private __nativeContract : ContractPromise; - private __api : ApiPromise; - - constructor( - nativeContract : ContractPromise, - api : ApiPromise, - ) { - this.__nativeContract = nativeContract; - this.__api = api; - } - - public subscribeOnAddressBookCreatedEvent(callback : (event : EventTypes.AddressBookCreated) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('AddressBookCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookCreated); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookCreated'); - } - - public subscribeOnAddressBookRemovedEvent(callback : (event : EventTypes.AddressBookRemoved) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('AddressBookRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookRemoved); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookRemoved'); - } - - public subscribeOnIdentityAddedEvent(callback : (event : EventTypes.IdentityAdded) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('IdentityAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityAdded); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityAdded'); - } - - public subscribeOnNickNameUpdatedEvent(callback : (event : EventTypes.NickNameUpdated) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('NickNameUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NickNameUpdated); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NickNameUpdated'); - } - - public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); - } - - - private __subscribeOnEvent( - callback : (args: any[], event: any) => void, - filter : (eventName: string) => boolean = () => true - ) { - // @ts-ignore - return this.__api.query.system.events((events) => { - events.forEach((record: any) => { - const { event } = record; - - if (event.method == 'ContractEmitted') { - const [address, data] = record.event.data; - - if (address.toString() === this.__nativeContract.address.toString()) { - const {args, event} = this.__nativeContract.abi.decodeEvent(data); - - if (filter(event.identifier.toString())) - callback(args, event); - } - } - }); - }); - } - -} \ No newline at end of file diff --git a/types/events/identity.ts b/types/events/identity.ts deleted file mode 100644 index b84a1d5..0000000 --- a/types/events/identity.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type * as EventTypes from '../event-types/identity'; -import type {ContractPromise} from "@polkadot/api-contract"; -import type {ApiPromise} from "@polkadot/api"; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; -import {getEventTypeDescription} from "../shared/utils"; -import {handleEventReturn} from "@727-ventures/typechain-types"; - -export default class EventsClass { - private __nativeContract : ContractPromise; - private __api : ApiPromise; - - constructor( - nativeContract : ContractPromise, - api : ApiPromise, - ) { - this.__nativeContract = nativeContract; - this.__api = api; - } - - public subscribeOnIdentityCreatedEvent(callback : (event : EventTypes.IdentityCreated) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('IdentityCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityCreated); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityCreated'); - } - - public subscribeOnAddressAddedEvent(callback : (event : EventTypes.AddressAdded) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('AddressAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressAdded); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressAdded'); - } - - public subscribeOnAddressUpdatedEvent(callback : (event : EventTypes.AddressUpdated) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('AddressUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressUpdated); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressUpdated'); - } - - public subscribeOnAddressRemovedEvent(callback : (event : EventTypes.AddressRemoved) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('AddressRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressRemoved); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressRemoved'); - } - - public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); - } - - public subscribeOnNetworkAddedEvent(callback : (event : EventTypes.NetworkAdded) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('NetworkAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkAdded); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkAdded'); - } - - public subscribeOnNetworkUpdatedEvent(callback : (event : EventTypes.NetworkUpdated) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('NetworkUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkUpdated); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkUpdated'); - } - - public subscribeOnNetworkRemovedEvent(callback : (event : EventTypes.NetworkRemoved) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('NetworkRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkRemoved); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkRemoved'); - } - - public subscribeOnRecoveryAccountSetEvent(callback : (event : EventTypes.RecoveryAccountSet) => void) { - const callbackWrapper = (args: any[], event: any) => { - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - callback(handleEventReturn(_event, getEventTypeDescription('RecoveryAccountSet', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.RecoveryAccountSet); - }; - - return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'RecoveryAccountSet'); - } - - - private __subscribeOnEvent( - callback : (args: any[], event: any) => void, - filter : (eventName: string) => boolean = () => true - ) { - // @ts-ignore - return this.__api.query.system.events((events) => { - events.forEach((record: any) => { - const { event } = record; - - if (event.method == 'ContractEmitted') { - const [address, data] = record.event.data; - - if (address.toString() === this.__nativeContract.address.toString()) { - const {args, event} = this.__nativeContract.abi.decodeEvent(data); - - if (filter(event.identifier.toString())) - callback(args, event); - } - } - }); - }); - } - -} \ No newline at end of file diff --git a/types/mixed-methods/address_book.ts b/types/mixed-methods/address_book.ts deleted file mode 100644 index b305e43..0000000 --- a/types/mixed-methods/address_book.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { ApiPromise } from '@polkadot/api'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import type * as ReturnTypes from '../types-returns/address_book'; -import type BN from 'bn.js'; -//@ts-ignore -import {ReturnNumber} from '@727-ventures/typechain-types'; -import {getTypeDescription} from './../shared/utils'; -// @ts-ignore -import type {EventRecord} from "@polkadot/api/submittable"; -import {decodeEvents} from "../shared/utils"; -import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __keyringPair : KeyringPair; - private __callerAddress : string; - private __apiPromise: ApiPromise; - - constructor( - apiPromise : ApiPromise, - nativeContract : ContractPromise, - keyringPair : KeyringPair, - ) { - this.__apiPromise = apiPromise; - this.__nativeContract = nativeContract; - this.__keyringPair = keyringPair; - this.__callerAddress = keyringPair.address; - } - - /** - * identityContract - * - * @returns { Result } - */ - "identityContract" ( - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options, (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * createAddressBook - * - * @returns { void } - */ - "createAddressBook" ( - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * removeAddressBook - * - * @returns { void } - */ - "removeAddressBook" ( - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addIdentity - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } nickname, - * @returns { void } - */ - "addIdentity" ( - identityNo: (number | string | BN), - nickname: string | null, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, nickname], __options); - } - - /** - * removeIdentity - * - * @param { (number | string | BN) } identityNo, - * @returns { void } - */ - "removeIdentity" ( - identityNo: (number | string | BN), - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo], __options); - } - - /** - * updateNickname - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } newNickname, - * @returns { void } - */ - "updateNickname" ( - identityNo: (number | string | BN), - newNickname: string | null, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, newNickname], __options); - } - - /** - * identitiesOf - * - * @param { ArgumentTypes.AccountId } account, - * @returns { Result, ReturnTypes.LangError> } - */ - "identitiesOf" ( - account: ArgumentTypes.AccountId, - __options: GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options, (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * hasAddressBook - * - * @returns { Result } - */ - "hasAddressBook" ( - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); - } - -} \ No newline at end of file diff --git a/types/mixed-methods/identity.ts b/types/mixed-methods/identity.ts deleted file mode 100644 index c2485c2..0000000 --- a/types/mixed-methods/identity.ts +++ /dev/null @@ -1,274 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { ApiPromise } from '@polkadot/api'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/identity'; -import type * as ReturnTypes from '../types-returns/identity'; -import type BN from 'bn.js'; -//@ts-ignore -import {ReturnNumber} from '@727-ventures/typechain-types'; -import {getTypeDescription} from './../shared/utils'; -// @ts-ignore -import type {EventRecord} from "@polkadot/api/submittable"; -import {decodeEvents} from "../shared/utils"; -import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __keyringPair : KeyringPair; - private __callerAddress : string; - private __apiPromise: ApiPromise; - - constructor( - apiPromise : ApiPromise, - nativeContract : ContractPromise, - keyringPair : KeyringPair, - ) { - this.__apiPromise = apiPromise; - this.__nativeContract = nativeContract; - this.__keyringPair = keyringPair; - this.__callerAddress = keyringPair.address; - } - - /** - * identity - * - * @param { (number | string | BN) } identityNo, - * @returns { Result } - */ - "identity" ( - identityNo: (number | string | BN), - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * ownerOf - * - * @param { (number | string | BN) } identityNo, - * @returns { Result } - */ - "ownerOf" ( - identityNo: (number | string | BN), - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * identityOf - * - * @param { ArgumentTypes.AccountId } owner, - * @returns { Result } - */ - "identityOf" ( - owner: ArgumentTypes.AccountId, - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options, (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * networkInfoOf - * - * @param { (number | string | BN) } networkId, - * @returns { Result } - */ - "networkInfoOf" ( - networkId: (number | string | BN), - __options: GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * transactionDestination - * - * @param { (number | string | BN) } receiver, - * @param { (number | string | BN) } network, - * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } - */ - "transactionDestination" ( - receiver: (number | string | BN), - network: (number | string | BN), - __options: GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options, (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * availableNetworks - * - * @returns { Result, ReturnTypes.LangError> } - */ - "availableNetworks" ( - __options: GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options, (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * createIdentity - * - * @returns { void } - */ - "createIdentity" ( - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - * @returns { void } - */ - "addAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network, address], __options); - } - - /** - * updateAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - * @returns { void } - */ - "updateAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network, address], __options); - } - - /** - * removeAddress - * - * @param { (number | string | BN) } network, - * @returns { void } - */ - "removeAddress" ( - network: (number | string | BN), - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network], __options); - } - - /** - * removeIdentity - * - * @returns { void } - */ - "removeIdentity" ( - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addNetwork - * - * @param { ArgumentTypes.NetworkInfo } info, - * @returns { void } - */ - "addNetwork" ( - info: ArgumentTypes.NetworkInfo, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [info], __options); - } - - /** - * updateNetwork - * - * @param { (number | string | BN) } networkId, - * @param { string | null } newRpcUrl, - * @param { ArgumentTypes.AccountType | null } newAddressType, - * @returns { void } - */ - "updateNetwork" ( - networkId: (number | string | BN), - newRpcUrl: string | null, - newAddressType: ArgumentTypes.AccountType | null, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [networkId, newRpcUrl, newAddressType], __options); - } - - /** - * removeNetwork - * - * @param { (number | string | BN) } networkId, - * @returns { void } - */ - "removeNetwork" ( - networkId: (number | string | BN), - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [networkId], __options); - } - - /** - * setRecoveryAccount - * - * @param { ArgumentTypes.AccountId } recoveryAccount, - * @returns { void } - */ - "setRecoveryAccount" ( - recoveryAccount: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [recoveryAccount], __options); - } - - /** - * transferOwnership - * - * @param { (number | string | BN) } identityNo, - * @param { ArgumentTypes.AccountId } newOwner, - * @returns { void } - */ - "transferOwnership" ( - identityNo: (number | string | BN), - newOwner: ArgumentTypes.AccountId, - __options: GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, newOwner], __options); - } - -} \ No newline at end of file diff --git a/types/query/address_book.ts b/types/query/address_book.ts deleted file mode 100644 index bb1a8f6..0000000 --- a/types/query/address_book.ts +++ /dev/null @@ -1,132 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { ApiPromise } from '@polkadot/api'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import type * as ReturnTypes from '../types-returns/address_book'; -import type BN from 'bn.js'; -//@ts-ignore -import {ReturnNumber} from '@727-ventures/typechain-types'; -import {getTypeDescription} from './../shared/utils'; -import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __apiPromise: ApiPromise; - private __callerAddress : string; - - constructor( - nativeContract : ContractPromise, - nativeApi : ApiPromise, - callerAddress : string, - ) { - this.__nativeContract = nativeContract; - this.__callerAddress = callerAddress; - this.__apiPromise = nativeApi; - } - - /** - * identityContract - * - * @returns { Result } - */ - "identityContract" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options , (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * createAddressBook - * - * @returns { Result, ReturnTypes.LangError> } - */ - "createAddressBook" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * removeAddressBook - * - * @returns { Result, ReturnTypes.LangError> } - */ - "removeAddressBook" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * addIdentity - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } nickname, - * @returns { Result, ReturnTypes.LangError> } - */ - "addIdentity" ( - identityNo: (number | string | BN), - nickname: string | null, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addIdentity", [identityNo, nickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * removeIdentity - * - * @param { (number | string | BN) } identityNo, - * @returns { Result, ReturnTypes.LangError> } - */ - "removeIdentity" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * updateNickname - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } newNickname, - * @returns { Result, ReturnTypes.LangError> } - */ - "updateNickname" ( - identityNo: (number | string | BN), - newNickname: string | null, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNickname", [identityNo, newNickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * identitiesOf - * - * @param { ArgumentTypes.AccountId } account, - * @returns { Result, ReturnTypes.LangError> } - */ - "identitiesOf" ( - account: ArgumentTypes.AccountId, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options , (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * hasAddressBook - * - * @returns { Result } - */ - "hasAddressBook" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); - } - -} \ No newline at end of file diff --git a/types/query/identity.ts b/types/query/identity.ts deleted file mode 100644 index dede6d4..0000000 --- a/types/query/identity.ts +++ /dev/null @@ -1,246 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { ApiPromise } from '@polkadot/api'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import type { QueryReturnType } from '@727-ventures/typechain-types'; -import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/identity'; -import type * as ReturnTypes from '../types-returns/identity'; -import type BN from 'bn.js'; -//@ts-ignore -import {ReturnNumber} from '@727-ventures/typechain-types'; -import {getTypeDescription} from './../shared/utils'; -import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __apiPromise: ApiPromise; - private __callerAddress : string; - - constructor( - nativeContract : ContractPromise, - nativeApi : ApiPromise, - callerAddress : string, - ) { - this.__nativeContract = nativeContract; - this.__callerAddress = callerAddress; - this.__apiPromise = nativeApi; - } - - /** - * identity - * - * @param { (number | string | BN) } identityNo, - * @returns { Result } - */ - "identity" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * ownerOf - * - * @param { (number | string | BN) } identityNo, - * @returns { Result } - */ - "ownerOf" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * identityOf - * - * @param { ArgumentTypes.AccountId } owner, - * @returns { Result } - */ - "identityOf" ( - owner: ArgumentTypes.AccountId, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options , (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * networkInfoOf - * - * @param { (number | string | BN) } networkId, - * @returns { Result } - */ - "networkInfoOf" ( - networkId: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * transactionDestination - * - * @param { (number | string | BN) } receiver, - * @param { (number | string | BN) } network, - * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } - */ - "transactionDestination" ( - receiver: (number | string | BN), - network: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options , (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * availableNetworks - * - * @returns { Result, ReturnTypes.LangError> } - */ - "availableNetworks" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options , (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * createIdentity - * - * @returns { Result, ReturnTypes.LangError> } - */ - "createIdentity" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * addAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - * @returns { Result, ReturnTypes.LangError> } - */ - "addAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * updateAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - * @returns { Result, ReturnTypes.LangError> } - */ - "updateAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * removeAddress - * - * @param { (number | string | BN) } network, - * @returns { Result, ReturnTypes.LangError> } - */ - "removeAddress" ( - network: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddress", [network], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * removeIdentity - * - * @returns { Result, ReturnTypes.LangError> } - */ - "removeIdentity" ( - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * addNetwork - * - * @param { ArgumentTypes.NetworkInfo } info, - * @returns { Result, ReturnTypes.LangError> } - */ - "addNetwork" ( - info: ArgumentTypes.NetworkInfo, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addNetwork", [info], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * updateNetwork - * - * @param { (number | string | BN) } networkId, - * @param { string | null } newRpcUrl, - * @param { ArgumentTypes.AccountType | null } newAddressType, - * @returns { Result, ReturnTypes.LangError> } - */ - "updateNetwork" ( - networkId: (number | string | BN), - newRpcUrl: string | null, - newAddressType: ArgumentTypes.AccountType | null, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * removeNetwork - * - * @param { (number | string | BN) } networkId, - * @returns { Result, ReturnTypes.LangError> } - */ - "removeNetwork" ( - networkId: (number | string | BN), - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeNetwork", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * setRecoveryAccount - * - * @param { ArgumentTypes.AccountId } recoveryAccount, - * @returns { Result, ReturnTypes.LangError> } - */ - "setRecoveryAccount" ( - recoveryAccount: ArgumentTypes.AccountId, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "setRecoveryAccount", [recoveryAccount], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - - /** - * transferOwnership - * - * @param { (number | string | BN) } identityNo, - * @param { ArgumentTypes.AccountId } newOwner, - * @returns { Result, ReturnTypes.LangError> } - */ - "transferOwnership" ( - identityNo: (number | string | BN), - newOwner: ArgumentTypes.AccountId, - __options ? : GasLimit, - ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ - return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transferOwnership", [identityNo, newOwner], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); - } - -} \ No newline at end of file diff --git a/types/shared/utils.ts b/types/shared/utils.ts deleted file mode 100644 index 395aa48..0000000 --- a/types/shared/utils.ts +++ /dev/null @@ -1,38 +0,0 @@ -import fs from "fs"; -import type {ContractPromise} from "@polkadot/api-contract"; -import {handleEventReturn} from "@727-ventures/typechain-types"; - -export function getTypeDescription(id: number | string, types: any): any { - return types[id]; -} - -export function getEventTypeDescription(name: string, types: any): any { - return types[name]; -} - -export function decodeEvents(events: any[], contract: ContractPromise, types: any): any[] { - return events.filter((record: any) => { - const { event } = record; - - const [address, data] = record.event.data; - - return event.method == 'ContractEmitted' && address.toString() === contract.address.toString(); - }).map((record: any) => { - const [address, data] = record.event.data; - - const {args, event} = contract.abi.decodeEvent(data); - - const _event: Record < string, any > = {}; - - for (let i = 0; i < args.length; i++) { - _event[event.args[i]!.name] = args[i]!.toJSON(); - } - - handleEventReturn(_event, getEventTypeDescription(event.identifier.toString(), types)); - - return { - name: event.identifier.toString(), - args: _event, - }; - }); -} \ No newline at end of file diff --git a/types/tx-sign-and-send/address_book.ts b/types/tx-sign-and-send/address_book.ts deleted file mode 100644 index 705ce90..0000000 --- a/types/tx-sign-and-send/address_book.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { ApiPromise } from '@polkadot/api'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/address_book'; -import type BN from 'bn.js'; -// @ts-ignore -import type {EventRecord} from "@polkadot/api/submittable"; -import {decodeEvents} from "../shared/utils"; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __keyringPair : KeyringPair; - private __apiPromise: ApiPromise; - - constructor( - apiPromise: ApiPromise, - nativeContract : ContractPromise, - keyringPair : KeyringPair, - ) { - this.__apiPromise = apiPromise; - this.__nativeContract = nativeContract; - this.__keyringPair = keyringPair; - } - - /** - * identityContract - * - */ - "identityContract" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityContract", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * createAddressBook - * - */ - "createAddressBook" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * removeAddressBook - * - */ - "removeAddressBook" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addIdentity - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } nickname, - */ - "addIdentity" ( - identityNo: (number | string | BN), - nickname: string | null, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, nickname], __options); - } - - /** - * removeIdentity - * - * @param { (number | string | BN) } identityNo, - */ - "removeIdentity" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo], __options); - } - - /** - * updateNickname - * - * @param { (number | string | BN) } identityNo, - * @param { string | null } newNickname, - */ - "updateNickname" ( - identityNo: (number | string | BN), - newNickname: string | null, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, newNickname], __options); - } - - /** - * identitiesOf - * - * @param { ArgumentTypes.AccountId } account, - */ - "identitiesOf" ( - account: ArgumentTypes.AccountId, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identitiesOf", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [account], __options); - } - - /** - * hasAddressBook - * - */ - "hasAddressBook" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "hasAddressBook", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - -} \ No newline at end of file diff --git a/types/tx-sign-and-send/identity.ts b/types/tx-sign-and-send/identity.ts deleted file mode 100644 index 8698e12..0000000 --- a/types/tx-sign-and-send/identity.ts +++ /dev/null @@ -1,261 +0,0 @@ -/* This file is auto-generated */ - -import type { ContractPromise } from '@polkadot/api-contract'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { ApiPromise } from '@polkadot/api'; -import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; -import { txSignAndSend } from '@727-ventures/typechain-types'; -import type * as ArgumentTypes from '../types-arguments/identity'; -import type BN from 'bn.js'; -// @ts-ignore -import type {EventRecord} from "@polkadot/api/submittable"; -import {decodeEvents} from "../shared/utils"; -import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; - - -export default class Methods { - private __nativeContract : ContractPromise; - private __keyringPair : KeyringPair; - private __apiPromise: ApiPromise; - - constructor( - apiPromise: ApiPromise, - nativeContract : ContractPromise, - keyringPair : KeyringPair, - ) { - this.__apiPromise = apiPromise; - this.__nativeContract = nativeContract; - this.__keyringPair = keyringPair; - } - - /** - * identity - * - * @param { (number | string | BN) } identityNo, - */ - "identity" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo], __options); - } - - /** - * ownerOf - * - * @param { (number | string | BN) } identityNo, - */ - "ownerOf" ( - identityNo: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "ownerOf", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo], __options); - } - - /** - * identityOf - * - * @param { ArgumentTypes.AccountId } owner, - */ - "identityOf" ( - owner: ArgumentTypes.AccountId, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityOf", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [owner], __options); - } - - /** - * networkInfoOf - * - * @param { (number | string | BN) } networkId, - */ - "networkInfoOf" ( - networkId: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "networkInfoOf", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [networkId], __options); - } - - /** - * transactionDestination - * - * @param { (number | string | BN) } receiver, - * @param { (number | string | BN) } network, - */ - "transactionDestination" ( - receiver: (number | string | BN), - network: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transactionDestination", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [receiver, network], __options); - } - - /** - * availableNetworks - * - */ - "availableNetworks" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "availableNetworks", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * createIdentity - * - */ - "createIdentity" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - */ - "addAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network, address], __options); - } - - /** - * updateAddress - * - * @param { (number | string | BN) } network, - * @param { Array<(number | string | BN)> } address, - */ - "updateAddress" ( - network: (number | string | BN), - address: Array<(number | string | BN)>, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network, address], __options); - } - - /** - * removeAddress - * - * @param { (number | string | BN) } network, - */ - "removeAddress" ( - network: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [network], __options); - } - - /** - * removeIdentity - * - */ - "removeIdentity" ( - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [], __options); - } - - /** - * addNetwork - * - * @param { ArgumentTypes.NetworkInfo } info, - */ - "addNetwork" ( - info: ArgumentTypes.NetworkInfo, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [info], __options); - } - - /** - * updateNetwork - * - * @param { (number | string | BN) } networkId, - * @param { string | null } newRpcUrl, - * @param { ArgumentTypes.AccountType | null } newAddressType, - */ - "updateNetwork" ( - networkId: (number | string | BN), - newRpcUrl: string | null, - newAddressType: ArgumentTypes.AccountType | null, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [networkId, newRpcUrl, newAddressType], __options); - } - - /** - * removeNetwork - * - * @param { (number | string | BN) } networkId, - */ - "removeNetwork" ( - networkId: (number | string | BN), - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [networkId], __options); - } - - /** - * setRecoveryAccount - * - * @param { ArgumentTypes.AccountId } recoveryAccount, - */ - "setRecoveryAccount" ( - recoveryAccount: ArgumentTypes.AccountId, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [recoveryAccount], __options); - } - - /** - * transferOwnership - * - * @param { (number | string | BN) } identityNo, - * @param { ArgumentTypes.AccountId } newOwner, - */ - "transferOwnership" ( - identityNo: (number | string | BN), - newOwner: ArgumentTypes.AccountId, - __options ? : GasLimit, - ){ - return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { - return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); - }, [identityNo, newOwner], __options); - } - -} \ No newline at end of file diff --git a/types/types-arguments/address_book.ts b/types/types-arguments/address_book.ts deleted file mode 100644 index d85fb9e..0000000 --- a/types/types-arguments/address_book.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type BN from 'bn.js'; - -export type AccountId = string | number[] - -export enum LangError { - couldNotReadInput = 'CouldNotReadInput' -} - -export enum Error { - addressBookAlreadyCreated = 'AddressBookAlreadyCreated', - addressBookDoesntExist = 'AddressBookDoesntExist', - identityDoesntExist = 'IdentityDoesntExist', - identityNotAdded = 'IdentityNotAdded', - identityAlreadyAdded = 'IdentityAlreadyAdded', - nickNameTooLong = 'NickNameTooLong' -} - diff --git a/types/types-arguments/identity.ts b/types/types-arguments/identity.ts deleted file mode 100644 index 4155926..0000000 --- a/types/types-arguments/identity.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type BN from 'bn.js'; - -export type AccountId = string | number[] - -export enum LangError { - couldNotReadInput = 'CouldNotReadInput' -} - -export type NetworkInfo = { - rpcUrl: string, - accountType: AccountType -} - -export enum AccountType { - accountId32 = 'AccountId32', - accountKey20 = 'AccountKey20' -} - -export type IdentityInfo = { - addresses: Array<[(number | string | BN), Array<(number | string | BN)>]> -} - -export enum Error { - notAllowed = 'NotAllowed', - identityDoesntExist = 'IdentityDoesntExist', - addressAlreadyAdded = 'AddressAlreadyAdded', - invalidNetwork = 'InvalidNetwork', - addressSizeExceeded = 'AddressSizeExceeded', - networkNameTooLong = 'NetworkNameTooLong', - networkRpcUrlTooLong = 'NetworkRpcUrlTooLong', - alreadyIdentityOwner = 'AlreadyIdentityOwner' -} - diff --git a/types/types-returns/address_book.ts b/types/types-returns/address_book.ts deleted file mode 100644 index a0f027f..0000000 --- a/types/types-returns/address_book.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type BN from 'bn.js'; -import type {ReturnNumber} from '@727-ventures/typechain-types'; - -export type AccountId = string | number[] - -export enum LangError { - couldNotReadInput = 'CouldNotReadInput' -} - -export enum Error { - addressBookAlreadyCreated = 'AddressBookAlreadyCreated', - addressBookDoesntExist = 'AddressBookDoesntExist', - identityDoesntExist = 'IdentityDoesntExist', - identityNotAdded = 'IdentityNotAdded', - identityAlreadyAdded = 'IdentityAlreadyAdded', - nickNameTooLong = 'NickNameTooLong' -} - diff --git a/types/types-returns/identity.ts b/types/types-returns/identity.ts deleted file mode 100644 index 8d9ca47..0000000 --- a/types/types-returns/identity.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type BN from 'bn.js'; -import type {ReturnNumber} from '@727-ventures/typechain-types'; - -export type AccountId = string | number[] - -export enum LangError { - couldNotReadInput = 'CouldNotReadInput' -} - -export type NetworkInfo = { - rpcUrl: string, - accountType: AccountType -} - -export enum AccountType { - accountId32 = 'AccountId32', - accountKey20 = 'AccountKey20' -} - -export type IdentityInfo = { - addresses: Array<[number, Array]> -} - -export enum Error { - notAllowed = 'NotAllowed', - identityDoesntExist = 'IdentityDoesntExist', - addressAlreadyAdded = 'AddressAlreadyAdded', - invalidNetwork = 'InvalidNetwork', - addressSizeExceeded = 'AddressSizeExceeded', - networkNameTooLong = 'NetworkNameTooLong', - networkRpcUrlTooLong = 'NetworkRpcUrlTooLong', - alreadyIdentityOwner = 'AlreadyIdentityOwner' -} - From a5957a47ad37a2e13be5d2ce75c09e4f63568616 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:42:32 -0700 Subject: [PATCH 11/45] update readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b6dee9..847e50f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ For details regarding the contract deployment go to this [page](https://github.c 1. Install [NodeJs](https://nodejs.org/en/download) 2. `yarn install` 3. `yarn dev` -4. Go to `http://localhost:3000` to interact with the webapp +4. `yarn compile` NOTE: This requires the [dotflow-ink](https://github.com/TheDotflow/dotflow-ink) repository to be cloned next to the `dotflow-ui` repo. +5. Go to `http://localhost:3000` to interact with the webapp ### Running tests From 3496feaf9a5b4926ed52b01cd8189b17b0b5f46c Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:49:27 -0700 Subject: [PATCH 12/45] update CI --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f18186e..38d31ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,8 @@ jobs: node-version: ${{ matrix.node-version }} - run: yarn install - run: 'CI=false yarn build' + - run: git clone https://github.com/TheDotflow/dotflow-ink + - run: yarn compile - run: yarn lint asset-registry-test: runs-on: ubuntu-latest From d02a362d81ce0d62183664a7481b2addd5e7bfda Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sun, 23 Jul 2023 22:52:26 -0700 Subject: [PATCH 13/45] fix --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38d31ac..b098122 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,9 +19,9 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: yarn install - - run: 'CI=false yarn build' - run: git clone https://github.com/TheDotflow/dotflow-ink - run: yarn compile + - run: 'CI=false yarn build' - run: yarn lint asset-registry-test: runs-on: ubuntu-latest From 4fe0cfa7b3401a5e3dd0e4dcf21843c718aef76e Mon Sep 17 00:00:00 2001 From: cute0laf Date: Mon, 24 Jul 2023 11:11:21 -0700 Subject: [PATCH 14/45] fix test --- __tests__/transactionRouter.test.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index cbfd6f5..6af82a5 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -1,11 +1,12 @@ import { ApiPromise, Keyring, WsProvider } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; +import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; + import TransactionRouter from "../src/utils/transactionRouter"; import IdentityContractFactory from "../types/constructors/identity"; import IdentityContract from "../types/contracts/identity"; import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; -import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; const wsProvider = new WsProvider("ws://127.0.0.1:9944"); const keyring = new Keyring({ type: "sr25519" }); @@ -81,11 +82,9 @@ describe("TransactionRouter", () => { const westendProvider = new WsProvider("ws://127.0.0.1:4242"); const westendApi = await ApiPromise.create({ provider: westendProvider }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - var { data: balance } = await westendApi.query.system.account( + const { data: balance } = (await westendApi.query.system.account( receiver.addressRaw - ); + )) as any; const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); // First lets add a network. @@ -111,13 +110,11 @@ describe("TransactionRouter", () => { asset ); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - var { data: balance } = await westendApi.query.system.account( + const { data: newBalance } = (await westendApi.query.system.account( receiver.addressRaw - ); + )) as any; const newReceiverBalance = parseInt( - balance.free.toHuman().replace(/,/g, "") + newBalance.free.toHuman().replace(/,/g, "") ); expect(newReceiverBalance).toBe(receiverBalance + amount); From 9fc61a2b3559901cd264e70bcb7ee6a261a818de Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 24 Jul 2023 19:04:10 -0700 Subject: [PATCH 15/45] fix --- .github/workflows/ci.yml | 2 -- .gitignore | 4 ---- types/shared/utils.ts | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 types/shared/utils.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b098122..f18186e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,8 +19,6 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: yarn install - - run: git clone https://github.com/TheDotflow/dotflow-ink - - run: yarn compile - run: 'CI=false yarn build' - run: yarn lint asset-registry-test: diff --git a/.gitignore b/.gitignore index 92b644d..a55a34d 100644 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,3 @@ package-lock.json # zombienet bin/ - -# typechain -types/ -artifacts/ diff --git a/types/shared/utils.ts b/types/shared/utils.ts new file mode 100644 index 0000000..395aa48 --- /dev/null +++ b/types/shared/utils.ts @@ -0,0 +1,38 @@ +import fs from "fs"; +import type {ContractPromise} from "@polkadot/api-contract"; +import {handleEventReturn} from "@727-ventures/typechain-types"; + +export function getTypeDescription(id: number | string, types: any): any { + return types[id]; +} + +export function getEventTypeDescription(name: string, types: any): any { + return types[name]; +} + +export function decodeEvents(events: any[], contract: ContractPromise, types: any): any[] { + return events.filter((record: any) => { + const { event } = record; + + const [address, data] = record.event.data; + + return event.method == 'ContractEmitted' && address.toString() === contract.address.toString(); + }).map((record: any) => { + const [address, data] = record.event.data; + + const {args, event} = contract.abi.decodeEvent(data); + + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + handleEventReturn(_event, getEventTypeDescription(event.identifier.toString(), types)); + + return { + name: event.identifier.toString(), + args: _event, + }; + }); +} \ No newline at end of file From 5b817bcaed5ebc2ded0fef1f145028f6a0bf7f8b Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 24 Jul 2023 19:05:48 -0700 Subject: [PATCH 16/45] remove empty file --- src/utils/transactionRouter/reserveTransfer.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/utils/transactionRouter/reserveTransfer.ts diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts deleted file mode 100644 index e69de29..0000000 From e2db568140eb50bdfee2ed7c49c1a650c992ca9a Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 24 Jul 2023 19:17:49 -0700 Subject: [PATCH 17/45] add types --- .gitignore | 4 + config.json | 4 +- types/build-extrinsic/address_book.ts | 115 +++ types/build-extrinsic/identity.ts | 221 +++++ types/constructors/address_book.ts | 53 ++ types/constructors/identity.ts | 81 ++ types/contract-info/address_book.ts | 2 + types/contract-info/identity.ts | 2 + types/contracts/address_book.ts | 107 +++ types/contracts/identity.ts | 107 +++ types/data/address_book.json | 351 ++++++++ types/data/identity.json | 1040 ++++++++++++++++++++++++ types/event-data/address_book.json | 3 + types/event-data/identity.json | 3 + types/event-types/address_book.ts | 27 + types/event-types/identity.ts | 50 ++ types/events/address_book.ts | 114 +++ types/events/identity.ts | 170 ++++ types/mixed-methods/address_book.ts | 150 ++++ types/mixed-methods/identity.ts | 274 +++++++ types/query/address_book.ts | 132 +++ types/query/identity.ts | 246 ++++++ types/tx-sign-and-send/address_book.ts | 139 ++++ types/tx-sign-and-send/identity.ts | 261 ++++++ types/types-arguments/address_book.ts | 17 + types/types-arguments/identity.ts | 33 + types/types-returns/address_book.ts | 18 + types/types-returns/identity.ts | 34 + 28 files changed, 3757 insertions(+), 1 deletion(-) create mode 100644 types/build-extrinsic/address_book.ts create mode 100644 types/build-extrinsic/identity.ts create mode 100644 types/constructors/address_book.ts create mode 100644 types/constructors/identity.ts create mode 100644 types/contract-info/address_book.ts create mode 100644 types/contract-info/identity.ts create mode 100644 types/contracts/address_book.ts create mode 100644 types/contracts/identity.ts create mode 100644 types/data/address_book.json create mode 100644 types/data/identity.json create mode 100644 types/event-data/address_book.json create mode 100644 types/event-data/identity.json create mode 100644 types/event-types/address_book.ts create mode 100644 types/event-types/identity.ts create mode 100644 types/events/address_book.ts create mode 100644 types/events/identity.ts create mode 100644 types/mixed-methods/address_book.ts create mode 100644 types/mixed-methods/identity.ts create mode 100644 types/query/address_book.ts create mode 100644 types/query/identity.ts create mode 100644 types/tx-sign-and-send/address_book.ts create mode 100644 types/tx-sign-and-send/identity.ts create mode 100644 types/types-arguments/address_book.ts create mode 100644 types/types-arguments/identity.ts create mode 100644 types/types-returns/address_book.ts create mode 100644 types/types-returns/identity.ts diff --git a/.gitignore b/.gitignore index a55a34d..19be643 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,7 @@ package-lock.json # zombienet bin/ + +# toolchain + +artifacts/ diff --git a/config.json b/config.json index db3b207..b82379a 100644 --- a/config.json +++ b/config.json @@ -1,5 +1,7 @@ { - "projectFiles": ["../dotflow-ink/contracts/**/*"], + "projectFiles": [ + "../dotflow-ink/contracts/**/*" + ], "typechainGeneratedPath": "types", "isWorkspace": true, "workspacePath": "../dotflow-ink/" diff --git a/types/build-extrinsic/address_book.ts b/types/build-extrinsic/address_book.ts new file mode 100644 index 0000000..6926713 --- /dev/null +++ b/types/build-extrinsic/address_book.ts @@ -0,0 +1,115 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; +import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/address_book'; +import type BN from 'bn.js'; +import type { ApiPromise } from '@polkadot/api'; + + + +export default class Methods { + private __nativeContract : ContractPromise; + private __apiPromise: ApiPromise; + + constructor( + nativeContract : ContractPromise, + apiPromise: ApiPromise, + ) { + this.__nativeContract = nativeContract; + this.__apiPromise = apiPromise; + } + /** + * identityContract + * + */ + "identityContract" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityContract", [], __options); + } + + /** + * createAddressBook + * + */ + "createAddressBook" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createAddressBook", [], __options); + } + + /** + * removeAddressBook + * + */ + "removeAddressBook" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddressBook", [], __options); + } + + /** + * addIdentity + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } nickname, + */ + "addIdentity" ( + identityNo: (number | string | BN), + nickname: string | null, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addIdentity", [identityNo, nickname], __options); + } + + /** + * removeIdentity + * + * @param { (number | string | BN) } identityNo, + */ + "removeIdentity" ( + identityNo: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [identityNo], __options); + } + + /** + * updateNickname + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } newNickname, + */ + "updateNickname" ( + identityNo: (number | string | BN), + newNickname: string | null, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNickname", [identityNo, newNickname], __options); + } + + /** + * identitiesOf + * + * @param { ArgumentTypes.AccountId } account, + */ + "identitiesOf" ( + account: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identitiesOf", [account], __options); + } + + /** + * hasAddressBook + * + */ + "hasAddressBook" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "hasAddressBook", [], __options); + } + +} \ No newline at end of file diff --git a/types/build-extrinsic/identity.ts b/types/build-extrinsic/identity.ts new file mode 100644 index 0000000..b4df9e4 --- /dev/null +++ b/types/build-extrinsic/identity.ts @@ -0,0 +1,221 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { GasLimit, GasLimitAndRequiredValue } from '@727-ventures/typechain-types'; +import { buildSubmittableExtrinsic } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/identity'; +import type BN from 'bn.js'; +import type { ApiPromise } from '@polkadot/api'; + + + +export default class Methods { + private __nativeContract : ContractPromise; + private __apiPromise: ApiPromise; + + constructor( + nativeContract : ContractPromise, + apiPromise: ApiPromise, + ) { + this.__nativeContract = nativeContract; + this.__apiPromise = apiPromise; + } + /** + * identity + * + * @param { (number | string | BN) } identityNo, + */ + "identity" ( + identityNo: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identity", [identityNo], __options); + } + + /** + * ownerOf + * + * @param { (number | string | BN) } identityNo, + */ + "ownerOf" ( + identityNo: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "ownerOf", [identityNo], __options); + } + + /** + * identityOf + * + * @param { ArgumentTypes.AccountId } owner, + */ + "identityOf" ( + owner: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "identityOf", [owner], __options); + } + + /** + * networkInfoOf + * + * @param { (number | string | BN) } networkId, + */ + "networkInfoOf" ( + networkId: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "networkInfoOf", [networkId], __options); + } + + /** + * transactionDestination + * + * @param { (number | string | BN) } receiver, + * @param { (number | string | BN) } network, + */ + "transactionDestination" ( + receiver: (number | string | BN), + network: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transactionDestination", [receiver, network], __options); + } + + /** + * availableNetworks + * + */ + "availableNetworks" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "availableNetworks", [], __options); + } + + /** + * createIdentity + * + */ + "createIdentity" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "createIdentity", [], __options); + } + + /** + * addAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + */ + "addAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addAddress", [network, address], __options); + } + + /** + * updateAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + */ + "updateAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateAddress", [network, address], __options); + } + + /** + * removeAddress + * + * @param { (number | string | BN) } network, + */ + "removeAddress" ( + network: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeAddress", [network], __options); + } + + /** + * removeIdentity + * + */ + "removeIdentity" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeIdentity", [], __options); + } + + /** + * addNetwork + * + * @param { ArgumentTypes.NetworkInfo } info, + */ + "addNetwork" ( + info: ArgumentTypes.NetworkInfo, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "addNetwork", [info], __options); + } + + /** + * updateNetwork + * + * @param { (number | string | BN) } networkId, + * @param { string | null } newRpcUrl, + * @param { ArgumentTypes.AccountType | null } newAddressType, + */ + "updateNetwork" ( + networkId: (number | string | BN), + newRpcUrl: string | null, + newAddressType: ArgumentTypes.AccountType | null, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options); + } + + /** + * removeNetwork + * + * @param { (number | string | BN) } networkId, + */ + "removeNetwork" ( + networkId: (number | string | BN), + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "removeNetwork", [networkId], __options); + } + + /** + * setRecoveryAccount + * + * @param { ArgumentTypes.AccountId } recoveryAccount, + */ + "setRecoveryAccount" ( + recoveryAccount: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "setRecoveryAccount", [recoveryAccount], __options); + } + + /** + * transferOwnership + * + * @param { (number | string | BN) } identityNo, + * @param { ArgumentTypes.AccountId } newOwner, + */ + "transferOwnership" ( + identityNo: (number | string | BN), + newOwner: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "transferOwnership", [identityNo, newOwner], __options); + } + +} \ No newline at end of file diff --git a/types/constructors/address_book.ts b/types/constructors/address_book.ts new file mode 100644 index 0000000..5b88358 --- /dev/null +++ b/types/constructors/address_book.ts @@ -0,0 +1,53 @@ +import {CodePromise} from "@polkadot/api-contract"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import type {ApiPromise} from "@polkadot/api"; +import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; +import type {ConstructorOptions} from "@727-ventures/typechain-types"; +import type {WeightV2} from "@polkadot/types/interfaces"; +import type * as ArgumentTypes from '../types-arguments/address_book'; +import { ContractFile } from '../contract-info/address_book'; +import type BN from 'bn.js'; + +export default class Constructors { + readonly nativeAPI: ApiPromise; + readonly signer: KeyringPair; + + constructor( + nativeAPI: ApiPromise, + signer: KeyringPair, + ) { + this.nativeAPI = nativeAPI; + this.signer = signer; + } + + /** + * new + * + * @param { ArgumentTypes.AccountId } identityContract, + */ + async "new" ( + identityContract: ArgumentTypes.AccountId, + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; + + const storageDepositLimit = __options?.storageDepositLimit; + const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, identityContract); + let response; + + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } + + return { + result: response as SignAndSendSuccessResponse, + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + }; + } +} \ No newline at end of file diff --git a/types/constructors/identity.ts b/types/constructors/identity.ts new file mode 100644 index 0000000..7887d46 --- /dev/null +++ b/types/constructors/identity.ts @@ -0,0 +1,81 @@ +import {CodePromise} from "@polkadot/api-contract"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import type {ApiPromise} from "@polkadot/api"; +import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@727-ventures/typechain-types"; +import type {ConstructorOptions} from "@727-ventures/typechain-types"; +import type {WeightV2} from "@polkadot/types/interfaces"; +import type * as ArgumentTypes from '../types-arguments/identity'; +import { ContractFile } from '../contract-info/identity'; +import type BN from 'bn.js'; + +export default class Constructors { + readonly nativeAPI: ApiPromise; + readonly signer: KeyringPair; + + constructor( + nativeAPI: ApiPromise, + signer: KeyringPair, + ) { + this.nativeAPI = nativeAPI; + this.signer = signer; + } + + /** + * new + * + */ + async "new" ( + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; + + const storageDepositLimit = __options?.storageDepositLimit; + const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, ); + let response; + + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } + + return { + result: response as SignAndSendSuccessResponse, + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + }; + } + /** + * initWithNetworks + * + * @param { Array } networks, + */ + async "initWithNetworks" ( + networks: Array, + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; + + const storageDepositLimit = __options?.storageDepositLimit; + const tx = code.tx["initWithNetworks"]!({ gasLimit, storageDepositLimit, value: __options?.value }, networks); + let response; + + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } + + return { + result: response as SignAndSendSuccessResponse, + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + }; + } +} \ No newline at end of file diff --git a/types/contract-info/address_book.ts b/types/contract-info/address_book.ts new file mode 100644 index 0000000..b06d3d9 --- /dev/null +++ b/types/contract-info/address_book.ts @@ -0,0 +1,2 @@ +export const ContractAbi = `{"source":{"hash":"0xf7970b103d9644b533629c2938375218f75ee515fc2628648cf2b326f72a5232","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; +export const ContractFile = `{"source":{"hash":"0xf528b03591d44535323428f598b308aa29db68ac941cd6aa658776a9195bf678","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000015a0e60037f7f7f017f60027f7f0060027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060017f0060047f7f7f7f017f60000060017f017e60087f7f7e7f7f7f7f7f017f6000017f60017f017f60067f7f7f7f7f7f0002ea010c057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640001057365616c310463616c6c000a057365616c3005696e7075740001057365616c300663616c6c65720001057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f7279020102100361600001010100050004030503010101030101010201030301010303030501010601010106050b0c03060203080604030108010601030301080208020000030202040103020602090504020205070407050202030000050407040202020204040d04040501700111110608017f01418080040b0711020463616c6c0041066465706c6f7900430916010041010b101d5b5a33424d664f63644e46484965500acaab01602b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6001047f230041106b22032400200028020422042002492205450440200341086a41002002200028020022061068200120022003280208200328020c419cb204102620032002200420061068200020032903003702000b200341106a240020050b1400200020012002200341ccab044180800410690b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ac04360210200341003602002003200136021c200320003602182003200341186a36020820032002101e000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0e0020002001200241ec9b04106a0bec0401067f23004190016b22022400200241346a200141186a2900003702002002412c6a200141106a290000370200200241246a200141086a290000370200200241bc81043602182002200129000037021c2002410036024820024280800137027c200241f0b20436027841eee7a015200241f8006a22051017200241186a4104722005101820022002290378370340200241106a200241406b20022802800110192002280214210320022802102002280240210120022002280244220736027820032001200510002103200241086a20022802782001200741d486041014024002400240410c20032003410c4f1b0e0400020201020b200228020c210120022002280208360250200220013602542002200241d0006a100c024020022802000d00200241d8006a2002280254410476220320022802042201200120034b1b101a20010440200241f8006a41047221030340200241f8006a200241d0006a101b20022802780d02200241f0006a200341086a29020037030020022003290200370368200241d8006a200241e8006a101c200141016b22010d000b0b200228025c2204450d0020022802602101200228025821030c010b200241003a005820024184016a41013602002002418c016a4101360200200241e0810436028001200241003602782002410136026c2002200241e8006a360288012002200241d8006a360268200241f8006a41d08204101e000b20002001360208200020043602042000200336020020024190016a24000f0b20024184016a41013602002002418c016a4100360200200241e487043602800120024184ac043602880120024100360278200241f8006a41ec8704101e000b2601017f230041106b220224002002200036020c20012002410c6a41041024200241106a24000b0a0020012000412010240b4501017f2002200128020422034b044041acac04412341a0ae041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000b800201047f02400240024002402001450440410421020c010b200141ffffff3f4b22020d01200141047422054100480d012005200141808080c000494102746a41016b4100417c20021b7122042005490d0241e8b204280200220220046a22032002490d0341ecb2042802002003490440200441ffff036a22022004490d042002411076220340002202417f46200241ffff0371200247720d042002411074220220034110746a22032002490d0441ecb2042003360200200220046a22032002490d040b41e8b20420033602002002450d030b2000410036020820002002360204200020013602000f0b1035000b41b0ab04411c4194ab041013000b20051036000bbc06010a7f230041206b22042400200441186a2001100e41012102024020042802180d00200428021c210a200441106a2001100d20042d00104101710d000240024020042d00110e020100020b200441086a2001100c20042802080d01200428020c220320012802044b0d0120042003102c2004280200210b200120042802042205200310110d012003450d00200341076b22014100200120034d1b2109200541036a417c7120056b2106410021020340024002400240024002400240024002400240200220056a2d00002207411874411875220841004e0440200620026b4103712006417f46720d0220022009490d010c060b02400240200741a4a4046a2d000041026b0e03040100060b200241016a220120034f0d05200120056a2c000021010240024002400240200741f0016b0e050100000002000b2008410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120056a2c000041bf7f4a0d05200241036a220120034f0d05200120056a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120056a2c00002101024002400240200741e001470440200741ed01460d012008411f6a41ff0171410c490d022008417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120056a2c000041bf7f4c0d030c040b0340200220056a2201280200200141046a28020072418081828478710d052002200241086a22014d044020012102200120094f0d070c010b0b41f09304411c4194a4041013000b200241016a21020c050b200241016a220120034f0d01200120056a2c000041bf7f4a0d010b200141016a21020c030b410121020c060b200221010b200120034f0d0120012003200120034b1b21020340200120056a2c00004100480440200121020c020b200141016a22012002470d000b0c010b20022003490d010b0b200321060b2000200a360204200041106a20063602002000410c6a2005360200200041086a200b360200410021020b20002002360200200441206a24000bb80201057f200028020822032000280200460440230041206b2202240002400240200341016a2204450d0002402000280200220320036a220520034f044041042005200420042005491b2204200441044d1b22044104742105200441808080c0004941027421060240200304402002200028020436021020024104360218200220034104743602140c010b200241003602180b200220052006200241106a10372002280200450d01200241086a280200450d0220022802041036000b41f08304412141d48e041013000b200228020421032000200436020020002003360204200241206a24000c010b1035000b200028020821030b200028020420034104746a22022001290200370200200241086a200141086a290200370200200341016a220145044041a08104411c41d093041013000b200020013602080bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfaf0441062001280204220528020c22041100000d0c024020012d0018410471450440200341dc9504410120041100000d0e200341acb20441052004110000450d010c0e0b200341da9504410220041100000d0d2002200536020420022003360200200241013a000f20022002410f6a360208200241acb2044105105e0d0d200241d895044102105e0d0d0b200341b194044101200411000021000c0c0b200128020041d2af04410d200128020428020c11000021000c0b0b200128020041c4af04410e200128020428020c11000021000c0a0b200128020041b9af04410b200128020428020c11000021000c090b2001280200419faf04411a200128020428020c11000021000c080b20012802004191af04410e200128020428020c11000021000c070b20012802004181af044110200128020428020c11000021000c060b200128020041f5ae04410c200128020428020c11000021000c050b200128020041eaae04410b200128020428020c11000021000c040b200128020041e3ae044107200128020428020c11000021000c030b200128020041d4ae04410f200128020428020c11000021000c020b200128020041c3ae044111200128020428020c11000021000c010b200128020041b0ae044113200128020428020c11000021000b200241106a240020000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190950436020c20024184ac04360208230041406a220124002001200241086a36020c2001410736022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ac046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b103920014100360218200120012903003703102001410136023c20014102360234200141d0ac04360230200141003602282001200141206a360238200141106a200141286a10440d0141f0b2052d000045044041f1b2052d00004101710d050b410c20012802142001280218100522002000410c4f1b4109470d020c030b41808d04411c41f0a8041013000b41d090044133200141286a41c48d0441809204102e000b41f0b20541013a00000b41f1b20541013a00000b000bfc0102047f017e230041e0006b22032400200341346a200041186a2900003702002003412c6a200041106a290000370200200341246a200041086a290000370200200341bc81043602182003200029000037021c20034100360248200342808001370254200341f0b20436025041eee7a015200341d0006a22041017200341186a4104722004101820032003290350370340200341106a200341406b220520032802581019200328021421002003280210200329034021072003410036025820032007370350200120022004102020032003290350370340200341086a20052003280258101920002003280208200328020c10081a200341e0006a24000b430020012002102820010440200020014104746a21010340200028020020021017200041086a2802002000410c6a28020020021034200041106a22002001470d000b0b0bdc0102037f017e230041d0006b22022400200241106a22042000102220022903102105200241003602282002200537032020012802002001280204200241206a2203102320032001280208411c102420022002290320370310200241086a20042002280228101920032002280208200228020c102520022000280200220420002802042000280208220141fc8704101020024100360248200220022903003703402003200241406b10182001200120022802486a22034b044041a08104411c418c88041013000b2000200436020020002003360208200241d0006a24000b5201037f230041106b2202240020012802082203200128020422044b0440200320044190ae041031000b200241086a20032004200128020010672000200229030837020020004100360208200241106a24000b100020012002102820022000200110240b7901047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a20052004200028020010672003280208200328020c2001200241f0ad04102620002004360208200341106a24000f0b4190ac04411c41d0ad041013000b2004200641e0ad041015000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1006200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a20022000412041d0830410142003280208200328020c2001200241e0830410260b200341306a24000b85010020012003460440200020022001100b1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4106360200200041f09e0436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a2004101e000b7701037f230041206b22022400200241086a2000280200220420002802042000280208220341fc8704101020024100360218200220022903083703102001200241106a10282003200320022802186a22014b044041a08104411c418c88041013000b2000200436020020002001360208200241206a24000b7401017f230041106b2202240002402000413f4d044020012000410274102a0c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210240c010b200041ffffffff034d04402000410274410272200110170c010b20014103102a2000200110170b200241106a24000b080020004101102a0ba10101027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b230041306b220024002000200336020420002002360200200041146a41023602002000411c6a41023602002000412c6a4106360200200041e4940436021020004100360208200041063602242000200041206a360218200020003602282000200041046a360220200041086a4180ae04101e000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76104c200228020822030d0120011036000b1035000b2000200336020420002001360200200241106a24000ba70101017f230041306b2201240020014180800136020041f0b2042001100420014180800136022c200141f0b2043602282001200141286a102b20012d00000440200141003a000041e4860441c10020014194840441a88704102e000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4950436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101e000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b1b002000418180014f044020004180800141b887041015000b20000b0e0020002001200241cc9b04106a0b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190a904360208200141003602002001410436021c200120003602182001200141186a360210200141808c04101e000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190a9043602102002410036020820024103360224200220002d0000410274220041c0b2046a28020036022c2002200041d4b2046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a105d200241306a24000b1d00200045044020024100102a0f0b20024101102a20002001200210230b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041f88e0436021020004184ac0436021820004100360208200041086a41808f04101e000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141b09004360218200141003602102001410636022c2001200141286a36022020012001410c6a360228200141106a41c09004101e000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002104c2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002104c20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141e8b204280200220620086a22072006490d031a2003280200210a41ecb2042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341ecb20420033602002001200620086a22072006490d041a0b41e8b204200736020020012006450d031a2006200a2009100b210420010c030b20002001360204200041086a41003602000c030b41b0ab04411c4194ab041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b5901037f230041106b2203240002402001450440200041003602040c010b200341086a20021039200328020821042000200328020c220536020420002004360200200520012002100b1a200020023602080b200341106a24000b3501017f230041106b22022400200241086a2001102c200228020c21012000200228020836020020002001360204200241106a24000b3501017f230041106b22002400200042808001370204200041f0b20436020020004101102a20001029410120002802081030103d000b4c01017f230041106b22022400200242808001370204200241f0b20436020020024100102a2002200141ff0171410647047f20024101102a20010541000b102a200020022802081030103d000ba20102057f017e230041306b2201240020014100360218200142808001370224200141f0b2043602204100200141206a2202101720012001290320370310200141086a200141106a220320012802281019200128020c2104200128020820012903102106200141003602282001200637032020002002101820012001290320370310200120032001280228101920042001280200200128020410081a200141306a24000b0d00200041f0b2042001100a000bf80102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320042002280208411f102420032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000bf60102037f017e230041d0006b22032400200341106a22052001102220032903102106200341003602282003200637032020022802002002280204200341206a2204102320022802082004101820032003290320370310200341086a20052003280228101920042003280208200328020c102520032001280200220520012802042001280208220241fc8704101020034100360248200320032903003703402004200341406b10182002200220032802486a22044b044041a08104411c418c88041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101920022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000bab3602107f017e230041a0036b220024000240024002400240102f41ff017141054604402000418080013602f80141f0b204200041f8016a2201100320004190016a20002802f80141f0b2044180800141d48604101420002000290390013703c801200041003602f801200041c8016a2001410410110d0220002802f80122094118762101200941107621022009410876210302400240024002400240024002400240200941ff0171220941076b0e020104000b2009411f460d0120094129460d05200941c800460d04200941e9004704402009418301460d03200941c40147200341ff017141e8004772200241ff017141de0147200141d4014772720d0a410721010c090b200341ff0171410847200241ff0171411947722001412647720d09410021010c080b200341ff017141c10047200241ff0171411b4772200141af0147720d08410121010c070b200341ff017141e00147200241ff01714181014772200141ef0047720d07410221010c060b200341ff017141b00147200241ff017141e40047722001411947720d06200041f8016a200041c8016a101b20002802f8010d0620004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410321010c050b200341ff0171410247200241ff017141e7004772200141c00047720d0520004188016a200041c8016a100e2000280288010d05200028028c012106410421010c040b200341ff017141cd0047200241ff017141ae0147720d04200141b101460d010c040b200341ff017141da0147200241ff017141ba0147722001410247720d03200041f8016a200041c8016a102b20002d00f8010d0320002000418c026a2902003703e002200020004191026a2900003700e50220004188026a280200210520004184026a280200210720004180026a280200210820002802fc01210620002f01fa01210420002d00f901210b410621010c020b200041f8016a200041c8016a101b20002802f8010d0220004188026a280200210520004184026a280200210720004180026a280200210820002802fc012106410521010c010b200041043a00f801200041f8016a1032000b200041a0016a200041e8026a290300370300200020002903e00237039801200041003602e8022000428080013702fc01200041f0b2043602f8014100200041f8016a22031017200020002903f8013703e00220004180016a200041e0026a2000280280021019200028028401210920002802800120002802e0022102200020002802e402220c3602f80120092002200310002103200041f8006a20002802f8012002200c41d4860410140240024002400240410c20032003410c4f1b0e0401000002000b20004184026a41013602002000418c026a4100360200200041e487043602800220004184ac0436028802200041003602f801200041f8016a41ec8704101e000b200028027c2102200020002802783602c801200020023602cc01200041f8016a200041c8016a102b20002d00f801450d0120004184026a41013602002000418c026a4100360200200041b88c04360280020c030b20004184026a41013602002000418c026a4100360200200041d88c04360280020c020b200041b0016a220220004182026a2203290100370300200041b8016a220a2000418a026a220c290100370300200041bf016a220d20004191026a220e290000370000200020002901fa013703a80120002d00f90121090240024002400240027f02400240024002400240024002400240024002400240024002400240200141016b0e0706050001020304070b200041c8016a102d20004190026a2202200041e0016a29030037030020004188026a200041d8016a29030037030020004180026a200041d0016a290300370300200020002903c8013703f801200041e0026a200041f8016a101620002802e40222010440200020002d00e3023a00eb01200020002f00e1023b00e901200020002802e80222043602f001200020013602ec01200020002d00e0023a00e80120004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200041a0026a4200370300200041a8026a4200370300200020093a00f801200020002903a8013700f901200041003602b802200042003703980220002006ad42208642cbfdefe70e843703b00220004100360288032000428080013702e402200041f0b2043602e002200041f8016a200041e0026a22021018200020002903e00237038003200041e0006a20004180036a220320002802e80210192000280260210b200029038003211020004100360298032000201037039003200042003703e802200042003703e00220004190036a200241101024200020002903900337038003200041d8006a200320002802980310192000280258210a2000290380032110200041003602e802200020103703e0022002200041b0026a41041024200620021017200020002903e00237038003200041d0006a200320002802e80210192000280254210c2000280250210d20002802800321032000200028028403220e3602e0024100200b4200200a200d200c2003200210022102200041c8006a20002802e0022003200e41d486041014410c20022002410c4f1b2202410d710d08200028024c2102200020002802483602e002200020023602e402200041406b200041e0026a100d02400240024020002d00404101710d000240024020002d00410e020001020b200041306a200041e0026a100d20002d00304101710d014102210320002d0031220241024f0d0120020d030c140b200041386a200041e0026a100d20002d00384101710d0020002d00394101460d010b410021010c110b2000410136028003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410536029403200020004190036a3602f002200020004180036a36029003200041e0026a41d88504101e000b20044104742103024003402003450d01200341106b21032001280200200141106a21012006470d000b410421030c110b200041f8016a200720051038024020002802fc01450d002000280280024111490d00410521030c110b20004184026a200536020020004180026a22012007360200200020083602fc01200020063602f801200041e8016a200041f8016a2202101c20004190026a2203200041e0016a220429030037030020004188026a2205200041d8016a22072903003703002001200041d0016a2208290300370300200020002903c8013703f801200220002802ec0120002802f001101f200320042903003703002005200729030037030020012008290300370300200020002903c8013703f80120002006360298022000428080013702e402200041f0b2043602e002200041e0026a220241021027200041d8026a2206200041e8026a2204280200360200200020002903e0023703d00220004180036a2205200041d0026a1022200029038003211041002101200041003602e802200020103703e0024184ac04410020021023200241928a04411a1024200020002903e00237038003200041286a200520002802e802101920022000280228200028022c1025200041206a20002802d002220520002802d4022006280200220641fc8704101020004100360298032000200029032037039003200220004190036a1018200620062000280298036a22024b0d09200041c8026a2002360200200020053602d002200020002903d0023703c0022000412136029403200041ac8a04360290032000200041f8016a22023602980320004180036a2205200041c0026a20004190036a2207103f200041e0026a22062005104020004198036a2004280200360200200020002903e002221037039003200041f0026a280200210420002802ec02200041003602e802200020103703e00220022006101820002802980220061017200020002903e00237039003200041186a200720002802e802101920042000280218200028021c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c410621030c120b410121030c100b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc0122024504404101210341010c010b200041c8016a20002802d0012205101a20002802c801220420002802d0012201490d092005410474210820002802cc01210702402005452001200446720d00200220086a210b200720014104746a2103200041f8016a410472210a200120046b41016a2104200221010340200020012802003602f801200a200141086a2802002001410c6a2802001038200341086a20004180026a290300370200200320002903f8013702002004450d01200441016a2104200341106a2103200141106a2201200b470d000b0b024020050440200720086a210441002101410021030340200120076a22082802002006460d02200141106a2101200341016a2103200841106a2004470d000b0b4103210341010c010b200320054f0d0a200541047420016b41106b21030240200120026a2201200141106a22044d044003402003450d02200120042d00003a0000200441016a2104200141016a2101200341016b21030c000b000b200441016b2104200141016b210103402003450d01200120036a200320046a2d00003a0000200341016b21030c000b000b20004190026a2203200041f8026a220129030037030020004188026a2207200041f0026a220829030037030020004180026a220b200041e8026a220a290300370300200020002903e0023703f801200041f8016a22042002200541016b101f2003200129030037030020072008290300370300200b200a290300370300200020002903e0023703f80120002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014101102720004198036a2202200041d0016a2205280200360200200020002903c8013703900320004190036a220741b88b04102120004188036a2002280200360200200020002903900337038003200120004180036a104020022005280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c801200420011018200620011017200020002903c80137039003200041e8006a200720002802d001101920022000280268200028026c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002003200041bf016a290000370000200020093a00f801200020002903a8013700f9012004103c4106210341000b2003103b000b200041e0026a102d20004190026a200041f8026a29030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc01220a450440410121040c0b0b20002802d001210b200041c8016a200720051038200041f8016a20002802cc0120002802d0011038024020002802fc01450d002000280280024111490d00410521040c0b0b41032104200b450d0a200b410474210c4100210141002103034020062001200a6a2202280200470440200341016a2103200141106a2201200c470d010c0c0b0b200241086a2802001a20022006360200200241046a20002903c8013702002002410c6a200041d0016a220228020036020020004190026a2204200041f8026a220129030037030020004188026a220c200041f0026a220d29030037030020004180026a220e200041e8026a220f290300370300200020002903e0023703f801200041f8016a2203200a200b101f20042001290300370300200c200d290300370300200e200f290300370300200020002903e0023703f801200020053602a402200020073602a0022000200836029c0220002006360298022000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a22062002280200360200200020002903c8013703900320004190036a220541ec8a0410212002200628020036020020002000290390033703c8012000412336029403200041f88a0436029003200020033602980320004180036a220720012005103f20012007104020062002280200360200200020002903c801221037039003200041d8016a280200210220002802d401200041003602d001200020103703c8012003200110182000280298022001101720002802a00220002802a40220011034200020002903c80137039003200041f0006a200520002802d0011019200220002802702000280274100720002802a0021a20004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002004200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c4106210441000c0b0b20004190026a200029009d0137000020002005360087022000200736008302200020083600ff01200020063600fb01200020043b00f9012000200b3a00f801200020002903980137008b02230041306b22012400200141286a200041f8016a220241186a290000370300200141206a200241106a290000370300200141186a200241086a290000370300200120022900003703102001200141106a101620012802002106200041e0026a220320012802084100200128020422021b36020820032002410420021b36020420032006410020021b360200200141306a240020002802e402210220002802e8022100230041106b22012400200142808001370204200141f0b20436020002402002044020014100102a20022000200110200c010b20014101102a200110290b0c110b230041d0006b220124002001102d200141c8006a200141186a290300370300200141406b200141106a290300370300200141386a200141086a29030037030020012001290300370330200141206a200141306a101620012802242100200141d0006a2400230041106b22012400200142808001370204200141f0b204360200230041106b2202240020014100102a200220004100473a000f20012002410f6a41011024200241106a24000c100b200041e0026a102d20004190026a2206200041f8026a220429030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a1016027f20002802cc012205044020004194026a20042903003702002000418c026a200041f0026a220729030037020020004184026a200041e8026a2208290300370200200020002903e0023702fc01200041bc81043602f80120004100360298032000428080013702cc01200041f0b2043602c80141eee7a015200041c8016a22011017200041f8016a220241047220011018200020002903c80137039003200041106a20004190036a220320002802d00110192000280210200028021410091a2006200429030037030020004188026a200729030037030020004180026a2008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c80120014102102720004198036a2204200041d0016a2207280200360200200020002903c801370390032001200341e08904103e2000412636029403200041ec890436029003200020023602980320004180036a220820012003103f20012008104020042007280200360200200020002903c801221037039003200041d8016a280200210420002802d401200041003602d001200020103703c801200220011018200020002903c80137039003200041086a200320002802d001101920042000280208200028020c100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002006200041bf016a290000370000200020093a00f801200020002903a8013700f9012002103c41060c010b41010b21012005452001103b000b200041e0026a102d20004190026a2202200041f8026a220129030037030020004188026a200041f0026a29030037030020004180026a200041e8026a290300370300200020002903e0023703f801200041c8016a200041f8016a101620002802cc0122040440410021010c060b2002200129030037030020004188026a2206200041f0026a220529030037030020004180026a2207200041e8026a2208290300370300200020002903e0023703f801200041f8016a220341044100101f200220012903003703002006200529030037030020072008290300370300200020002903e0023703f8012000428080013702cc01200041f0b2043602c801200041c8016a22014102102720004198036a2205200041d0016a2207280200360200200020002903c80137039003200120004190036a2206418c8904103e200041263602940320004198890436029003200020033602980320004180036a220820012006103f20012008104020052007280200360200200020002903c801221037039003200041d8016a280200210520002802d401200041003602d001200020103703c801200320011018200020002903c801370390032000200620002802d0011019200520002802002000280204100720004181026a200041b0016a29030037000020004189026a200041b8016a2903003700002002200041bf016a290000370000200020093a00f801200020002903a8013700f9012003103c410621010c050b20032002290300370100200c200a290300370100200e200d290000370000200020093a00f901200020002903a8013701fa01200041003a00f801230041106b22012400200142808001370204200141f0b2043602000240200041f8016a22022d000045044020014100102a200241016a200110180c010b20014101102a200110290b0c0d0b200241b0b2046a2d000021010c060b41a08104411c418c88041013000b41808004412141a484041013000b230041306b220124002001200536020420012003360200200141146a41033602002001411c6a41023602002001412c6a4106360200200141b8930436021020014100360208200141063602242001200141206a3602182001200141046a36022820012001360220200141086a41dc8804101e000b20044100472001103b000b41010b2004103b000b200020013a008003200041ec026a4101360200200041f4026a4101360200200041d484043602e802200041003602e0022000410136029403200020004190036a3602f002200020004180036a36029003200041e0026a41c88504101e000b4101210120020d010b410121010b20012003103b000b103a000b20004184ac0436028802200041003602f801200041f8016a41808c04101e000b410020012802081030103d000b1800200128020041e5af044111200128020428020c1100000bdf0202047f027e230041e0006b220024000240102f41ff01712201410546044020004180800136023841f0b204200041386a22011003200041086a200028023841f0b2044180800141d48604101420002000290308370330200041003602380240200041306a2001410410110d002000280238419bddf6f405470d00200041386a200041306a102b20002d0038450d020b103a000b200020013a0038200041386a1032000b200041276a2201200041d1006a290000370000200041206a2202200041ca006a290100370300200041186a200041c2006a29010022043703002000200029013a220537031020002d00392103200041c1006a2004370000200041c9006a2002290300370000200041d0006a2001290000370000200020033a003820002005370039200041386a103c230041106b22002400200042808001370204200041f0b20436020020004100102a20004100102a410020002802081030103d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41e08c04200241086a1045200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1100000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1100000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a105c20032003290310370320200341086a2005200141046a105c20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1100000d010b41000c010b41010b200341406b24000b0f00200028020020012002104741000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a200020032002104a2004280208200428020c104b200028020821030b200028020420036a20012002100b1a2003200220036a22014b044041808d04411c41e093041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10470c020b230041106b22042400200441086a200020034101104a2004280208200428020c104b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41808d04411c41d093041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1044200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103720042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41a08d04412141d48e041013000b1f00024020014181808080784704402001450d0120001036000b0f0b1035000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041e8b204280200220220056a22042002490d0241ecb2042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341ecb2042004360200200220056a22042002490d030b41e8b2042004360200200221030c020b41b0ab04411c4194ab041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db96046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db96046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db96046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db96046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ac04210420024184ac044184ac04105320026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410560d02200341106a2001200920026b4101105720032802142202418080c400460d022003280210200520082006200a28020c1100000d0220022005200a10580d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410560d01200220082006200128020c11000021000c010b41012100200341086a2001200920026b41011057200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410560d00200220082006200128020c1100000d00200520022001105821000b200341406b240020000f0b41f09304411c41a499041013000b4190940441214180a9041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041031000b200541086a2003200220011052200528020c21012000200528020836020020002001360204200541106a24000b1400200020012002200341f8b0044190940410690ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010542206200020016a22082004417c716a200441037110546a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809d041055200328020c21052003280208210820032003280200200328020422002000417c7141909e041055200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09304411c4198a0041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09304411c41c8a0041013000b41f09304411c41a8a0041013000b41f09304411c41b8a0041013000b41f09304411c4188a0041013000b20012002105421020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09304411c41f0a8041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acac04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1100000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09304411c41b499041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021052200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11000021000c020b41f09304411c41d8a1041013000b200b450440200128020020032004200128020428020c11000021000c010b2001410c6a2802002200200320046a2003105322024b0440200941086a2001200020026b4100105741012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1100000d01200220052001105821000c010b200128020020032004200128020428020c11000021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044108470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1045200341206a24000bda08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274105f0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89a041059200341c8006a200420032802502003280254106020032802484101470d02200328024c21010c050b200341306a20042001200010602003280234210120032802300c050b41909404412141a8a7041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89a041051200341386a2004200328024020032802441060410020032802384101470d011a2002200328023c6a220120024f0d0041f09304411c41889b041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002105f20032802282202450d05200328022c2100200341206a20032802782009410441d8a704105920022000200328022020032802241061450d05200341186a200328026020032802702200200c106220032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09304411c41d89a041013000b41f09304411c41b8a7041013000b41f09304411c41c8a7041013000b41f09304411c41e89a041013000b200341106a2003280268200328026c20032802702003280274105f20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a2004200120032802681062200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d495044104200628020c110000450d010c020b41909404412141e8a1041013000b2003410a36028c0120082002047f200320002002200241016b41a09e0410512003418c016a41012003280200200328020410610541000b3a0000200720002002200628020c110000450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011052200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b4d01017f2001200346047f027f034041002001450d011a200141016b210120022d0000210320002d00002104200041016a2100200241016a210220032004460d000b200420036b0b0541010b450b1400200020012002200341fca2044190940410690b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1045200241206a24000b0b0020002802002001105a0b1800200128020041acb2044105200128020428020c1100000b990301037f230041406a22022400200028020021034101210002402001280200220441a09504410c200141046a280200220128020c1100000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0950436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a105d450d010c020b20032802002200200328020428020c11090042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b09504360230200241003602282002410a3602142002200241106a36023820022002410c6a36021020042001200241286a105d0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4106360200200241346a4106360200200241f894043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a105d21000b200241406b240020000b1400200020012002200341ccab0441e0ab0410690b1400200020012002200341f8b0044190b10410690b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41063602002004200336021020044100360208200441063602242004200441206a3602182004200441046a36022820042004360220200441086a2002101e000b0b9d320700418080040bf50c617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77ee33a8024661696c656420746f206765742076616c756520696e204d617070696e673a20c0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e7273e8000100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000600101006d0000009d00000011000000600101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b000000010000000100000001000000100901007f000000c30800001100000043726f73732d636f6e74726163742063616c6c206661696c656420776974682034020100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f63616c6c2f63616c6c5f6275696c6465722e72730000005c0201006900000078000000110000005c020100690000007b000000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300e80201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000600101006d0000006b0100000e000000600101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72c80301001c000000600101006d000000ed00000017000000601601006e000000c100000037000000601601006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f74797065732e727300001c0401003e000000330000001900000041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465640004160100000000006c04010041646472657373426f6f6b3a3a41646472657373426f6f6b437265617465643a3a6f776e657241646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665640000000416010000000000be04010041646472657373426f6f6b3a3a41646472657373426f6f6b52656d6f7665643a3a6f776e657241646472657373426f6f6b3a3a4964656e74697479416464656441646472657373426f6f6b3a3a4964656e7469747941646465643a3a6f776e657241646472657373426f6f6b3a3a4e69636b4e616d655570646174656400000004160100000000004d05010041646472657373426f6f6b3a3a4e69636b4e616d65557064617465643a3a6f776e657241646472657373426f6f6b3a3a4964656e7469747952656d6f7665640004160100000000009b0501002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f616464726573735f626f6f6b2f6c69622e7273c40501003c0000002e00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e74727900100601002700000073746f7261676520656e7472792077617320656d7074790040060100170000000b00000004000000040000000c0000000d0000000e0041808d040ba418617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000b00000000000000010000000f0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300d40601007f0000008a0100001c0000006361706163697479206f766572666c6f770000006407010011000000d40601007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564000d08010015000000220801000d000000900701007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000830801007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732072656d6f76616c20696e646578202869732000a5090100120000008f09010016000000310a010001000000100901007f000000300700000d000000100901007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320a010020000000520a0100120000003a0000000416010000000000740a010001000000740a0100010000000b00000000000000010000001000000070616e69636b65642061742027272c20ac0a010001000000ad0a0100030000003a2000000416010000000000c00a010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230c01007e0000005d0500000d000000230c01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40c0100830000004e0000002f000000c40c0100830000005a0000001f000000c40c0100830000006300000009000000c40c0100830000006800000027000000c40c010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980d010012000000aa0d01002200000072616e676520656e6420696e64657820dc0d010010000000aa0d0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0d010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900e010080000000fe0300002f000000900e010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028300f010015000000450f01002b000000310a0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273880f0100800000004700000015000000880f0100800000005400000011000000880f0100800000005a00000009000000880f0100800000006400000011000000880f010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581001007f0000009100000011000000581001007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f810010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c11010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a5040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a6040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002413010082000000a1010000470000002413010082000000b4010000200000002413010082000000b4010000110000002413010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8130100880000009500000001000000dd0a01007e000000cd0100000500000004160100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010150100830000002f010000180041b0ab040b51617474656d707420746f206164642077697468206f766572666c6f77f617010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ac040bf504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04160100000000004f160100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601601006e0000005a0000001c000000601601006e0000005a00000009000000601601006e0000005a00000031000000601601006e0000006500000009000000601601006e000000830000001a000000601601006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f6465436f756c644e6f7452656164496e7075742f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e7273f6170100820000008201000047004190b1040bd701617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000b118010068000000770000000e0000004572726f7201020304050607080a0b0c09000000190000001c000000160000001400000019000000f7140100db140100c5140100b1140100981401","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"address_book","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[{"label":"identity_contract","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":["Constructor","Instantiate with the address of \`Identity\` contract."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":18},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":21},"hash":{"displayName":["Hash"],"type":19},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":20}},"events":[{"args":[{"docs":[" The owner of the newly created address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookCreated"},{"args":[{"docs":[" The owner of the removed address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"AddressBookRemoved"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity added to the address book."],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityAdded"},{"args":[{"docs":[" The owner of the address book."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The identity that received a new nickname."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The new nickname."],"indexed":false,"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"docs":[],"label":"NickNameUpdated"},{"args":[{"docs":[],"indexed":false,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[],"indexed":false,"label":"identity","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[],"default":false,"docs":[" Returns the address of the identity contract."],"label":"identity_contract","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":11},"selector":"0x69081926"},{"args":[],"default":false,"docs":[" Creates an address book for the caller."],"label":"create_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x07411baf"},{"args":[],"default":false,"docs":[" Removes the address book of the caller."],"label":"remove_address_book","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x1fe0816f"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Adds an identity to the user's address book."],"label":"add_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x83b06419"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Removes an identity from the user's address book."],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x08026740"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_nickname","type":{"displayName":["Option"],"type":3}}],"default":false,"docs":[" Update nickname of an identity."],"label":"update_nickname","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":12},"selector":"0x484daeb1"},{"args":[{"label":"account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the identities stored in the address book of a user."],"label":"identities_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":15},"selector":"0x29daba02"},{"args":[],"default":false,"docs":[" Returns whether the user has created an address book or not"],"label":"has_address_book","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":16},"selector":"0xc468ded4"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x02a833ee","ty":0}},"name":"identities"}],"name":"AddressBookInfo"}},"root_key":"0x02a833ee"}},"name":"address_book_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"identity_contract"}],"name":"AddressBook"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":4}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":4}],"path":["Option"]}},{"id":4,"type":{"def":{"primitive":"str"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":7}}}},{"id":7,"type":{"def":{"primitive":"u8"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"variant":{"variants":[{"fields":[{"type":5}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":5},{"name":"E","type":10}],"path":["Result"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"fields":[{"type":13}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":13},{"name":"E","type":10}],"path":["Result"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":14}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":14}],"path":["Result"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AddressBookAlreadyCreated"},{"index":1,"name":"AddressBookDoesntExist"},{"index":2,"name":"IdentityDoesntExist"},{"index":3,"name":"IdentityNotAdded"},{"index":4,"name":"IdentityAlreadyAdded"},{"index":5,"name":"NickNameTooLong"}]}},"path":["address_book","Error"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":10}],"path":["Result"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"fields":[{"type":17}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":17},{"name":"E","type":10}],"path":["Result"]}},{"id":17,"type":{"def":{"primitive":"bool"}}},{"id":18,"type":{"def":{"primitive":"u128"}}},{"id":19,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":20,"type":{"def":{"primitive":"u64"}}},{"id":21,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contract-info/identity.ts b/types/contract-info/identity.ts new file mode 100644 index 0000000..f7c235b --- /dev/null +++ b/types/contract-info/identity.ts @@ -0,0 +1,2 @@ +export const ContractAbi = `{"source":{"hash":"0xee17bba51b46f56affec703536dcecd32824105ca8fb9bb2a86d11e7c93c99bc","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","build_info":{"build_mode":"Release","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; +export const ContractFile = `{"source":{"hash":"0x64d213e0b2204ed9b07671df375cb5eff055cf61c575f9ca8d4098d694574be9","language":"ink! 4.2.0","compiler":"rustc 1.68.0-nightly","wasm":"0x0061736d01000000014e0d60027f7f0060037f7f7f017f60027f7f017f60037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060047f7f7f7f017f60000060017f017f60017f017e6000017f60067f7f7f7f7f7f0002dd010b057365616c310b6765745f73746f726167650007057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300d64656275675f6d6573736167650002057365616c300f686173685f626c616b65325f3235360003057365616c300d6465706f7369745f6576656e740004057365616c320b7365745f73746f726167650007057365616c310d636c6561725f73746f726167650002057365616c300b7365616c5f72657475726e000303656e76066d656d6f72790201021003830181010101000000010601040306030000000000030002000000000005000000030003030503060500050000000305060b0002040008050000000005030903050200000303000900000503000003030308000003050000080003020802010103020204030205020a0604020206070407060202030101060407040202020204040c030404040501700110100608017f01418080040b0711020463616c6c005e066465706c6f7900620919010041010b0f1d7978476b84016d810182016c65676883016e0aabef0181012b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b9f0201037f230041206b22022400200241086a2001100d41012103024020022d00084101710d000240024002400240024020022d0009220441037141016b0e03030201000b200441fc01714102762101410021030c040b200441034b0d0320022001100e20022802000d03200228020422014180808080044921030c030b200220043a0015200241013a0014200220013602102002410036021c200241106a2002411c6a4104100f450d010c020b200220043a0015200241013a001420022001360210200241003b011c200241106a2002411c6a4102100f0d0120022f011c220441ff014d0d0120044102762101410021030c010b200228021c220141808004492103200141027621010b2000200136020420002003360200200241206a24000b3f01027f230041106b22022400200241003a000f200020012002410f6a410110112201047f41000520022d000f0b3a0001200020013a0000200241106a24000b4801027f230041106b220224002002410036020c024020012002410c6a41041011450440200228020c21010c010b410121030b2000200136020420002003360200200241106a24000b6601027f230041106b2203240020002f01042104200041003a0004027f20044101710440200120044108763a00002000280200200341086a200120024101418c810410102003280208200328020c10110c010b20002802002001200210110b200341106a24000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011012200528020c21012000200528020836020020002001360204200541106a24000b6201047f230041106b22032400200028020422042002492205450440200341086a4100200220002802002206108601200120022003280208200328020c418cb404102d2003200220042006108601200020032903003702000b200341106a240020050b1500200020012002200341ccad04418080041087010b5001017f230041206b220324002003410c6a4101360200200341146a410036020020034184ae04360210200341003602002003200136021c200320003602182003200341186a36020820032002101c000b4b01017f230041106b22052400200120034d0440200541086a4100200120021012200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000b0f0020002001200241ec9d041089010bb70101067f230041206b220324000240024020012802002202200128020422044904402004200220022004491b2106200341086a410472210503402001200241016a220436020020052002101720032d001822074102470d02200422022006470d000b0b200041023a00100c010b200020032f00193b001120002005290200370204200041136a2003411b6a2d00003a00002000410c6a200541086a280200360200200020073a0010200020023602000b200341206a24000bfc0301067f230041e0006b220224002002410036023820024280800137024c200241d4b40436024841f7e698f407200241c8006a2205101920012005101920022002290348370330200241106a200241306a2002280250101b2002280214210320022802102002280230210120022002280234220736024820032001200510002103200241086a20022802482001200741b0860410140240024002400240410c20032003410c4f1b0e0401000002000b200241d4006a4101360200200241dc006a4100360200200241c0870436025020024184ae0436025820024100360248200241c8006a41c88704101c000b200228020821012002200228020c36024420022001360240200241c8006a200241406b101e20022d0054220141024704402002411e6a200241d7006a2d00003a000020022002290049370320200220022f00553b011c2002200241d0006a28000036002720022d004821040c020b200241003a0020200241d4006a4101360200200241dc006a410136020020024190820436025020024100360248200241013602342002200241306a3602582002200241206a360230200241c8006a41808304101c000b410221010b200020043a000020002002290320370001200020013a000c200020022f011c3b000d200041086a20022800273600002000410f6a2002411e6a2d00003a0000200241e0006a24000be00301067f230041f0006b220224002002413c6a200141186a290000370200200241346a200141106a2900003702002002412c6a200141086a290000370200200241dc8104360220200220012900003702242002410036025020024280800137025c200241d4b40436025841b1d9d9e607200241d8006a22051019200241206a4104722005101a20022002290358370348200241186a200241c8006a2002280260101b200228021c21032002280218200228024821012002200228024c220736025820032001200510002103200241106a20022802582001200741b08604101402402000027f024002400240410c20032003410c4f1b0e0402000001000b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b41000c010b20022802142101200220022802103602582002200136025c200241086a200241d8006a100e20022802080d0141012104200228020c0b36020420002004360200200241f0006a24000f0b200241003a0057200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241d7006a360248200241d8006a41808304101c000b2601017f230041106b220224002002200036020c20012002410c6a41041034200241106a24000b0a0020012000412010340b4501017f2002200128020422034b044041acae04412341a0b0041013000b2001200320026b36020420012001280200220120026a36020020002002360204200020013602000be10201017f230041206b22022400200241013a0018200220013602142002200036021020024190970436020c20024184ae04360208230041406a220124002001200241086a36020c2001410636022420012001410c6a360220410021004104210202400240024002400240034020002000200241d0ae046a2802006a22004b0d01200241086a22024114470d000b2001200041104f047f200020006a22024100200020024d1b0541000b104c20014100360218200120012903003703102001410136023c20014102360234200141d0ae04360230200141003602282001200141206a360238200141106a200141286a10630d0141d4b4052d000045044041d5b4052d00004101710d050b410c20012802142001280218100422002000410c4f1b4109470d020c030b41c08f04411c41f0aa041013000b419093044133200141286a4184900441c094041036000b41d4b40541013a00000b41d5b40541013a00000b000bb60401047f230041106b220224000240024002400240024002400240024002400240024002400240024020002d000041016b0e0c0102030405060708090a0b0c000b410121002001280200220341dfb10441062001280204220528020c22041101000d0c024020012d0018410471450440200341dc9704410120041101000d0e2003419cb40441052004110100450d010c0e0b200341da9704410220041101000d0d2002200536020420022003360200200241013a000f20022002410f6a3602082002419cb4044105107c0d0d200241d897044102107c0d0d0b200341b196044101200411010021000c0c0b200128020041d2b104410d200128020428020c11010021000c0b0b200128020041c4b104410e200128020428020c11010021000c0a0b200128020041b9b104410b200128020428020c11010021000c090b2001280200419fb104411a200128020428020c11010021000c080b20012802004191b104410e200128020428020c11010021000c070b20012802004181b1044110200128020428020c11010021000c060b200128020041f5b004410c200128020428020c11010021000c050b200128020041eab004410b200128020428020c11010021000c040b200128020041e3b0044107200128020428020c11010021000c030b200128020041d4b004410f200128020428020c11010021000c020b200128020041c3b0044111200128020428020c11010021000c010b200128020041b0b0044113200128020428020c11010021000b200241106a240020000b6c02027f017e230041106b2202240020022001104e02402002280204044020022902042104200228020021032001104d41ff017122014102470440200020013a000c20002004370204200020033602000c020b200041023a000c0c010b200041023a000c0b200241106a24000b9f0401067f230041f0006b220224002002410036022820024280800137025c200241d4b40436025841bbc0f9ea07200241d8006a2205101920012005101920022002290358370320200241186a200241206a2002280260101b200228021c210320022802182002280220210120022002280224220736025820032001200510002103200241106a20022802582001200741b086041014024002400240410c20032003410c4f1b0e0400020201020b200228021421012002200228021036023020022001360234200241086a200241306a100c024020022802080d00200241386a20022802344104762203200228020c2201200120034b1b10200240200104400340200241d8006a200241306a102120022802602203450d02200220022802643602542002200336025020022002290358370348200241386a200241c8006a1022200141016b22010d000b0b200228023c2204450d0120022802402101200228023821030c020b200241386a10230b200241003a0038200241e4006a4101360200200241ec006a4101360200200241908204360260200241003602582002410136024c2002200241c8006a3602682002200241386a360248200241d8006a41808304101c000b200020013602082000200436020420002003360200200241f0006a24000f0b200241e4006a4101360200200241ec006a4100360200200241c0870436026020024184ae0436026820024100360258200241d8006a41c88704101c000b7101037f230041106b220224000240024002402001450440410421030c010b200241086a20011041200228020c2203450d01200228020822044100480d012004200310392203450d020b200041003602082000200336020420002001360200200241106a24000f0b103c000b2004103d000b7401027f230041206b22022400200241086a2001100e02402002280208450440200228020c2103200241106a200110332002280214044020002003360200200020022903103702042000410c6a200241186a2802003602000c020b200041003602080c010b200041003602080b200241206a24000b6501027f200028020822022000280200460440200020021049200028020821020b200028020420024104746a22032001290200370200200341086a200141086a290200370200200241016a220145044041a08104411c41d095041013000b200020013602080b11002000280200200041046a28020010400bac0102047f017e230041306b2202240020024100360218200242808001370224200241d4b40436022041f7e698f407200241206a2203101920002003101920022002290320370310200241086a200241106a22042002280228101b200228020c2100200228020820022903102106200241003602282002200637032020012003102520022002290320370310200220042002280228101b20002002280200200228020410071a200241306a24000b1f00200041046a280200200041086a2802002001104a200120002d000c10310b0c0041e081042000200110270ba80102037f017e230041306b2203240020034100360218200342808001370224200341d4b4043602202000200341206a2204104820012004101920032003290320370310200341086a200341106a22052003280228101b200328020c2100200328020820032903102106200341003602282003200637032020022004101a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000bfb0102047f017e230041e0006b22022400200241346a200041186a2900003702002002412c6a200041106a290000370200200241246a200041086a290000370200200241dc81043602182002200029000037021c20024100360248200242808001370254200241d4b40436025041b1d9d9e607200241d0006a22031019200241186a4104722003101a20022002290350370340200241106a200241406b22042002280258101b20022802142100200228021020022903402106200241003602582002200637035020012003101920022002290350370340200241086a20042002280258101b20002002280208200228020c10071a200241e0006a24000bae0102047f017e230041306b2203240020034100360218200342808001370224200341d4b40436022041bbc0f9ea07200341206a2204101920002004101920032003290320370310200341086a200341106a22052003280228101b200328020c21002003280208200329031021072003410036022820032007370320200120022004102a20032003290320370310200320052003280228101b20002003280200200328020410071a200341306a24000b430020012002102f20010440200020014104746a21010340200028020020021019200041086a2802002000410c6a2802002002104a200041106a22002001470d000b0b0bb20101017f230041d0006b22012400200141246a200041186a2900003702002001411c6a200041106a290000370200200141146a200041086a290000370200200141dc81043602082001200029000037020c20014100360238200142808001370244200141d4b40436024041b1d9d9e607200141406b22001019200141086a4104722000101a200120012903403703302001200141306a2001280248101b2001280200200128020410081a200141d0006a24000bcf0101077f230041306b2203240020004200370000200041186a22044200370000200041106a22054200370000200041086a220642003700000240200241214f0440200341286a22074200370300200341206a22084200370300200341186a220942003703002003420037031020012002200341106a1005200420072903003700002005200829030037000020062009290300370000200020032903103700000c010b200341086a2002200041204180840410142003280208200328020c2001200241908404102d0b200341306a24000b85010020012003460440200020022001100a1a0f0b230041306b220024002000200336020420002001360200200041146a41033602002000411c6a41023602002000412c6a4105360200200041f0a00436021020004100360208200041053602242000200041206a360218200020003602282000200041046a360220200041086a2004101c000b7701047f230041206b22012400200141086a2000280200220320002802042000280208220241d88704101020014100360218200120012903083703104102200141106a102f2002200220012802186a22044b044041a08104411c41e887041013000b2000200336020020002004360208200141206a24000b7401017f230041106b2202240002402000413f4d04402001200041027410310c010b200041ffff004d0440200220004102744101723b010e20012002410e6a410210340c010b200041ffffffff034d04402000410274410272200110190c010b2001410310312000200110190b200241106a24000b08002000410110310b3901027f20002802082202200028020422034904402000200241016a360208200028020020026a20013a00000f0b200220034180b0041060000b8a0101047f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a22054200370300200242003703002000027f200120024120101145044020002002290300370001200041196a2003290300370000200041116a2004290300370000200041096a200529030037000041000c010b41010b3a0000200241206a24000b7e01037f230041106b22022400200241086a2001100c024020022802084504400240200228020c220320012802044b0d0020022003104f20022802002104200120022802042201200310110d002000200336020820002001360204200020043602000c020b200041003602040c010b200041003602040b200241106a24000b7a01047f230041106b2203240002402000280208220520026a220420054f04402004200028020422064b0d01200341086a2005200420002802001085012003280208200328020c2001200241f0af04102d20002004360208200341106a24000f0b4190ae04411c41d0af041013000b2004200641e0af041015000ba70101017f230041306b2201240020014180800136020041d4b4042001100320014180800136022c200141d4b4043602282001200141286a103220012d00000440200141003a000041c0860441c100200141d48404418487041036000b20002001290102370001200041096a2001410a6a290100370000200041116a200141126a290100370000200041186a200141196a290000370000200020012d00013a0000200141306a24000b860101017f230041406a220524002005200136020c200520003602082005200336021420052002360210200541246a41023602002005412c6a41023602002005413c6a4102360200200541c4970436022020054100360218200541033602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004101c000b5502027f027e230041206b22002400200041106a22014200370300200042003703082000411036021c200041086a2000411c6a10012001290300210220002903082103200041206a2400410541042002200384501b0b0b002000200141141088010bbe0101027f200045044020010f0b02402000200020016a41016b410020016b7122014d0440024041ccb404280200220020016a22032000490d0041d0b4042802002003490440200141ffff036a22002001490d032000411076220240002200417f46200041ffff0371200047720d032000411074220020024110746a22032000490d034100210241d0b4042003360200200020016a22032000490d010b41ccb4042003360200200021020b20020f0b41b0ad04411c4194ad041013000b41000b890301077f230041106b220524002000027f0240027f02400240200204400240200141004e044020032802080d01200520012002106a2005280200210420052802040c050b200041086a41003602000c050b20032802042209450440200541086a20012002106a20052802082104200528020c0c040b200120026a41016b410020026b7122082001490d01200141ccb404280200220620086a22072006490d031a2003280200210a41d0b4042802002007490440200841ffff036a22032008490d032003411076220740002203417f46200341ffff0371200347720d032003411074220620074110746a22032006490d0341d0b40420033602002001200620086a22072006490d041a0b41ccb404200736020020012006450d031a2006200a2009100a210420010c030b20002001360204200041086a41003602000c030b41b0ad04411c4194ad041013000b20010b21072004044020002004360204200041086a200736020041000c020b20002001360204200041086a20023602000b41010b360200200541106a24000b1f00024020014181808080784704402001450d012000103d000b0f0b103c000b4601017f230041206b22002400200041146a41013602002000411c6a4100360200200041b8910436021020004184ae0436021820004100360208200041086a41c09104101c000b5f01017f230041306b220124002001200036020c2001411c6a4102360200200141246a4101360200200141f09204360218200141003602102001410536022c2001200141286a36022020012001410c6a360228200141106a41809304101c000b6401017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a101820002002290308370300200241306a24000b910101017f230041d0006b22022400200241086a41e081042001105a20022d00084102460440200220022d00093a002f2002413c6a4101360200200241c4006a4101360200200241908204360238200241003602302002410136024c2002200241c8006a36024020022002412f6a360248200241306a41808304101c000b2000200241086a4121100a1a200241d0006a24000b2000230041106b2201240020000440200141086a200010410b200141106a24000b0b002000200141101088010b0e002000280200200028020c10400b5201017e0240200241fcffffff0720016e4b0440410021010c010b2001ad2002ad7e22034220885004402003a72102410421010c010b41a08404412141c484041013000b20002001360204200020023602000b1b002000418180014f0440200041808001419487041015000b20000b0f0020002001200241cc9d041089010b5201017f230041206b220124002001410c6a4101360200200141146a410136020020014190ab04360208200141003602002001410436021c200120003602182001200141186a3602102001418c8e04101c000b910101017f230041306b22022400200241146a41013602002002411c6a410136020020024190ab043602102002410036020820024103360224200220002d0000410274220041a4b4046a28020036022c2002200041b8b4046a280200360228200141046a28020021002002200241206a3602182002200241286a36022020012802002000200241086a107b200241306a24000b0b002000280200200110190bf30101057f230041306b220224000240027f4100200141016a2201450d001a2000280200220320036a22042003490d01200241086a41042004200120012004491b2201200141044d1b22041041200228020c210120022802082105024020030440200041046a280200210620022003104120022006360220200220022903003702240c010b200241003602280b200241106a20052001200241206a103a20022802104504402002280214210120002004360200200041046a20013602004181808080780c010b20022802142101200241186a2802000b210320012003103b200241306a24000f0b41a084044121419491041013000b100020012002102f20022000200110340bed0101087f230041106b2206240020002002102020002802002205200028020822034f044002402002452003200546720d00200120024104746a2108200028020420034104746a2104200320056b41016a21030340200141086a280200210720012802002109200641086a2001410c6a2802002205104c2006280208210a200628020c20072005100a21072004410c6a2005360200200441086a2007360200200441046a200a360200200420093602002003450d01200341016a2103200441106a2104200141106a22012008470d000b0b20002002360208200641106a24000f0b41808004412141b485041013000b3501017f230041106b22022400200241086a2001104f200228020c21012000200228020836020020002001360204200241106a24000b4201027f230041106b22012400200141086a2000100d20012d0009210020012d00082102200141106a240041024101410220004101461b410020001b20024101711b0bc60501097f230041106b2205240020052001103302402005280204220404402005280200210a024020052802082203450d00200341076b22014100200120034d1b2108200441036a417c7120046b2109034002400240024002400240024002400240200220046a2d00002206411874411875220741004e0440200920026b4103712009417f46720d0220022008490d010c060b02400240200641a4a6046a2d000041026b0e03040100060b200241016a220120034f0d05200120046a2c000021010240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b200141004e720d0820014140490d020c080b200141f0006a41ff01714130490d010c070b2001418f7f4a0d060b200241026a220120034f0d05200120046a2c000041bf7f4a0d05200241036a220120034f0d05200120046a2c000041bf7f4c0d040c050b200241016a220120034f0d04200120046a2c00002101024002400240200641e001470440200641ed01460d012007411f6a41ff0171410c490d022007417e71416e47200141004e720d0820014140490d030c080b200141607141a07f460d020c070b200141a07f480d010c060b200141bf7f4a0d050b200241026a220120034f0d04200120046a2c000041bf7f4c0d030c040b0340200220046a2201280200200141046a28020072418081828478710d052002200241086a22014d04402008200122024d0d070c010b0b41f09504411c4194a6041013000b200241016a21020c050b200241016a220120034f0d01200120046a2c000041bf7f4a0d010b200141016a21020c030b200041003602040c060b200221010b200120034f0d0220012003200120034b1b21020340200120046a2c00004100480440200121020c020b2002200141016a2201470d000b0c020b20022003490d000b0b20002003360208200020043602042000200a3602000c010b200041003602040b200541106a24000b5b01027f230041106b2202240002402001450440410121030c010b200141004e0440200241086a20012001417f73411f76106a200228020822030d012001103d000b103c000b2000200336020420002001360200200241106a24000b851102047f017e230041b0016b22012400200141286a20004128100a1a024002400240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014280800137028401200141d4b4043602800120014180016a2202102e200141a8016a20014188016a28020036020020012001290380013703a001200141e0006a2200200141a0016a220441e088041051200141f0006a220320001052200129037021052001410036028801200120053703800141ec880441202002104a200141286a4104722002101a2001200129038001370370200141106a2003200128028801101b200220012802102001280214102c200141086a2001280260220320012802642001280268220041d887041010200141003602a801200120012903083703a00120022004101a2000200020012802a8016a22004b0d09200141d8006a2000360200200120033602602001200129036037035020014180016a200141d0006a10530c080b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341a4890410542001200141286a4104723602a801200141233602a401200141b089043602a001200141f0006a22022000200310552000200210530c070b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341ec890410562001200141286a4104723602a801200141253602a401200141f889043602a001200141f0006a22022000200310552000200210530c060b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341b88a0410562001200141286a4104723602a801200141253602a401200141c48a043602a001200141f0006a22022000200310552000200210530c050b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341848b0410512001200141286a4104723602a801200141263602a401200141908b043602a001200141f0006a22022000200310552000200210530c040b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341cc8b0410542001200141286a4104723602a801200141223602a401200141d88b043602a001200141f0006a22022000200310552000200210530c030b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341948c0410562001200141286a4104723602a801200141243602a401200141a08c043602a001200141f0006a22022000200310552000200210530c020b20014280800137028401200141d4b4043602800120014180016a2200102e200141a8016a20014188016a28020036020020012001290380013703a0012000200141a0016a220341dc8c0410562001200141286a4104723602a801200141243602a401200141e88c043602a001200141f0006a22022000200310552000200210530c010b20014280800137028401200141d4b4043602800120014180016a2202102e200141e8006a220020014188016a2802003602002001200129038001370360200141f0006a2203200141e0006a105220012903702105200141003602880120012005370380014184ae0441002002104a2002418c8d04411c10342001200129038001370370200141206a2003200128028801101b200220012802202001280224102c200141186a2001280260220320012802642000280200220041d887041010200141003602a801200120012903183703a0012002200141a0016a101a2000200020012802a8016a22004b0d02200141d8006a200036020020012003360260200120012903603703502001200141286a4104723602a801200141293602a401200141a88d043602a001200141f0006a2200200141d0006a200141a0016a105520014180016a200010530b200141a8016a20014188016a280200360200200120012903800122053703a00120014190016a2802002100200128028c01200141003602880120012005370380010240024002400240024002400240024002400240200128022841016b0e080102030405060708000b20014180016a220241001031200141286a4104722002101a200141cc006a280200200210190c080b20014180016a220241011031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c070b20014180016a220241021031200128022c20021019200141306a28020020021019200141386a2802002001413c6a2802002002104a0c060b20014180016a220241031031200128022c20021019200141306a280200200210190c050b20014180016a220241041031200128022c200210190c040b20014180016a220241051031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c030b20014180016a220241061031200128022c20021019200141346a280200200141386a2802002002104a20022001413c6a2d000010310c020b20014180016a220241071031200128022c200210190c010b20014180016a220241081031200128022c20021019200141306a2002101a0b20012001290380013703a0012001200141a0016a200128028801101b200020012802002001280204100620012802281a200141b0016a24000f0b41a08104411c41e887041013000b41a08104411c41e887041013000b0d002000200120024119108a010b5301037f230041106b2202240020012802082203200128020422044b0440200320044190b0041045000b200241086a2003200420012802001085012000200229030837020020004100360208200241106a24000b6502027f017e230041206b22022400200241186a2203410036020020022001290200370310200241086a200241106a200141086a280200101b20022903082104200041086a2003280200360200200020022903103702002000200437020c200241206a24000b0d002000200120024116108a010bf90102037f017e230041d0006b22032400200341106a22052001105220032903102106200341003602282003200637032020022802002002280204200341206a2204104a20022802082802002004101920032003290320370310200341086a20052003280228101b20042003280208200328020c102c20032001280200220520012802042001280208220241d88704101020034100360248200320032903003703402004200341406b101a2002200220032802486a22044b044041a08104411c41e887041013000b20012005360200200141086a22022004360200200041086a200228020036020020002001290200370200200341d0006a24000b0d002000200120024118108a010b3501017f230041106b22002400200042808001370204200041d4b40436020020004101103120001030410120002802081044105d000b4c01017f230041106b22022400200242808001370204200241d4b4043602002002410010312002200141ff0171410847047f20024101103120010541000b1031200020022802081044105d000b7301027f230041106b22022400200242808001370204200241d4b404360200024020012d00002203410247044020024100103120034504402002410010312001280204200210190c020b200241011031200220012d000110310c010b200241011031200210300b200020022802081044105d000beb0201047f230041d0006b2203240020034100360218200342808001370224200341d4b4043602202001200341206a2204104820022004101920032003290320370310200341086a200341106a2003280228101b200328020c210220032802082003280210210120032003280214220636022020022001200410002102200320032802202001200641b0860410140240024002400240410c20022002410c4f1b0e0402010100010b200041003a00000c020b2003412c6a4101360200200341346a4100360200200341c0870436022820034184ae0436023020034100360220200341206a41c88704101c000b200328020021012003200328020436024c20032001360248200341206a200341c8006a103220032d00200440200041023b00000c010b20002003290021370001200041196a200341396a290000370000200041116a200341316a290000370000200041096a200341296a290000370000200041013a00000b200341d0006a24000bb40102057f017e230041306b2201240020014100360218200142808001370224200141d4b4043602204100200141206a2202101920012001290320370310200141086a200141106a22032001280228101b200128020c2104200128020820012903102106200141003602282001200637032020002802202002101920002002101a20002802242002101920012001290320370310200120032001280228101b20042001280200200128020410071a200141306a24000b6601017f230041306b2202240020024100360218200242808001370224200241d4b4043602202000200241206a2200104820012000101920022002290320370310200241086a200241106a2002280228101b2002280208200228020c10081a200241306a24000b0d00200041d4b40420011009000b854702127f037e230041b0036b22002400024002400240024002400240024002400240024002400240024002400240027f0240103741ff017141054604402000418080013602880341d4b40420004188036a22011002200041d0016a20002802880341d4b4044180800141b086041014200020002903d0013703d8022000410036028803200041d8026a2001410410110d0e200028028803220741187621042007411076210120074108762106027f02400240024002400240024002400240200741ff0171220741106b0e050317171701000b0240024002400240024002400240024002400240024020074197016b0e03092101000b0240200741cf016b0e050a2121210c000b20074108460d072007413d460d02200741d200460d03200741f100460d012007418901460d05200741bd01460d04200741cb01470440200741dc01460d07200741fb0147200641ff01714189014772200141ff0171413647200441e4004772720d2141060c120b200641ff017141fe0147200141ff017141fb014772200441ec0147720d20200041f8006a200041d8026a100e20002802780d20200028027c2202410876210341000c110b200641ff017141f20047200141ff0171410c47722004411e47720d1f20004180016a200041d8026a100e2000280280010d1f2000280284012202410876210341010c100b200641ff01712202413c460d0e200241cc0147200141ff017141f90047722004418d0147720d1e20004188036a200041d8026a10212000280290032208450d1e2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241070c0f0b200641ff017141ff0147200141ff017141c60147722004411c47720d1d20004188016a200041d8026a100e2000280288010d1d200028028c012202410876210341030c0e0b200641ff017141d50047200141ff017141054772200441e40147720d1c20004198016a200041d8026a100e2000280298010d1c200028029c01210220004190016a200041d8026a100e2000280290010d1c20002802940121042002410876210341040c0d0b200641ff017141dd0047200141ff017141df014772200441cd0147720d1b41050c0c0b200641ff0171412f47200141ff017141f5004772200441e40147720d1a20004188036a200041d8026a10212000280290032208450d1a2000280294032209410876210a20002f00890320002d008b03411074722103200028028c03210420002d008803210241080c0b0b200641ff017141a70147200141ff017141a60147722004410f47720d19200041a0016a200041d8026a100e20002802a0010d1920002802a4012202410876210341090c0a0b200641ff0171410247200141ff017141e7004772200441c00047720d18410a0c090b200641ff017141a30147200141ff017141ee0147722004410947720d1720004188036a200041d8026a101e20002d00940322094102460d1720002f00890320002d008b0341107472210320002f00950320004197036a2d000041107472210a2000280290032108200028028c03210420002d0088032102410b0c080b200641ff017141be0147200141ff0171418b014772200441cc0147720d16200041b8016a200041d8026a100e20002802b8010d1620002802bc012102200041b0016a200041d8026a100d20002d00b0014101710d1620002d00b1010e020504160b200641ff017141b10147200141ff017141fd004772200441be0147720d15200041c0016a200041d8026a100e20002802c0010d1520002802c40122024108762103410d0c060b200641ff017141b90147200141ff0171413447720d1420044103460d010c140b200641ff017141fe0047200141ff017141334772200441ea0147720d13200041c8016a200041d8026a100e20002802c8010d1320002802cc01210220004188036a200041d8026a103220002d0088030d13200041f8016a2000419e036a290100370300200041ff016a200041a5036a280000360000200020004196036a2901003703f0012002410876210320004191036a2800002209410876210a20004195036a2d00002105200028008d0321082000280089032104410f0c040b20004188036a200041d8026a103220002d0088030d12200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c410e0c030b20004188036a200041d8026a104e200028028c032208450d11200028029003210920002802880321040b200041a8016a200041d8026a100d20002d00a8014101710d10410221050240024020002d00a9010e020100120b200041d8026a104d41ff017122014102460d11200141017121050b2009410876210a20024108762103410c0c010b200141ff017141a201472004413247720d0f20004188036a200041d8026a103220002d0088030d0f200041f8016a200041a5036a28000036020020002000419d036a2900003703f001200028028c032202410876210320004198036a2802002209410876210a2000419c036a2d0000210520004194036a280200210820004190036a280200210420002f018a03210b20002d008903210c41020b210f200041e7016a200041ff016a280000360000200041e0016a200041f8016a290300370300200020002903f0013703d801200041003602c00220004280800137028c03200041d4b40436028803410020004188036a2206101920002000290388033703b802200041f0006a200041b8026a200028029003101b20002802742107200028027020002802b8022101200020002802bc02220e3602880320072001200610002106200041e8006a2000280288032001200e41b0860410140240024002400240410c20062006410c4f1b0e0400030301030b200028026c210120002000280268360298022000200136029c02200041e0006a20004198026a100e024020002802600d002000280264210120004188036a20004198026a103220002d0088030d00200041e0026a220d20004192036a290100370300200041e8026a220e2000419a036a290100370300200041ef026a2210200041a1036a2900003700002000200029018a033703d80220002d0089032111200041d8006a20004198026a100e2000280258450d020b20004194036a41013602002000419c036a4100360200200041c48e04360290030c120b20004194036a41013602002000419c036a4100360200200041e48e04360290030c110b200941ff0171200a410874722107200241ff01712003410874722106200028025c210220004188026a201029000037000020004181026a200e290300370000200041f9016a200d290300370000200020002903d8023700f1012000200136029002200020113a00f0012000200236029402024002400240024002400240024002400240200f41016b0e0f010203040d0e050607111615141312000b200041d8026a2006101f20004194036a200041e0026a280200360200200020002903d80237028c032000410036028803230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a28020022054504402001410010310c020b20014101103120052002410c6a2802002001102a0c010b200141011031200110300b0c1a0b200041d8026a22022006103f20004188036a220141017220024121100a1a200041003a008803230041106b22022400200242808001370204200241d4b404360200024020012d000045044020024100103120012d00014504402002410010310c020b200241011031200141026a2002101a0c010b200241011031200210300b410020022802081044105d000b200041a4036a200041e0016a280200360200200020053a009b03200020073600970320002008360093032000200436008f032000200636008b032000200b3b0089032000200c3a008803200020002903d80137029c03230041306b22012400200141286a20004188036a220241186a290000370300200141206a200241106a290000370300200141186a200241086a29000037030020012002290000370310200141086a200141106a103e200041086a2001290308370300200141306a240020002802082102200028020c2105230041106b22012400200142808001370204200141d4b404360200200141001031024020024504402001410010310c010b2001410110312005200110190b0c180b200041d8026a2006101720004190036a200041e0026a290300370300200020002903d80237038803230041106b22012400200142808001370204200141d4b404360200024020004188036a22022d000c22054103470440200141001031200541024604402001410010310c020b2001410110312002200110250c010b200141011031200110300b0c170b20004188036a2006101f200028028c032201450d062000280290032102200020002802880336028803200020013602940320002001200241047422056a220636029003027f0240027f02402002044020004188036a410472210303402000200128020822023602d8022002450d02200420012902002212a7460d04200141106a2101200541106b22050d000b0b2000200636028c03200041d8026a210341000c010b200141106a0b210120032001360200410021024100210441030c010b2000200141106a36028c032012422888a72104200128020c21012012422088a70b210520004188036a10422002450c070b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041206a20004188036a1018410021010240027f024002402000280220450d0020002802242105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022202450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c0023602a0022000200236029c02200020013a009802200041186a2007104c20002802182109200028021c20082007100a210a4104210120074180014d0440200041b8026a200028029c0220002802a002104b200020002802bc02220136029403200020002802b802360288032000200120002802c002220341047422026a220b3602900302402003044020004188036a4104722103034020002001280208220c3602b802200c450d0520012802002006460d02200141106a2101200241106b22020d000b0b2000200b36028c03200041b8026a210341000c040b2000200141106a36028c0320004188036a1042410221010b20004198026a10230b41012102200141ff01714108460d020c170b200141106a0b21012003200136020020004188036a2201104220004194036a2202200736020020004190036a2203200a3602002000200936028c03200020063602880320004198026a2209200110222005200028029c0220002802a00210292000419c036a200736020020004198036a200836020020022004360200200320063602002000200536028c03200041013602880320011050200910230b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c140b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220329030037030020004190036a2209200041e0026a220a290300370300200020002903d80237038803200041306a20004188036a10184100210102402000280230450d0020002802342105200041a0036a200041f0026a290300370300200220032903003703002009200a290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022209450d00200020002d00bb023a009b02200020002f00b9023b009902200020002802c002220a3602a0022000200936029c02200020013a009802200041286a2007104c2000280228210f200028022c20082007100a210d024020074180014d0440200041b8026a200028029c02220e20002802a0022210104b200020002802bc02220c36029403200020002802b802360288032000200c20002802c002220141047422116a220b36029003027f024002402001450d00410021014100210303402001200c6a220241086a280200044020022802002006460d03200341016a21032011200141106a2201470d010c020b0b200241106a210b0b2000200b36028c034100210241030c010b2000200241106a36028c032003200a4f0d05200120096a220120063602002001410c6a2007360200200141086a200d360200200141046a200f3602004101210241080b210120004188036a10422002450d012005200e201010292000419c036a200736020020004198036a200836020020004194036a200436020020004190036a20063602002000200536028c03200041023602880320004188036a105020004198026a10230c130b410421010b20004198026a10230b41012102200141ff01714108460d100c130b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2201200041e8026a220229030037030020004190036a2205200041e0026a2204290300370300200020002903d80237038803200041386a20004188036a10182000280238047f200028023c2108200041a0036a200041f0026a2903003703002001200229030037030020052004290300370300200020002903d80237038803200041b8026a20004188036a105f20002d00b802210120002802bc022205450d08200020002d00bb023a009b02200020002f00b9023b0099022000200536029c02200020013a009802024020002802c00222040440410021022005210103402006200128020046044041012103200241016a220104402001200447044003400240024002402006200520014104746a2202280200460440200141016a2201450d01200341016a22030d0341a08104411c41f484041013000b20012003490d012005200120036b4104746a22072002290200370200200741086a200241086a290200370200200141016a22010d0241a08104411c419485041013000b41a08104411c41e484041013000b418080044121418485041013000b20012004470d000b0b024020034100200320044b1b450440200320044d0d0141808004412141cc81041013000b41808004412141bc81041013000b2000200420036b22013602a0022003450d04200820052001102920004190036a20063602002000200836028c03200041033602880320004188036a105020004198026a10230c0e0b41a08104411c41e484041013000b200141106a21012004200241016a2202470d000b0b200020043602a0020b20004198026a102341030541000b2101410121020c120b2003200a41b488041060000b20004194036a41013602002000419c036a4100360200200041c087043602900320004184ae0436029803200041003602880320004188036a41c88704101c000b200041043a00880320004188036a1046000b41002104410121054100210241010b20004194036a200136020020004190036a200236020020004100360288032000200541ff017120044108747236028c03230041106b22012400200142808001370204200141d4b404360200024020004188036a2202280200450440200141001031200241086a2802002205044020014100103120052002410c6a2802002001104a0c020b200141011031200120022d000410310c010b200141011031200110300b20012802081044105d000b20004188036a2108230041f0006b22032400200041f0016a22012802242102200320013602202003200236021c20034100360218200341386a200341186a101602400240024002400240024020032d004841024604402008410036020820084280808080c0003702000c010b200341106a4104103820032802142202450d01200328021022014100480d012001200210392206450d0220062003290338370200200641106a200341c8006a2209280200360200200641086a200341406b220a290300370200200341306a200341206a28020036020020032003290318370328200341386a200341286a1016024020032d0048410246044041042102410121050c010b41042101410121040340200441016a22054521070240200120044704402006200441146c6a22022003290338370200200241106a2009280200360200200241086a200a29030037020020070d08200121020c010b027f20070440417f21022005210441000c010b200120016a22022001490d07200341086a410420022005200220054b1b2202200241044d1b22021038200328020c210b200328020821042003200110382003200636026020032003290300370264200341d0006a2004200b200341e0006a103a2003280250450440200328025421064181808080780c010b200328025421042001210220032802580b210b2004200b103b2006200141146c6a22012003290338370200200141106a2009280200360200200141086a200a29030037020020070d070b200341386a200341286a1016200221012005210420032d00484102470d000b0b2008200536020820082006360204200820023602000b200341f0006a24000c040b103c000b2001103d000b41a084044121419491041013000b41a08104411c41a485041013000b200028028c0321022000280290032105230041106b22012400200142808001370204200141d4b40436020002402002044020014100103120052001102f2005450d012002200541146c6a21050340200228020020011019200241046a20011025200241146a22022005470d000b0c010b200141011031200110300b0c0d0b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a220529030037030020004190036a2203200041e0026a2204290300370300200020002903d80237038803200041106a20004188036a1018200020002802102206410146047e42810e05200041003602c00220004280808080c0003703b8022001410441001029200041a0036a200041f0026a22082903003703002002200529030037030020032004290300370300200020002903d8023703880320004188036a2202200110282001200041d8026a10262000200141016a2203417f20031b36029002200041a4036a20082903003702002000419c036a200529030037020020004194036a2004290300370200200041ac036a2001360200200020002903d80237028c03200041003602880320021050200041b8026a10232002200041f0016a4128100a1a2002105b2001ad42208642800e840b37038803200641014620004188036a1059000b41012102200141ff01714108470d0a0b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c090b200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2205200041e8026a22042903003703004108210120004190036a2203200041e0026a2206290300370300200020002903d80237038803200041406b20004188036a1018024020002802402208450440410021010c010b20002802442102200041a0036a200041f0026a2903003703002005200429030037030020032006290300370300200020002903d8023703880320004188036a2205102b41e081042002105c41ec81042002105c20004104360288032000200236028c03200510502005200041f0016a4128100a1a2005105b0b20084520011058000b200041ad026a200041e0016a290300370000200041b4026a200041e7016a280000360000200020053a00a402200020073602a0022000200836029c022000200436029802200020002903d8013700a502200041b8026a103520004188036a41e881042006105a20002d0088034102470440200041d8026a20004188036a4121100a1a200041a1036a200041d0026a29030037000020004199036a200041c8026a29030037000020004191036a200041c0026a290300370000200020002903b8023700890341012102200041013a00880320002d00d8020440200041d8026a41017220004188036a410172106141017321020b20004188036a2006103f027f027f20002d0088030440200041f0026a200041a1036a290000370300200041e8026a20004199036a290000370300200041e0026a20004191036a29000037030020002000290089033703d80241002002200041d8026a200041b8026a1061410173710d011a200041a0036a200041b0026a29030037030020004198036a200041a8026a29030037030020004190036a200041a0026a290300370300200020002903980237038803200041d0006a20004188036a103e410720002802504101460d011a200041a0036a2205200041f0026a29030037030020004198036a2204200041e8026a2903003703004108210120004190036a2203200041e0026a290300370300200020002903d8023703880320004188036a2202102b2005200041b0026a2903003703002004200041a8026a2903003703002003200041a0026a290300370300200020002903980237038803200220061028200620004198026a10262002200041f0016a4128100a1a2002105b41000c020b41000b210141010b20011058000b200020002d0089033a00ff02200041e4026a4101360200200041ec026a41013602002000419082043602e002200041003602d8022000410136028403200020004180036a3602e8022000200041ff026a36028003200041d8026a41808304101c000b41082101200041d4026a200041e0016a280200360200200020053a00cb02200020073600c702200020083600c302200020043600bf02200020063600bb022000200b3b00b9022000200c3a00b802200020002903d8013702cc02200041d8026a1035200041a0036a200041f0026a29030037030020004198036a2202200041e8026a29030037030020004190036a2205200041e0026a290300370300200020002903d80237038803200041c8006a20004188036a1018024020002802482204450440410021010c010b41e88104200028024c2203200041b8026a1027200520002903b8023703002002200041c0026a290300370300200041a0036a200041c8026a290300370300200041a8036a200041d0026a2903003703002000200336028c03200041083602880320004188036a220210502002200041f0016a4128100a1a2002105b0b20044520011058000b200041d8026a2202103541002101027f02402002200041f0016a10610440200041b8026a2006101720002d00c4024102470d01410321010b41010c010b41e481042006105c20004107360288032000200636028c0320004188036a220110502001200041f0016a4128100a1a2001105b4108210141000b20011058000b200041d8026a22011035027f027f41002001200041f0016a1061450d001a20004188036a2006101720002d00940322024102470440200041c0026a20004190036a280000360000200041c7026a20004197036a2d00003a000020002000290089033700b902200020002f0095033b00c502200020023a00c402200020002d0088033a00b802024020080440200741c0004b0d01200020073602c002200020083602bc02200020043602b8020b20054102470440200020053a00c402200521020b2006200041b8026a10244108210120004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20023a00002000200636028c03200041063602880320004188036a220210502002200041f0016a4128100a1a2002105b41000c030b41060c010b41030b210141010b20011058000b200020073602c402200020083602c002200020043602bc02200020063602b802200041d8026a22011035027f02402001200041f0016a1061044042800c2112200841c100490d010b4201211341010c010b2002200041b8026a10242000200241016a2201417f20011b3602940220004190036a20002903b80237030020004198036a200041c0026a2802003602002000419c036a20093a00002000200236028c03200041053602880320004188036a220110502001200041f0016a4128100a1a2002ad42208621142001105b4200211241000b2000201242800e832013842014843703880320004188036a1059000b20004188036a2201200041f0016a4128100a1a2001105b41082101410021020c020b1057000b20004184ae0436029803200041003602880320004188036a418c8e04101c000b200220011058000b410020012802081044105d000bb60101017f230041306b22022400200241286a200141186a290000370300200241206a200141106a290000370300200241186a200141086a29000037030020022001290000370310200241086a200241106a1018024020022802080440200241106a200228020c101f2002280214220104402000200228021836020820002001360204200020022802103602000c020b20004100360204200041013a00000c010b20004100360204200041013a00000b200241306a24000b7501017f230041306b220324002003200136020420032000360200200341146a41023602002003411c6a41023602002003412c6a4105360200200341e4960436021020034100360208200341053602242003200341206a360218200320033602282003200341046a360220200341086a2002101c000b0b00200020014120100b450bd209020f7f017e23004190016b22002400024002400240024002400240103741ff01712201410546044020004180800136025841d4b404200041d8006a22011002200041186a200028025841d4b4044180800141b0860410142000200029031837032020004100360258200041206a2001410410110d032000280258220141187621042001411076210220014108762103200141ff0171220141054704402001419b0147200341ff017141ae014772200241ff0171419d0147200441de004772720d04200041306a22011035200042003703500c070b200341ff017141e50047200241ff017141c3004772200441ac0147720d03200041106a200041206a100c20002802100d0320004180016a200028022441047622012000280214220320012003491b10202003450d01200041e5006a21040340200041d8006a200041206a101e0240024020002d006422054102470440200041386a2206200041e0006a2802003602002000412e6a2207200441026a2d00003a000020002000290358370330200020042f00003b012c2000280288012202200028028001460d010c020b20004180016a10230c060b20004180016a2002104920002802880121020b200028028401220820024104746a22012000290330370200200120053a000c200120002f012c3b000d200141086a20062802003602002001410f6a20072d00003a0000200241016a220504402000200536028801200341016b22030d010c040b0b41a08104411c41d095041013000b200020013a0058200041d8006a1046000b200028028801210520002802840121080b2000412a6a220120002d0083013a0000200020002f0081013b01282008450d0020002d00800121042000412e6a20012d000022013a0000200020002f012822023b012c200020043a008001200020023b008101200020013a00830120002005360288012000200836028401200041d8006a200510202000280258220620002802602201490d01200028025c210402402005452001200646720d00200420014104746a210a200120066b41016a2103200541047441106b210b41002102200041326a210c0340200220086a220741046a2802002101200041086a200741086a2802002209104c2000280208210d200028020c20012009100a210e2002200a6a2201410c6a2007410c6a2d00003a0000200141086a2009360200200141046a200e3602002001200d3602002001410d6a20002f00303b00002001410f6a200c2d00003a00002003450d01200341016a21032002200b47200241106a21020d000b0b02402005450d00200541047421034100210220042101034020012d000c4102460d01200041386a200141086a290200220f37030020002001290200370330200fa741c1004f0d04200141106a21012002200041306a1024200241016a2102200341106b22030d000b0b200620041040200041306a22011035200020053602542000410036025020004180016a10230c030b1057000b41808004412141b485041013000b200041e4006a4101360200200041ec006a4100360200200041888f0436026020004184ae0436026820004100360258200041d8006a41908f04101c000b200041d8006a220420014128100a1a2004105b230041106b22012400200142808001370204200141d4b404360200200141001031200141001031410020012802081044105d000b5501017f230041206b2202240020022000360204200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241046a41a08f04200241086a1064200241206a24000bee0301057f230041406a22032400200341033a003820034280808080800437033020034100360228200341003602202003200136021c20032000360218027f0240024020022802002201450440200241146a28020022004103742105200041ffffffff017121072002280210210441002101034020012005460d02200228020820016a220041046a28020022060440200328021820002802002006200328021c28020c1101000d040b200141086a2101200428020020042802042106200441086a2104200341186a2006110200450d000b0c020b200228020422074105742100200741ffffff3f71210703402000450d01200228020820046a220541046a28020022060440200328021820052802002006200328021c28020c1101000d030b20032001411c6a2d00003a00382003200141146a290200370330200341106a200228021022052001410c6a107a20032003290310370320200341086a2005200141046a107a20032003290308370328200441086a2104200041206b210020012802002106200141206a2101200520064103746a2205280200200341186a2005280204110200450d000b0c010b2002410c6a28020020074b04402003280218200228020820074103746a22002802002000280204200328021c28020c1101000d010b41000c010b41010b200341406b24000b0f00200028020020012002106641000b7701027f230041106b2204240020022000280200200028020822036b4b0440200441086a20002003200210692004280208200428020c103b200028020821030b200028020420036a20012002100a1a2003200220036a22014b044041c08f04411c41e095041013000b20002001360208200441106a24000bdd0201037f230041106b220224000240024002400240200028020022002002410c6a027f0240024020014180014f04402002410036020c2001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c030b200028020822032000280200460d030c040b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b20022001413f71418001723a000f20022001410676413f71418001723a000e20022001410c76413f71418001723a000d2002200141127641077141f001723a000c41040b10660c020b230041106b22042400200441086a20002003410110692004280208200428020c103b200441106a2400200028020821030b200028020420036a20013a0000200341016a2201450d01200020013602080b200241106a240041000f0b41c08f04411c41d095041013000b4a01017f230041206b220224002000280200200241186a200141106a290200370300200241106a200141086a29020037030020022001290200370308200241086a1063200241206a24000bdd0101027f230041206b2204240002402000027f4100200220036a22032002490d001a2001280200220220026a22052002490d0141082005200320032005491b2203200341084d1b2203417f73411f7621050240200204402004410136021820042002360214200420012802043602100c010b200441003602180b200420032005200441106a103a20042802004504402004280204210220012003360200200120023602044181808080780c010b20042802042103200441086a2802000b36020420002003360200200441206a24000f0b41e08f044121419491041013000bd00101037f02402001450440200221030c010b02402001200120026a41016b410020026b7122054d044041ccb404280200220220056a22042002490d0241d0b4042802002004490440200541ffff036a22022005490d022002411076220340002202417f46200241ffff0371200247720d022002411074220220034110746a22042002490d024100210341d0b4042004360200200220056a22042002490d030b41ccb4042004360200200221030c020b41b0ad04411c4194ad041013000b410021030b20002001360204200020033602000bd806020b7f027e230041406a2203240020002802002202ad210d0240024002400240024002400240024020024190ce004f044041272100200d210e0240034020004104490d01200341196a20006a220241046b200e200e4290ce0080220d4290ce007e7da7220441ffff037141e4006e220641017441db98046a2f00003b0000200241026b2004200641e4006c6b41ffff037141017441db98046a2f00003b0000200041046b2100200e42ffc1d72f56200d210e0d000b200da7220241e3004d0d0320004102490d090c020b0c080b41272100200241e3004b0d002002410a490d040c020b200041026b2200200341196a6a200da72202200241ffff037141e4006e220241e4006c6b41ffff037141017441db98046a2f00003b00000b2002410a490d01200041024f0d000c050b200041026b2200200341196a6a200241017441db98046a2f00003b00000c020b2000450d030b200041016b2200200341196a6a200241306a3a00000b200041274b0d01412820006b412720006b22062001280218220541017122071b210241002104200541047104404184ae04210420024184ae044184ae04107120026a22024b0d010b412b418080c40020071b2107200341196a20006a2108024020012802084504404101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b024020022001410c6a28020022094904402005410871450d01200128021c210b2001413036021c20012d0020210c41012100200141013a002020012802002205200141046a280200220a2007200410740d02200341106a2001200920026b4101107520032802142202418080c400460d022003280210200520082006200a28020c1101000d0220022005200a10760d022001200c3a00202001200b36021c410021000c020b4101210020012802002202200141046a28020022012007200410740d01200220082006200128020c11010021000c010b41012100200341086a2001200920026b41011075200328020c2205418080c400460d00200328020820012802002202200141046a28020022012007200410740d00200220082006200128020c1101000d00200520022001107621000b200341406b240020000f0b41f09504411c41a49b041013000b4190960441214180ab041013000b0300010b0e0020002802001a03400c000b000b0d0042f2e7eb9187bab2c1d1000b4a01017f230041106b22052400200220034904402003200220041045000b200541086a2003200220011070200528020c21012000200528020836020020002001360204200541106a24000b1500200020012002200341e8b204419096041087010ba704010a7f230041106b2203240002400240200020016b22024110490d002002200141036a417c7120016b220049200041044b720d00200220006b22044104490d002001200010722206200020016a22082004417c716a200441037110726a220220064f0440200441027621050240024003402005450d0520032008200541c0012005200541c0014f1b41809f041073200328020c21052003280208210820032003280200200328020422002000417c714190a0041073200328020c210920032802082107024020032802042200450440410021010c010b2003280200220420004102746a210a4100210103402004220641106a2104410021000240034020012001200020066a280200220b417f73410776200b410676724181828408716a22014d0440200041046a22004110470d010c020b0b41f09504411c4198a2041013000b2004200a470d000b0b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024b0d012009450d000b200941027421004100210103402001200120072802002204417f734107762004410676724181828408716a22014b0d02200741046a2107200041046b22000d000b20022002200141087641ff81fc0771200141ff81fc07716a418180046c4110766a22024d0d0441f09504411c41c8a2041013000b41f09504411c41a8a2041013000b41f09504411c41b8a2041013000b41f09504411c4188a2041013000b20012002107221020b200341106a240020020b4601017f200145044041000f0b024003402002200220002c000041bf7f4a6a22024b0d01200041016a2100200141016b22010d000b20020f0b41f09504411c41f0aa041013000b3e00200220034f044020002003360204200020013602002000410c6a200220036b3602002000200120034102746a3602080f0b41acae04412320041013000b39000240027f2002418080c40047044041012000200220012802101102000d011a0b20030d0141000b0f0b200020034100200128020c1101000bae0101027f20022104024002400240200320012d0020220320034103461b41ff0171220341016b0e03010001020b200241016a2203044020034101762104200241017621030c020b41f09504411c41b49b041013000b41002104200221030b200341016a2102200128021c2103200128020421052001280200210102400340200241016b2202450d01200120032005280210110200450d000b418080c40021030b20002003360204200020043602000b3201017f027f0340200020002004460d011a200441016a2104200220012003280210110200450d000b200441016b0b2000490b4b01017f230041106b22052400200120034d0440200541086a4100200120021070200528020c21012000200528020836020020002001360204200541106a24000f0b2001200320041015000bea04010b7f230041106b2209240020002802042104200028020021030240024002402001280208220b410147200128021022024101477145044020024101470d02200320046a210c200141146a28020041016a210a410021022003210003402000200c460d03027f024020002c0000220641004e0440200041016a2105200641ff017121070c010b20002d0001413f7121052006411f7121072006415f4d044020074106742005722107200041026a21050c010b20002d0002413f7120054106747221082006417049044020082007410c74722107200041036a21050c010b200041046a210520022106418080c4002007411274418080f0007120002d0003413f71200841067472722207418080c400460d011a0b2002200520006b6a22062002490d0320070b2108200a41016b220a044020052100200621022008418080c400470d010c040b0b2008418080c400460d02024002402002450d00200220044f04404100210020022004460d010c020b41002100200220036a2c00004140480d010b200321000b2002200420001b21042000200320001b21030c020b200128020020032004200128020428020c11010021000c020b41f09504411c41d8a3041013000b200b450440200128020020032004200128020428020c11010021000c010b2001410c6a2802002200200320046a2003107122024b0440200941086a2001200020026b4100107541012100200928020c2202418080c400460d0120092802082001280200220520032004200141046a280200220128020c1101000d01200220052001107621000c010b200128020020032004200128020428020c11010021000b200941106a240020000b140020002802002001200028020428020c1102000b5501027f0240027f02400240200228020041016b0e020103000b200241046a0c010b200120022802044103746a22012802044107470d0120012802000b2802002104410121030b20002004360204200020033602000b4901017f230041206b22032400200341186a200241106a290200370300200341106a200241086a2902003703002003200229020037030820002001200341086a1064200341206a24000bdc08010b7f23004190016b22032400200341003b0184012003410a3602800120034281808080a00137037820032002360274200341003602702003200236026c200320013602682003200236026420034100360260200028020421062000280200210720002802082108200341fc006a2109027f0340024002400240024020032d008501450440200341d8006a2003280268220c200328026c20032802702003280274107d0240024020032802582201450d00200328025c2100034002400240024002400240027f0240024002400240200328027822020440200220096a41016b2d00002104200041084f04402001200141036a417c712202460440200041086b210a410021020c040b200341d0006a200220016b22022000200020024b1b22022001200041c89c041077200341c8006a200420032802502003280254107e20032802484101470d02200328024c21010c050b200341306a200420012000107e2003280234210120032802300c050b41909604412141a8a9041013000b2002200041086b220a4b0d010b200441818284086c210b0340200241046a22052002490d04200120026a280200200b73220d417f73200d41818284086b71200120056a280200200b732205417f73200541818284086b7172418081828478710d012002200241086a22024b0d072002200a4d0d000b0b200341406b20012000200241f89c04106f200341386a200420032802402003280244107e410020032802384101470d011a2002200328023c6a220120024f0d0041f09504411c41889d041013000b41010b4101460440200141016a2200450d022000200328027022006a22022000490d0320032002360270200220032802782200490d05200341286a2003280268200328026c200220006b2002107d20032802282202450d05200328022c2100200341206a20032802782009410441d8a90410772002200020032802202003280224107f450d05200341186a200328026020032802702200200c10800120032000360260200328021c2102200328021821000c080b200320032802743602700c060b41f09504411c41d89c041013000b41f09504411c41b8a9041013000b41f09504411c41c8a9041013000b41f09504411c41e89c041013000b200341106a2003280268200328026c20032802702003280274107d20032802142100200328021022010d000b0b4100210020032d0085010d00200341013a008501024020032d008401044020032802642101200328026021040c010b2003280264220120032802602204490d0420012004460d010b200341086a200420012003280268108001200328020c2102200328020821000b20000d010b41000c050b20082d0000450d01200741d497044104200628020c110100450d010c020b41909604412141e8a3041013000b2003410a36028c0120082002047f200320002002200241016b41a0a004106f2003418c016a410120032802002003280204107f0541000b3a0000200720002002200628020c110100450d010b0b41010b20034190016a24000b4c01037f230041106b220524002002200449200320044b72450440200541086a2003200420011070200528020c2107200528020821060b2000200736020420002006360200200541106a24000b5701027f024002402003450440410021030c010b200141ff017121054101210103402005200220046a2d0000460440200421030c030b2003200441016a2204470d000b0b410021010b20002003360204200020013602000b1801017f2001200346047f200020022001100b0541010b450b1500200020012002200341fca404419096041087010b5801027f230041206b22022400200128020421032001280200200241186a2000280200220041106a290200370300200241106a200041086a290200370300200220002902003703082003200241086a1064200241206a24000b0b002000280200200110780b18002001280200419cb4044105200128020428020c1101000b990301037f230041406a22022400200028020021034101210002402001280200220441a09704410c200141046a280200220128020c1101000d0002402003280208220004402002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241083602142002200241106a36023820022002410c6a36021020042001200241286a107b450d010c020b20032802002200200328020428020c110a0042c8b5e0cfca86dbd3897f520d002002200036020c200241346a4102360200410121002002413c6a4101360200200241b0970436023020024100360228200241093602142002200241106a36023820022002410c6a36021020042001200241286a107b0d010b200328020c21002002411c6a4103360200200241246a41033602002002413c6a4105360200200241346a4105360200200241f896043602182002410036021020022000410c6a3602382002200041086a3602302002410336022c200220003602282002200241286a36022020042001200241106a107b21000b200241406b240020000b1500200020012002200341ccad0441e0ad041087010b1500200020012002200341e8b2044180b3041087010b2800200120024d04402000200220016b3602042000200120036a3602000f0b2005412120041013000b3701017f230041106b22032400200341086a200220011043200328020c21012000200328020836020020002001360204200341106a24000b7301017f230041306b220424002004200136020420042000360200200441146a41023602002004411c6a41023602002004412c6a41053602002004200336021020044100360208200441053602242004200441206a3602182004200441046a36022820042004360220200441086a2002101c000bf80102037f017e230041d0006b22042400200441106a22062001105220042903102107200441003602282004200737032020022802002002280204200441206a2205104a200520022802082003103420042004290320370310200441086a20062004280228101b20052004280208200428020c102c20042001280200220620012802042001280208220241d88704101020044100360248200420042903003703402005200441406b101a2002200220042802486a22054b044041a08104411c41e887041013000b20012006360200200141086a22022005360200200041086a200228020036020020002001290200370200200441d0006a24000b0b81340700418080040bb50f617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6d706163742e727300210001006a000000420000002600000000000000617474656d707420746f206164642077697468206f766572666c6f77500a01007f0000005206000035000000500a01007f0000005906000024000000b16cd67c00e945ca7733867e6dbd73333b605e7d4661696c656420746f206765742076616c756520696e204d617070696e673a20f0000100200000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f73746f726167652d342e322e312f7372632f6c617a792f6d617070696e672e727318010100680000009c000000250000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f696d706c732e7273000000900101006d0000009d00000011000000900101006d0000009d00000030000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000001016010083000000c80100001e0000000a000000010000000100000001000000500a01007f0000006c06000015000000500a01007f0000006d06000015000000500a01007f0000007b0600003e000000500a01007f0000007f06000011000000500a01007f0000002b0b00001e000000500a01007f000000c3080000110000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6578742e727300c40201006b000000e40000001400000054686520657865637574656420636f6e7472616374206d757374206861766520612063616c6c6572207769746820612076616c6964206163636f756e742069642e000000900101006d0000006b0100000e000000900101006d0000002401000023000000656e636f756e746572656420756e6578706563746564206572726f72a40301001c000000900101006d000000ed00000017000000601701006e000000c100000037000000601701006e000000c4000000090000002f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f74797065732e72730000f80301003a0000002e0000000d0000004964656e746974793a3a4964656e74697479437265617465640000000417010000000000440401004964656e746974793a3a4964656e74697479437265617465643a3a6f776e65724964656e746974793a3a416464726573734164646564000004170100000000008c0401004964656e746974793a3a4164647265737341646465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737355706461746564000417010000000000d30401004964656e746974793a3a41646472657373557064617465643a3a6964656e746974795f6e6f4964656e746974793a3a4164647265737352656d6f76656400000004170100000000001d0501004964656e746974793a3a4164647265737352656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4964656e7469747952656d6f76656400000417010000000000690501004964656e746974793a3a4964656e7469747952656d6f7665643a3a6964656e746974795f6e6f4964656e746974793a3a4e6574776f726b41646465640417010000000000b60501004964656e746974793a3a4e6574776f726b41646465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b5570646174656400000417010000000000fa0501004964656e746974793a3a4e6574776f726b557064617465643a3a6e6574776f726b5f69644964656e746974793a3a4e6574776f726b52656d6f7665640417010000000000440601004964656e746974793a3a4e6574776f726b52656d6f7665643a3a6e6574776f726b5f69644964656e746974793a3a5265636f766572794163636f756e745365744964656e746974793a3a5265636f766572794163636f756e745365743a3a6964656e746974795f6e6f2f55736572732f73657267656a73616b61632f646f74666c6f772d696e6b2f636f6e7472616374732f6964656e746974792f6c69622e7273000000d1060100380000002b00000005000000636f756c64206e6f742070726f7065726c79206465636f64652073746f7261676520656e747279001c0701002700000073746f7261676520656e7472792077617320656d707479004c070100170000004e6574776f726b207270632075726c20697320746f6f206c6f6e67006c0701001b000000d106010038000000c7000000110000000a00000004000000040000000b0000000c0000000d0041c08f040be417617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f770000000a00000000000000010000000e0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300140801007f0000008a0100001c0000006361706163697479206f766572666c6f77000000a408010011000000140801007f00000006020000050000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f616c6c6f632e72736d656d6f727920616c6c6f636174696f6e206f6620206279746573206661696c6564004d09010015000000620901000d000000d00801007d00000095010000090000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f666d742e72730000c30901007b00000064020000200000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e727300500a01007f000000300700000d000000500a01007f0000009e07000009000000617474656d707420746f206164642077697468206f766572666c6f7700000000617474656d707420746f2073756274726163742077697468206f766572666c6f7729696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320320b010020000000520b0100120000003a0000000417010000000000740b010001000000740b0100010000000a00000000000000010000000f00000070616e69636b65642061742027272c20ac0b010001000000ad0b0100030000003a2000000417010000000000c00b010002000000202020202c0a280a282f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6e756d2e727330303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273000000230d01007e0000005d0500000d000000230d01007e000000ed050000380000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e727300c40d0100830000004e0000002f000000c40d0100830000005a0000001f000000c40d0100830000006300000009000000c40d0100830000006800000027000000c40d010083000000680000003e00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820980e010012000000aa0e01002200000072616e676520656e6420696e64657820dc0e010010000000aa0e0100220000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273000000fc0e010081000000c4050000250000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273900f010080000000fe0300002f000000900f010080000000de0800001e000000736f7572636520736c696365206c656e67746820282920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e67746820283010010015000000451001002b000000310b0100010000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f636f756e742e7273881001008000000047000000150000008810010080000000540000001100000088100100800000005a00000009000000881001008000000064000000110000008810010080000000660000000d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f697465722e727300581101007f0000009100000011000000581101007f0000004f0200002d0000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7472616974732e7273000000f811010081000000ca000000130000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f76616c69646174696f6e732e727300008c12010086000000e50000001500000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041e6a7040b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041a4a8040bfd042f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f7061747465726e2e727300002414010082000000a1010000470000002414010082000000b4010000200000002414010082000000b4010000110000002414010082000000b8010000260000002f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f616363756d2e7273e8140100880000009500000001000000dd0b01007e000000cd0100000500000004170100000000007061696420616e20756e70617961626c65206d657373616765636f756c64206e6f74207265616420696e707574756e61626c6520746f206465636f646520696e707574656e636f756e746572656420756e6b6e6f776e2073656c6563746f72756e61626c6520746f206465636f64652073656c6563746f722f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f616c6c6f632f6c61796f75742e72730010160100830000002f010000180041b0ad040b51617474656d707420746f206164642077697468206f766572666c6f77e518010082000000900100004f00000000000000617474656d707420746f2073756274726163742077697468206f766572666c6f77004190ae040be504617474656d707420746f206164642077697468206f766572666c6f77617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28290a04170100000000004f170100010000002f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f696e6b5f656e762d342e322e312f7372632f656e67696e652f6f6e5f636861696e2f6275666665722e72730000601701006e0000005a0000001c000000601701006e0000005a00000009000000601701006e0000005a00000031000000601701006e0000006500000009000000601701006e000000830000001a000000601701006e0000008d0000002100000045636473615265636f766572794661696c656443616c6c52756e74696d654661696c65644c6f6767696e6744697361626c6564556e6b6e6f776e4e6f7443616c6c61626c65436f64654e6f74466f756e645f456e646f776d656e74546f6f4c6f775472616e736665724661696c65645f42656c6f7753756273697374656e63655468726573686f6c644b65794e6f74466f756e6443616c6c6565526576657274656443616c6c6565547261707065644465636f64652f55736572732f73657267656a73616b61632f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032332d30312d30342d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f696e6465782e727300e5180100820000008201000047004180b3040bcb01617474656d707420746f2073756274726163742077697468206f766572666c6f772f55736572732f73657267656a73616b61632f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d332e362e342f7372632f636f6465632e7273000000a119010068000000770000000e0000004572726f72000000190000001c000000160000001400000019000000f7150100db150100c5150100b1150100981501","build_info":{"build_mode":"Debug","cargo_contract_version":"2.0.0-rc.1","rust_toolchain":"nightly-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"identity","version":"0.1.0","authors":["Master Union "]},"spec":{"constructors":[{"args":[],"default":false,"docs":[],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x9bae9d5e"},{"args":[{"label":"networks","type":{"displayName":["Vec"],"type":11}}],"default":false,"docs":[],"label":"init_with_networks","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":8},"selector":"0x056543ac"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":5},"balance":{"displayName":["Balance"],"type":35},"blockNumber":{"displayName":["BlockNumber"],"type":2},"chainExtension":{"displayName":["ChainExtension"],"type":38},"hash":{"displayName":["Hash"],"type":36},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":37}},"events":[{"args":[{"docs":[" Owner of the created identity."],"indexed":true,"label":"owner","type":{"displayName":["AccountId"],"type":5}},{"docs":[" The \`IdentityNo\` associated with the created identity."],"indexed":false,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":["Events"],"label":"IdentityCreated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which a new address has been added."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The newly added address."],"indexed":false,"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressAdded"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been updated."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The updated address value."],"indexed":false,"label":"updated_address","type":{"displayName":["NetworkAddress"],"type":3}}],"docs":[],"label":"AddressUpdated"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got updated."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The network on which the address has been removed."],"indexed":false,"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"AddressRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that got removed."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"docs":[],"label":"IdentityRemoved"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the newly added network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the network that got added."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkAdded"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the updated network."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"docs":[" The rpc url of the updated network."],"indexed":false,"label":"rpc_url","type":{"displayName":["String"],"type":7}},{"docs":[" The address type used on the updated network."],"indexed":false,"label":"account_type","type":{"displayName":["AccountType"],"type":13}}],"docs":[],"label":"NetworkUpdated"},{"args":[{"docs":[" The \`NetworkId\` that is associated with the network that got"," removed."],"indexed":true,"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"docs":[],"label":"NetworkRemoved"},{"args":[{"docs":[" The \`IdentityNo\` of the identity that set a recovery account."],"indexed":true,"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"docs":[" The newly set recovery account."],"indexed":false,"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"docs":[],"label":"RecoveryAccountSet"}],"lang_error":{"displayName":["ink","LangError"],"type":10},"messages":[{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the \`IdentityInfo\` of an identity that is associated with"," the provided \`IdentityNo\`."],"label":"identity","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":14},"selector":"0xcbfefbec"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"owner_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x99720c1e"},{"args":[{"label":"owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Returns the owner of an identity."],"label":"identity_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0x713ca232"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the network name that is associated with the specified \`NetworkId\`."],"label":"network_info_of","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x3dffc61c"},{"args":[{"label":"receiver","type":{"displayName":["IdentityNo"],"type":2}},{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Returns the destination address of a transaction that needs to be"," routed to the specified identity on the specified network."],"label":"transaction_destination","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":23},"selector":"0x525505e4"},{"args":[],"default":false,"docs":[" A list of all the available networks each associated with a \`NetworkId\`."],"label":"available_networks","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":26},"selector":"0xbd5ddfcd"},{"args":[],"default":false,"docs":[" Creates an identity and returns the \`IdentityNo\`.",""," A user can only create one identity."],"label":"create_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0xfb893664"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Adds an address for a given network"],"label":"add_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x71cc798d"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}},{"label":"address","type":{"displayName":["NetworkAddress"],"type":3}}],"default":false,"docs":[" Updates the address of the given network"],"label":"update_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x892f75e4"},{"args":[{"label":"network","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[" Removes the address by network"],"label":"remove_address","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xdca7a60f"},{"args":[],"default":false,"docs":[" Removes an identity"],"label":"remove_identity","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x08026740"},{"args":[{"label":"info","type":{"displayName":["NetworkInfo"],"type":12}}],"default":false,"docs":[],"label":"add_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":29},"selector":"0x97a3ee09"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}},{"label":"new_rpc_url","type":{"displayName":["Option"],"type":33}},{"label":"new_address_type","type":{"displayName":["Option"],"type":34}}],"default":false,"docs":[],"label":"update_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xcfbe8bcc"},{"args":[{"label":"network_id","type":{"displayName":["NetworkId"],"type":2}}],"default":false,"docs":[],"label":"remove_network","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x14b17dbe"},{"args":[{"label":"recovery_account","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Sets the recovery account that will be able to change the ownership"," of the identity.",""," Only callable by the identity owner."],"label":"set_recovery_account","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0xd3b93403"},{"args":[{"label":"identity_no","type":{"displayName":["IdentityNo"],"type":2}},{"label":"new_owner","type":{"displayName":["AccountId"],"type":5}}],"default":false,"docs":[" Transfers the ownership of an identity to another account.",""," Only callable by the identity owner or any account that the identity"," owner added as a proxy."],"label":"transfer_ownership","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":31},"selector":"0x107e33ea"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7d5e603b","ty":0}},"name":"addresses"}],"name":"IdentityInfo"}},"root_key":"0x7d5e603b"}},"name":"number_to_identity"},{"layout":{"root":{"layout":{"leaf":{"key":"0xca45e900","ty":5}},"root_key":"0xca45e900"}},"name":"owner_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x7cd66cb1","ty":2}},"root_key":"0x7cd66cb1"}},"name":"identity_of"},{"layout":{"root":{"layout":{"leaf":{"key":"0x3373bd6d","ty":5}},"root_key":"0x3373bd6d"}},"name":"recovery_account_of"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"latest_identity_no"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x7e863377","ty":7}},"name":"rpc_url"},{"layout":{"enum":{"dispatchKey":"0x7e863377","name":"AccountType","variants":{"0":{"fields":[],"name":"AccountId32"},"1":{"fields":[],"name":"AccountKey20"}}}},"name":"account_type"}],"name":"NetworkInfo"}},"root_key":"0x7e863377"}},"name":"network_info_of"},{"layout":{"leaf":{"key":"0x00000000","ty":5}},"name":"admin"},{"layout":{"leaf":{"key":"0x00000000","ty":2}},"name":"network_id_count"}],"name":"Identity"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"sequence":{"type":1}}}},{"id":1,"type":{"def":{"tuple":[2,3]}}},{"id":2,"type":{"def":{"primitive":"u32"}}},{"id":3,"type":{"def":{"sequence":{"type":4}}}},{"id":4,"type":{"def":{"primitive":"u8"}}},{"id":5,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":6,"type":{"def":{"array":{"len":32,"type":4}}}},{"id":7,"type":{"def":{"primitive":"str"}}},{"id":8,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":10}],"path":["Result"]}},{"id":9,"type":{"def":{"tuple":[]}}},{"id":10,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":11,"type":{"def":{"sequence":{"type":12}}}},{"id":12,"type":{"def":{"composite":{"fields":[{"name":"rpc_url","type":7,"typeName":"String"},{"name":"account_type","type":13,"typeName":"AccountType"}]}},"path":["common","types","NetworkInfo"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"index":0,"name":"AccountId32"},{"index":1,"name":"AccountKey20"}]}},"path":["common","types","AccountType"]}},{"id":14,"type":{"def":{"variant":{"variants":[{"fields":[{"type":15}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":15},{"name":"E","type":10}],"path":["Result"]}},{"id":15,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":16}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":16}],"path":["Option"]}},{"id":16,"type":{"def":{"composite":{"fields":[{"name":"addresses","type":0,"typeName":"Vec<(NetworkId, NetworkAddress)>"}]}},"path":["identity","types","IdentityInfo"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":18}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":18},{"name":"E","type":10}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":5}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":5}],"path":["Option"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":10}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":2}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":2}],"path":["Option"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":10}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":12}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":12}],"path":["Option"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"fields":[{"type":24}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":24},{"name":"E","type":10}],"path":["Result"]}},{"id":24,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":25}],"path":["Result"]}},{"id":25,"type":{"def":{"variant":{"variants":[{"index":0,"name":"NotAllowed"},{"index":1,"name":"IdentityDoesntExist"},{"index":2,"name":"AddressAlreadyAdded"},{"index":3,"name":"InvalidNetwork"},{"index":4,"name":"AddressSizeExceeded"},{"index":5,"name":"NetworkNameTooLong"},{"index":6,"name":"NetworkRpcUrlTooLong"},{"index":7,"name":"AlreadyIdentityOwner"}]}},"path":["identity","Error"]}},{"id":26,"type":{"def":{"variant":{"variants":[{"fields":[{"type":27}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":27},{"name":"E","type":10}],"path":["Result"]}},{"id":27,"type":{"def":{"sequence":{"type":28}}}},{"id":28,"type":{"def":{"tuple":[2,12]}}},{"id":29,"type":{"def":{"variant":{"variants":[{"fields":[{"type":30}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":30},{"name":"E","type":10}],"path":["Result"]}},{"id":30,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":25}],"path":["Result"]}},{"id":31,"type":{"def":{"variant":{"variants":[{"fields":[{"type":32}],"index":0,"name":"Ok"},{"fields":[{"type":10}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":32},{"name":"E","type":10}],"path":["Result"]}},{"id":32,"type":{"def":{"variant":{"variants":[{"fields":[{"type":9}],"index":0,"name":"Ok"},{"fields":[{"type":25}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":9},{"name":"E","type":25}],"path":["Result"]}},{"id":33,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":34,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":13}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":13}],"path":["Option"]}},{"id":35,"type":{"def":{"primitive":"u128"}}},{"id":36,"type":{"def":{"composite":{"fields":[{"type":6,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":37,"type":{"def":{"primitive":"u64"}}},{"id":38,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"}`; \ No newline at end of file diff --git a/types/contracts/address_book.ts b/types/contracts/address_book.ts new file mode 100644 index 0000000..e80d81b --- /dev/null +++ b/types/contracts/address_book.ts @@ -0,0 +1,107 @@ +/* This file is auto-generated */ + +import type { ApiPromise } from '@polkadot/api'; +import { Abi } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import { ContractPromise } from '@polkadot/api-contract'; +import { ContractAbi } from '../contract-info/address_book'; +import QueryMethods from '../query/address_book'; +import BuildExtrinsicMethods from '../build-extrinsic/address_book'; +import TxSignAndSendMethods from '../tx-sign-and-send/address_book'; +import MixedMethods from '../mixed-methods/address_book'; +import EventsClass from '../events/address_book'; + + +export default class Contract { + readonly query : QueryMethods; + readonly buildExtrinsic : BuildExtrinsicMethods; + readonly tx : TxSignAndSendMethods; + readonly methods : MixedMethods; + readonly events: EventsClass; + + readonly address : string; + readonly signer : KeyringPair; + + private nativeContract : ContractPromise; + private nativeAPI : ApiPromise; + private contractAbi: Abi; + + /** + * @constructor + + * @param address - The address of the contract. + * @param signer - The signer to use for signing transactions. + * @param nativeAPI - The API instance to use for queries. + */ + constructor( + address : string, + signer : KeyringPair, + nativeAPI : ApiPromise, + ) { + this.address = address; + this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); + this.nativeAPI = nativeAPI; + this.signer = signer; + this.contractAbi = new Abi(ContractAbi); + + this.query = new QueryMethods(this.nativeContract, this.nativeAPI, signer.address); + this.buildExtrinsic = new BuildExtrinsicMethods(this.nativeContract, this.nativeAPI); + this.tx = new TxSignAndSendMethods(nativeAPI, this.nativeContract, signer); + this.methods = new MixedMethods(nativeAPI, this.nativeContract, signer); + this.events = new EventsClass(this.nativeContract, nativeAPI); + } + + /** + * name + * + * @returns The name of the contract. + */ + get name() : string { + return this.nativeContract.abi.info.contract.name.toString(); + } + + /** + * abi + * + * @returns The abi of the contract. + */ + get abi() : Abi { + return this.contractAbi; + } + + /** + * withSigner + * + * @param signer - The signer to use for signing transactions. + * @returns New instance of the contract class with new signer. + * @example + * ```typescript + * const contract = new Contract(address, signerAlice, api); + * await contract.mint(signerBob.address, 100); + * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); + * ``` + */ + withSigner(signer : KeyringPair) : Contract { + return new Contract(this.address, signer, this.nativeAPI); + } + + /** + * withAddress + * + * @param address - The address of the contract. + * @returns New instance of the contract class to interact with new contract. + */ + withAddress(address : string) : Contract { + return new Contract(address, this.signer, this.nativeAPI); + } + + /** + * withAPI + * + * @param api - The API instance to use for queries. + * @returns New instance of the contract class to interact with new API. + */ + withAPI(api : ApiPromise) : Contract { + return new Contract(this.address, this.signer, api); + } +} \ No newline at end of file diff --git a/types/contracts/identity.ts b/types/contracts/identity.ts new file mode 100644 index 0000000..85277d2 --- /dev/null +++ b/types/contracts/identity.ts @@ -0,0 +1,107 @@ +/* This file is auto-generated */ + +import type { ApiPromise } from '@polkadot/api'; +import { Abi } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import { ContractPromise } from '@polkadot/api-contract'; +import { ContractAbi } from '../contract-info/identity'; +import QueryMethods from '../query/identity'; +import BuildExtrinsicMethods from '../build-extrinsic/identity'; +import TxSignAndSendMethods from '../tx-sign-and-send/identity'; +import MixedMethods from '../mixed-methods/identity'; +import EventsClass from '../events/identity'; + + +export default class Contract { + readonly query : QueryMethods; + readonly buildExtrinsic : BuildExtrinsicMethods; + readonly tx : TxSignAndSendMethods; + readonly methods : MixedMethods; + readonly events: EventsClass; + + readonly address : string; + readonly signer : KeyringPair; + + private nativeContract : ContractPromise; + private nativeAPI : ApiPromise; + private contractAbi: Abi; + + /** + * @constructor + + * @param address - The address of the contract. + * @param signer - The signer to use for signing transactions. + * @param nativeAPI - The API instance to use for queries. + */ + constructor( + address : string, + signer : KeyringPair, + nativeAPI : ApiPromise, + ) { + this.address = address; + this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); + this.nativeAPI = nativeAPI; + this.signer = signer; + this.contractAbi = new Abi(ContractAbi); + + this.query = new QueryMethods(this.nativeContract, this.nativeAPI, signer.address); + this.buildExtrinsic = new BuildExtrinsicMethods(this.nativeContract, this.nativeAPI); + this.tx = new TxSignAndSendMethods(nativeAPI, this.nativeContract, signer); + this.methods = new MixedMethods(nativeAPI, this.nativeContract, signer); + this.events = new EventsClass(this.nativeContract, nativeAPI); + } + + /** + * name + * + * @returns The name of the contract. + */ + get name() : string { + return this.nativeContract.abi.info.contract.name.toString(); + } + + /** + * abi + * + * @returns The abi of the contract. + */ + get abi() : Abi { + return this.contractAbi; + } + + /** + * withSigner + * + * @param signer - The signer to use for signing transactions. + * @returns New instance of the contract class with new signer. + * @example + * ```typescript + * const contract = new Contract(address, signerAlice, api); + * await contract.mint(signerBob.address, 100); + * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); + * ``` + */ + withSigner(signer : KeyringPair) : Contract { + return new Contract(this.address, signer, this.nativeAPI); + } + + /** + * withAddress + * + * @param address - The address of the contract. + * @returns New instance of the contract class to interact with new contract. + */ + withAddress(address : string) : Contract { + return new Contract(address, this.signer, this.nativeAPI); + } + + /** + * withAPI + * + * @param api - The API instance to use for queries. + * @returns New instance of the contract class to interact with new API. + */ + withAPI(api : ApiPromise) : Contract { + return new Contract(this.address, this.signer, api); + } +} \ No newline at end of file diff --git a/types/data/address_book.json b/types/data/address_book.json new file mode 100644 index 0000000..7735b58 --- /dev/null +++ b/types/data/address_book.json @@ -0,0 +1,351 @@ +{ + "0": { + "name": "Array", + "body": { + "0": { + "name": "Tuple", + "body": { + "0": { + "name": "number", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "1": { + "name": "Option", + "body": { + "0": { + "name": "string", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "1": { + "name": "null", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + }, + "1": { + "name": "Tuple", + "body": { + "0": { + "name": "number", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "1": { + "name": "Option", + "body": { + "0": { + "name": "string", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "1": { + "name": "null", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + }, + "2": { + "name": "number", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "3": { + "name": "Option", + "body": { + "0": { + "name": "string", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "1": { + "name": "null", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + }, + "4": { + "name": "string", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "5": { + "name": "AccountId", + "body": "string | number[]", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "6": { + "name": "Array", + "body": { + "0": { + "name": "number", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + } + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + }, + "7": { + "name": "number", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "9": { + "name": "null", + "isResult": false, + "isPrimitive": true, + "isConvertable": false + }, + "10": { + "name": "LangError", + "body": { + "CouldNotReadInput": null + }, + "isResult": false, + "isPrimitive": false, + "isConvertable": false + }, + "11": { + "name": "Result; +} + +export interface AddressUpdated { + identityNo: number; + network: number; + updatedAddress: Array; +} + +export interface AddressRemoved { + identityNo: number; + network: number; +} + +export interface IdentityRemoved { + identityNo: number; +} + +export interface NetworkAdded { + networkId: number; + rpcUrl: string; + accountType: ReturnTypes.AccountType; +} + +export interface NetworkUpdated { + networkId: number; + rpcUrl: string; + accountType: ReturnTypes.AccountType; +} + +export interface NetworkRemoved { + networkId: number; +} + +export interface RecoveryAccountSet { + identityNo: number; + recoveryAccount: ReturnTypes.AccountId; +} + diff --git a/types/events/address_book.ts b/types/events/address_book.ts new file mode 100644 index 0000000..19ff03c --- /dev/null +++ b/types/events/address_book.ts @@ -0,0 +1,114 @@ +import type * as EventTypes from '../event-types/address_book'; +import type {ContractPromise} from "@polkadot/api-contract"; +import type {ApiPromise} from "@polkadot/api"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; +import {getEventTypeDescription} from "../shared/utils"; +import {handleEventReturn} from "@727-ventures/typechain-types"; + +export default class EventsClass { + private __nativeContract : ContractPromise; + private __api : ApiPromise; + + constructor( + nativeContract : ContractPromise, + api : ApiPromise, + ) { + this.__nativeContract = nativeContract; + this.__api = api; + } + + public subscribeOnAddressBookCreatedEvent(callback : (event : EventTypes.AddressBookCreated) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('AddressBookCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookCreated); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookCreated'); + } + + public subscribeOnAddressBookRemovedEvent(callback : (event : EventTypes.AddressBookRemoved) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('AddressBookRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressBookRemoved); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressBookRemoved'); + } + + public subscribeOnIdentityAddedEvent(callback : (event : EventTypes.IdentityAdded) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('IdentityAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityAdded); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityAdded'); + } + + public subscribeOnNickNameUpdatedEvent(callback : (event : EventTypes.NickNameUpdated) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('NickNameUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NickNameUpdated); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NickNameUpdated'); + } + + public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); + } + + + private __subscribeOnEvent( + callback : (args: any[], event: any) => void, + filter : (eventName: string) => boolean = () => true + ) { + // @ts-ignore + return this.__api.query.system.events((events) => { + events.forEach((record: any) => { + const { event } = record; + + if (event.method == 'ContractEmitted') { + const [address, data] = record.event.data; + + if (address.toString() === this.__nativeContract.address.toString()) { + const {args, event} = this.__nativeContract.abi.decodeEvent(data); + + if (filter(event.identifier.toString())) + callback(args, event); + } + } + }); + }); + } + +} \ No newline at end of file diff --git a/types/events/identity.ts b/types/events/identity.ts new file mode 100644 index 0000000..b84a1d5 --- /dev/null +++ b/types/events/identity.ts @@ -0,0 +1,170 @@ +import type * as EventTypes from '../event-types/identity'; +import type {ContractPromise} from "@polkadot/api-contract"; +import type {ApiPromise} from "@polkadot/api"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; +import {getEventTypeDescription} from "../shared/utils"; +import {handleEventReturn} from "@727-ventures/typechain-types"; + +export default class EventsClass { + private __nativeContract : ContractPromise; + private __api : ApiPromise; + + constructor( + nativeContract : ContractPromise, + api : ApiPromise, + ) { + this.__nativeContract = nativeContract; + this.__api = api; + } + + public subscribeOnIdentityCreatedEvent(callback : (event : EventTypes.IdentityCreated) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('IdentityCreated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityCreated); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityCreated'); + } + + public subscribeOnAddressAddedEvent(callback : (event : EventTypes.AddressAdded) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('AddressAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressAdded); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressAdded'); + } + + public subscribeOnAddressUpdatedEvent(callback : (event : EventTypes.AddressUpdated) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('AddressUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressUpdated); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressUpdated'); + } + + public subscribeOnAddressRemovedEvent(callback : (event : EventTypes.AddressRemoved) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('AddressRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.AddressRemoved); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'AddressRemoved'); + } + + public subscribeOnIdentityRemovedEvent(callback : (event : EventTypes.IdentityRemoved) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('IdentityRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.IdentityRemoved); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'IdentityRemoved'); + } + + public subscribeOnNetworkAddedEvent(callback : (event : EventTypes.NetworkAdded) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('NetworkAdded', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkAdded); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkAdded'); + } + + public subscribeOnNetworkUpdatedEvent(callback : (event : EventTypes.NetworkUpdated) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('NetworkUpdated', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkUpdated); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkUpdated'); + } + + public subscribeOnNetworkRemovedEvent(callback : (event : EventTypes.NetworkRemoved) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('NetworkRemoved', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.NetworkRemoved); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'NetworkRemoved'); + } + + public subscribeOnRecoveryAccountSetEvent(callback : (event : EventTypes.RecoveryAccountSet) => void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('RecoveryAccountSet', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.RecoveryAccountSet); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'RecoveryAccountSet'); + } + + + private __subscribeOnEvent( + callback : (args: any[], event: any) => void, + filter : (eventName: string) => boolean = () => true + ) { + // @ts-ignore + return this.__api.query.system.events((events) => { + events.forEach((record: any) => { + const { event } = record; + + if (event.method == 'ContractEmitted') { + const [address, data] = record.event.data; + + if (address.toString() === this.__nativeContract.address.toString()) { + const {args, event} = this.__nativeContract.abi.decodeEvent(data); + + if (filter(event.identifier.toString())) + callback(args, event); + } + } + }); + }); + } + +} \ No newline at end of file diff --git a/types/mixed-methods/address_book.ts b/types/mixed-methods/address_book.ts new file mode 100644 index 0000000..b305e43 --- /dev/null +++ b/types/mixed-methods/address_book.ts @@ -0,0 +1,150 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/address_book'; +import type * as ReturnTypes from '../types-returns/address_book'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; +import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __callerAddress : string; + private __apiPromise: ApiPromise; + + constructor( + apiPromise : ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + this.__callerAddress = keyringPair.address; + } + + /** + * identityContract + * + * @returns { Result } + */ + "identityContract" ( + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options, (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * createAddressBook + * + * @returns { void } + */ + "createAddressBook" ( + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * removeAddressBook + * + * @returns { void } + */ + "removeAddressBook" ( + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addIdentity + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } nickname, + * @returns { void } + */ + "addIdentity" ( + identityNo: (number | string | BN), + nickname: string | null, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, nickname], __options); + } + + /** + * removeIdentity + * + * @param { (number | string | BN) } identityNo, + * @returns { void } + */ + "removeIdentity" ( + identityNo: (number | string | BN), + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo], __options); + } + + /** + * updateNickname + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } newNickname, + * @returns { void } + */ + "updateNickname" ( + identityNo: (number | string | BN), + newNickname: string | null, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, newNickname], __options); + } + + /** + * identitiesOf + * + * @param { ArgumentTypes.AccountId } account, + * @returns { Result, ReturnTypes.LangError> } + */ + "identitiesOf" ( + account: ArgumentTypes.AccountId, + __options: GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options, (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * hasAddressBook + * + * @returns { Result } + */ + "hasAddressBook" ( + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options, (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); + } + +} \ No newline at end of file diff --git a/types/mixed-methods/identity.ts b/types/mixed-methods/identity.ts new file mode 100644 index 0000000..c2485c2 --- /dev/null +++ b/types/mixed-methods/identity.ts @@ -0,0 +1,274 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryOkJSON, queryJSON, handleReturnType } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/identity'; +import type * as ReturnTypes from '../types-returns/identity'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; +import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __callerAddress : string; + private __apiPromise: ApiPromise; + + constructor( + apiPromise : ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + this.__callerAddress = keyringPair.address; + } + + /** + * identity + * + * @param { (number | string | BN) } identityNo, + * @returns { Result } + */ + "identity" ( + identityNo: (number | string | BN), + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * ownerOf + * + * @param { (number | string | BN) } identityNo, + * @returns { Result } + */ + "ownerOf" ( + identityNo: (number | string | BN), + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options, (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * identityOf + * + * @param { ArgumentTypes.AccountId } owner, + * @returns { Result } + */ + "identityOf" ( + owner: ArgumentTypes.AccountId, + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options, (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * networkInfoOf + * + * @param { (number | string | BN) } networkId, + * @returns { Result } + */ + "networkInfoOf" ( + networkId: (number | string | BN), + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options, (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * transactionDestination + * + * @param { (number | string | BN) } receiver, + * @param { (number | string | BN) } network, + * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } + */ + "transactionDestination" ( + receiver: (number | string | BN), + network: (number | string | BN), + __options: GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options, (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * availableNetworks + * + * @returns { Result, ReturnTypes.LangError> } + */ + "availableNetworks" ( + __options: GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options, (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * createIdentity + * + * @returns { void } + */ + "createIdentity" ( + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + * @returns { void } + */ + "addAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network, address], __options); + } + + /** + * updateAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + * @returns { void } + */ + "updateAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network, address], __options); + } + + /** + * removeAddress + * + * @param { (number | string | BN) } network, + * @returns { void } + */ + "removeAddress" ( + network: (number | string | BN), + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network], __options); + } + + /** + * removeIdentity + * + * @returns { void } + */ + "removeIdentity" ( + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addNetwork + * + * @param { ArgumentTypes.NetworkInfo } info, + * @returns { void } + */ + "addNetwork" ( + info: ArgumentTypes.NetworkInfo, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [info], __options); + } + + /** + * updateNetwork + * + * @param { (number | string | BN) } networkId, + * @param { string | null } newRpcUrl, + * @param { ArgumentTypes.AccountType | null } newAddressType, + * @returns { void } + */ + "updateNetwork" ( + networkId: (number | string | BN), + newRpcUrl: string | null, + newAddressType: ArgumentTypes.AccountType | null, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [networkId, newRpcUrl, newAddressType], __options); + } + + /** + * removeNetwork + * + * @param { (number | string | BN) } networkId, + * @returns { void } + */ + "removeNetwork" ( + networkId: (number | string | BN), + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [networkId], __options); + } + + /** + * setRecoveryAccount + * + * @param { ArgumentTypes.AccountId } recoveryAccount, + * @returns { void } + */ + "setRecoveryAccount" ( + recoveryAccount: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [recoveryAccount], __options); + } + + /** + * transferOwnership + * + * @param { (number | string | BN) } identityNo, + * @param { ArgumentTypes.AccountId } newOwner, + * @returns { void } + */ + "transferOwnership" ( + identityNo: (number | string | BN), + newOwner: ArgumentTypes.AccountId, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, newOwner], __options); + } + +} \ No newline at end of file diff --git a/types/query/address_book.ts b/types/query/address_book.ts new file mode 100644 index 0000000..bb1a8f6 --- /dev/null +++ b/types/query/address_book.ts @@ -0,0 +1,132 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/address_book'; +import type * as ReturnTypes from '../types-returns/address_book'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +import DATA_TYPE_DESCRIPTIONS from '../data/address_book.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __apiPromise: ApiPromise; + private __callerAddress : string; + + constructor( + nativeContract : ContractPromise, + nativeApi : ApiPromise, + callerAddress : string, + ) { + this.__nativeContract = nativeContract; + this.__callerAddress = callerAddress; + this.__apiPromise = nativeApi; + } + + /** + * identityContract + * + * @returns { Result } + */ + "identityContract" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityContract", [], __options , (result) => { return handleReturnType(result, getTypeDescription(11, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * createAddressBook + * + * @returns { Result, ReturnTypes.LangError> } + */ + "createAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * removeAddressBook + * + * @returns { Result, ReturnTypes.LangError> } + */ + "removeAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * addIdentity + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } nickname, + * @returns { Result, ReturnTypes.LangError> } + */ + "addIdentity" ( + identityNo: (number | string | BN), + nickname: string | null, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addIdentity", [identityNo, nickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * removeIdentity + * + * @param { (number | string | BN) } identityNo, + * @returns { Result, ReturnTypes.LangError> } + */ + "removeIdentity" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * updateNickname + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } newNickname, + * @returns { Result, ReturnTypes.LangError> } + */ + "updateNickname" ( + identityNo: (number | string | BN), + newNickname: string | null, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNickname", [identityNo, newNickname], __options , (result) => { return handleReturnType(result, getTypeDescription(12, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * identitiesOf + * + * @param { ArgumentTypes.AccountId } account, + * @returns { Result, ReturnTypes.LangError> } + */ + "identitiesOf" ( + account: ArgumentTypes.AccountId, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identitiesOf", [account], __options , (result) => { return handleReturnType(result, getTypeDescription(15, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * hasAddressBook + * + * @returns { Result } + */ + "hasAddressBook" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "hasAddressBook", [], __options , (result) => { return handleReturnType(result, getTypeDescription(16, DATA_TYPE_DESCRIPTIONS)); }); + } + +} \ No newline at end of file diff --git a/types/query/identity.ts b/types/query/identity.ts new file mode 100644 index 0000000..dede6d4 --- /dev/null +++ b/types/query/identity.ts @@ -0,0 +1,246 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import type { QueryReturnType } from '@727-ventures/typechain-types'; +import { queryJSON, queryOkJSON, handleReturnType } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/identity'; +import type * as ReturnTypes from '../types-returns/identity'; +import type BN from 'bn.js'; +//@ts-ignore +import {ReturnNumber} from '@727-ventures/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +import DATA_TYPE_DESCRIPTIONS from '../data/identity.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __apiPromise: ApiPromise; + private __callerAddress : string; + + constructor( + nativeContract : ContractPromise, + nativeApi : ApiPromise, + callerAddress : string, + ) { + this.__nativeContract = nativeContract; + this.__callerAddress = callerAddress; + this.__apiPromise = nativeApi; + } + + /** + * identity + * + * @param { (number | string | BN) } identityNo, + * @returns { Result } + */ + "identity" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identity", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(14, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * ownerOf + * + * @param { (number | string | BN) } identityNo, + * @returns { Result } + */ + "ownerOf" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "ownerOf", [identityNo], __options , (result) => { return handleReturnType(result, getTypeDescription(17, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * identityOf + * + * @param { ArgumentTypes.AccountId } owner, + * @returns { Result } + */ + "identityOf" ( + owner: ArgumentTypes.AccountId, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "identityOf", [owner], __options , (result) => { return handleReturnType(result, getTypeDescription(19, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * networkInfoOf + * + * @param { (number | string | BN) } networkId, + * @returns { Result } + */ + "networkInfoOf" ( + networkId: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "networkInfoOf", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(21, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * transactionDestination + * + * @param { (number | string | BN) } receiver, + * @param { (number | string | BN) } network, + * @returns { Result, ReturnTypes.Error>, ReturnTypes.LangError> } + */ + "transactionDestination" ( + receiver: (number | string | BN), + network: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.Error>, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transactionDestination", [receiver, network], __options , (result) => { return handleReturnType(result, getTypeDescription(23, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * availableNetworks + * + * @returns { Result, ReturnTypes.LangError> } + */ + "availableNetworks" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "availableNetworks", [], __options , (result) => { return handleReturnType(result, getTypeDescription(26, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * createIdentity + * + * @returns { Result, ReturnTypes.LangError> } + */ + "createIdentity" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "createIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * addAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + * @returns { Result, ReturnTypes.LangError> } + */ + "addAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * updateAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + * @returns { Result, ReturnTypes.LangError> } + */ + "updateAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateAddress", [network, address], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * removeAddress + * + * @param { (number | string | BN) } network, + * @returns { Result, ReturnTypes.LangError> } + */ + "removeAddress" ( + network: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeAddress", [network], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * removeIdentity + * + * @returns { Result, ReturnTypes.LangError> } + */ + "removeIdentity" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeIdentity", [], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * addNetwork + * + * @param { ArgumentTypes.NetworkInfo } info, + * @returns { Result, ReturnTypes.LangError> } + */ + "addNetwork" ( + info: ArgumentTypes.NetworkInfo, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "addNetwork", [info], __options , (result) => { return handleReturnType(result, getTypeDescription(29, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * updateNetwork + * + * @param { (number | string | BN) } networkId, + * @param { string | null } newRpcUrl, + * @param { ArgumentTypes.AccountType | null } newAddressType, + * @returns { Result, ReturnTypes.LangError> } + */ + "updateNetwork" ( + networkId: (number | string | BN), + newRpcUrl: string | null, + newAddressType: ArgumentTypes.AccountType | null, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "updateNetwork", [networkId, newRpcUrl, newAddressType], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * removeNetwork + * + * @param { (number | string | BN) } networkId, + * @returns { Result, ReturnTypes.LangError> } + */ + "removeNetwork" ( + networkId: (number | string | BN), + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "removeNetwork", [networkId], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * setRecoveryAccount + * + * @param { ArgumentTypes.AccountId } recoveryAccount, + * @returns { Result, ReturnTypes.LangError> } + */ + "setRecoveryAccount" ( + recoveryAccount: ArgumentTypes.AccountId, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "setRecoveryAccount", [recoveryAccount], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * transferOwnership + * + * @param { (number | string | BN) } identityNo, + * @param { ArgumentTypes.AccountId } newOwner, + * @returns { Result, ReturnTypes.LangError> } + */ + "transferOwnership" ( + identityNo: (number | string | BN), + newOwner: ArgumentTypes.AccountId, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result, ReturnTypes.LangError> > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "transferOwnership", [identityNo, newOwner], __options , (result) => { return handleReturnType(result, getTypeDescription(31, DATA_TYPE_DESCRIPTIONS)); }); + } + +} \ No newline at end of file diff --git a/types/tx-sign-and-send/address_book.ts b/types/tx-sign-and-send/address_book.ts new file mode 100644 index 0000000..705ce90 --- /dev/null +++ b/types/tx-sign-and-send/address_book.ts @@ -0,0 +1,139 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/address_book'; +import type BN from 'bn.js'; +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/address_book.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __apiPromise: ApiPromise; + + constructor( + apiPromise: ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + } + + /** + * identityContract + * + */ + "identityContract" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityContract", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * createAddressBook + * + */ + "createAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createAddressBook", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * removeAddressBook + * + */ + "removeAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddressBook", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addIdentity + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } nickname, + */ + "addIdentity" ( + identityNo: (number | string | BN), + nickname: string | null, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, nickname], __options); + } + + /** + * removeIdentity + * + * @param { (number | string | BN) } identityNo, + */ + "removeIdentity" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo], __options); + } + + /** + * updateNickname + * + * @param { (number | string | BN) } identityNo, + * @param { string | null } newNickname, + */ + "updateNickname" ( + identityNo: (number | string | BN), + newNickname: string | null, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNickname", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, newNickname], __options); + } + + /** + * identitiesOf + * + * @param { ArgumentTypes.AccountId } account, + */ + "identitiesOf" ( + account: ArgumentTypes.AccountId, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identitiesOf", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [account], __options); + } + + /** + * hasAddressBook + * + */ + "hasAddressBook" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "hasAddressBook", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + +} \ No newline at end of file diff --git a/types/tx-sign-and-send/identity.ts b/types/tx-sign-and-send/identity.ts new file mode 100644 index 0000000..8698e12 --- /dev/null +++ b/types/tx-sign-and-send/identity.ts @@ -0,0 +1,261 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@727-ventures/typechain-types'; +import { txSignAndSend } from '@727-ventures/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/identity'; +import type BN from 'bn.js'; +// @ts-ignore +import type {EventRecord} from "@polkadot/api/submittable"; +import {decodeEvents} from "../shared/utils"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/identity.json'; + + +export default class Methods { + private __nativeContract : ContractPromise; + private __keyringPair : KeyringPair; + private __apiPromise: ApiPromise; + + constructor( + apiPromise: ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + } + + /** + * identity + * + * @param { (number | string | BN) } identityNo, + */ + "identity" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo], __options); + } + + /** + * ownerOf + * + * @param { (number | string | BN) } identityNo, + */ + "ownerOf" ( + identityNo: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "ownerOf", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo], __options); + } + + /** + * identityOf + * + * @param { ArgumentTypes.AccountId } owner, + */ + "identityOf" ( + owner: ArgumentTypes.AccountId, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "identityOf", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [owner], __options); + } + + /** + * networkInfoOf + * + * @param { (number | string | BN) } networkId, + */ + "networkInfoOf" ( + networkId: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "networkInfoOf", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [networkId], __options); + } + + /** + * transactionDestination + * + * @param { (number | string | BN) } receiver, + * @param { (number | string | BN) } network, + */ + "transactionDestination" ( + receiver: (number | string | BN), + network: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transactionDestination", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [receiver, network], __options); + } + + /** + * availableNetworks + * + */ + "availableNetworks" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "availableNetworks", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * createIdentity + * + */ + "createIdentity" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "createIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + */ + "addAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network, address], __options); + } + + /** + * updateAddress + * + * @param { (number | string | BN) } network, + * @param { Array<(number | string | BN)> } address, + */ + "updateAddress" ( + network: (number | string | BN), + address: Array<(number | string | BN)>, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network, address], __options); + } + + /** + * removeAddress + * + * @param { (number | string | BN) } network, + */ + "removeAddress" ( + network: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeAddress", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [network], __options); + } + + /** + * removeIdentity + * + */ + "removeIdentity" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeIdentity", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * addNetwork + * + * @param { ArgumentTypes.NetworkInfo } info, + */ + "addNetwork" ( + info: ArgumentTypes.NetworkInfo, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "addNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [info], __options); + } + + /** + * updateNetwork + * + * @param { (number | string | BN) } networkId, + * @param { string | null } newRpcUrl, + * @param { ArgumentTypes.AccountType | null } newAddressType, + */ + "updateNetwork" ( + networkId: (number | string | BN), + newRpcUrl: string | null, + newAddressType: ArgumentTypes.AccountType | null, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "updateNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [networkId, newRpcUrl, newAddressType], __options); + } + + /** + * removeNetwork + * + * @param { (number | string | BN) } networkId, + */ + "removeNetwork" ( + networkId: (number | string | BN), + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "removeNetwork", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [networkId], __options); + } + + /** + * setRecoveryAccount + * + * @param { ArgumentTypes.AccountId } recoveryAccount, + */ + "setRecoveryAccount" ( + recoveryAccount: ArgumentTypes.AccountId, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setRecoveryAccount", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [recoveryAccount], __options); + } + + /** + * transferOwnership + * + * @param { (number | string | BN) } identityNo, + * @param { ArgumentTypes.AccountId } newOwner, + */ + "transferOwnership" ( + identityNo: (number | string | BN), + newOwner: ArgumentTypes.AccountId, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "transferOwnership", (events: EventRecord) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [identityNo, newOwner], __options); + } + +} \ No newline at end of file diff --git a/types/types-arguments/address_book.ts b/types/types-arguments/address_book.ts new file mode 100644 index 0000000..d85fb9e --- /dev/null +++ b/types/types-arguments/address_book.ts @@ -0,0 +1,17 @@ +import type BN from 'bn.js'; + +export type AccountId = string | number[] + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export enum Error { + addressBookAlreadyCreated = 'AddressBookAlreadyCreated', + addressBookDoesntExist = 'AddressBookDoesntExist', + identityDoesntExist = 'IdentityDoesntExist', + identityNotAdded = 'IdentityNotAdded', + identityAlreadyAdded = 'IdentityAlreadyAdded', + nickNameTooLong = 'NickNameTooLong' +} + diff --git a/types/types-arguments/identity.ts b/types/types-arguments/identity.ts new file mode 100644 index 0000000..4155926 --- /dev/null +++ b/types/types-arguments/identity.ts @@ -0,0 +1,33 @@ +import type BN from 'bn.js'; + +export type AccountId = string | number[] + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export type NetworkInfo = { + rpcUrl: string, + accountType: AccountType +} + +export enum AccountType { + accountId32 = 'AccountId32', + accountKey20 = 'AccountKey20' +} + +export type IdentityInfo = { + addresses: Array<[(number | string | BN), Array<(number | string | BN)>]> +} + +export enum Error { + notAllowed = 'NotAllowed', + identityDoesntExist = 'IdentityDoesntExist', + addressAlreadyAdded = 'AddressAlreadyAdded', + invalidNetwork = 'InvalidNetwork', + addressSizeExceeded = 'AddressSizeExceeded', + networkNameTooLong = 'NetworkNameTooLong', + networkRpcUrlTooLong = 'NetworkRpcUrlTooLong', + alreadyIdentityOwner = 'AlreadyIdentityOwner' +} + diff --git a/types/types-returns/address_book.ts b/types/types-returns/address_book.ts new file mode 100644 index 0000000..a0f027f --- /dev/null +++ b/types/types-returns/address_book.ts @@ -0,0 +1,18 @@ +import type BN from 'bn.js'; +import type {ReturnNumber} from '@727-ventures/typechain-types'; + +export type AccountId = string | number[] + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export enum Error { + addressBookAlreadyCreated = 'AddressBookAlreadyCreated', + addressBookDoesntExist = 'AddressBookDoesntExist', + identityDoesntExist = 'IdentityDoesntExist', + identityNotAdded = 'IdentityNotAdded', + identityAlreadyAdded = 'IdentityAlreadyAdded', + nickNameTooLong = 'NickNameTooLong' +} + diff --git a/types/types-returns/identity.ts b/types/types-returns/identity.ts new file mode 100644 index 0000000..8d9ca47 --- /dev/null +++ b/types/types-returns/identity.ts @@ -0,0 +1,34 @@ +import type BN from 'bn.js'; +import type {ReturnNumber} from '@727-ventures/typechain-types'; + +export type AccountId = string | number[] + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export type NetworkInfo = { + rpcUrl: string, + accountType: AccountType +} + +export enum AccountType { + accountId32 = 'AccountId32', + accountKey20 = 'AccountKey20' +} + +export type IdentityInfo = { + addresses: Array<[number, Array]> +} + +export enum Error { + notAllowed = 'NotAllowed', + identityDoesntExist = 'IdentityDoesntExist', + addressAlreadyAdded = 'AddressAlreadyAdded', + invalidNetwork = 'InvalidNetwork', + addressSizeExceeded = 'AddressSizeExceeded', + networkNameTooLong = 'NetworkNameTooLong', + networkRpcUrlTooLong = 'NetworkRpcUrlTooLong', + alreadyIdentityOwner = 'AlreadyIdentityOwner' +} + From 3dd00df2330f637c1e40ea924d6bc158bf459a0f Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Wed, 26 Jul 2023 08:37:46 -0700 Subject: [PATCH 18/45] Reserve Transfer Asset --- .../transactionRouter/reserveTransfer.ts | 90 +++++++++++++++++++ src/utils/transactionRouter/transferAsset.ts | 5 -- 2 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 src/utils/transactionRouter/reserveTransfer.ts diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts new file mode 100644 index 0000000..978aac9 --- /dev/null +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -0,0 +1,90 @@ +import { ApiPromise } from "@polkadot/api"; +import { KeyringPair } from "@polkadot/keyring/types"; + +import { Fungible, Receiver } from "./types"; +import { AccountType } from "../../../types/types-arguments/identity"; + +class ReserveTransfer { + public static async send( + originApi: ApiPromise, + destinationApi: ApiPromise, + sender: KeyringPair, + receiver: Receiver, + asset: Fungible + ): Promise { + if (!(destinationApi.tx.xcmPallet || destinationApi.tx.polkadotXcm)) { + throw new Error("The destination blockchain does not support XCM"); + } + + let isPara = false; + if (destinationApi.query.parachainSystem) { + const chain = await destinationApi.rpc.system.chain(); + isPara = true; + } + + const multiAsset = this.getMultiAsset(asset); + if (originApi.tx.xcmPallet) { + const reserveTransfer = originApi.tx.xcmPallet.reserveTransferAssets( + + ) + } else if (originApi.tx.polkadotXcm) { + + } else { + throw new Error("The blockchain does not support XCM"); + } + } + + private static getDestination(receiver: Receiver, paraId: number, isPara: boolean): any { + let receiverAccount; + if (receiver.type == AccountType.accountId32) { + receiverAccount = { + AccountId32: { + network: "Any", + id: receiver.addressRaw, + }, + }; + } else if (receiver.type == AccountType.accountKey20) { + receiverAccount = { + AccountKey20: { + network: "Any", + id: receiver.addressRaw, + }, + }; + } + + if (isPara) { + return { + V2: [ + { + parents: 1, + interior: { + X2: [ + { Parachain: paraId }, + receiverAccount + ] + } + } + ] + } + } else { + + } + } + + private static getMultiAsset(asset: Fungible): any { + return { + V2: [ + { + fun: { + Fungible: asset.amount, + }, + id: { + Concrete: asset.multiAsset, + }, + }, + ] + } + } +} + +export default ReserveTransfer; diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index b9ea65b..c6bbeaf 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -18,11 +18,6 @@ class TransferAsset { // standardized and as far as the chain has an XCM executor the transaction // will be executed correctly. - const chainInfo = api.registry.getChainProperties(); - if (!chainInfo) { - throw new Error("Failed to get chain info"); - } - const xcm = this.xcmTransferAssetMessage( receiver.addressRaw, receiver.type, From 7736956d245c04c4bab721791190a9233acc1c68 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 28 Jul 2023 08:05:10 -0700 Subject: [PATCH 19/45] complete reserveTransfer untested --- .../transactionRouter/reserveTransfer.ts | 66 ++++++++++++++++--- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 978aac9..0a917ec 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -16,22 +16,41 @@ class ReserveTransfer { throw new Error("The destination blockchain does not support XCM"); } - let isPara = false; - if (destinationApi.query.parachainSystem) { - const chain = await destinationApi.rpc.system.chain(); - isPara = true; + let paraId: number = -1; + if (destinationApi.query.parachainInfo) { + paraId = Number((await destinationApi.query.parachainInfo.parachainId()).toHuman()); } + const destination = this.getDestination(receiver, paraId, paraId >= 0); + const beneficiary = this.getBeneficiary(receiver); const multiAsset = this.getMultiAsset(asset); - if (originApi.tx.xcmPallet) { - const reserveTransfer = originApi.tx.xcmPallet.reserveTransferAssets( - ) + let reserveTransfer: any; + if (originApi.tx.xcmPallet) { + reserveTransfer = originApi.tx.xcmPallet.reserveTransferAssets( + destination, + beneficiary, + multiAsset + ); } else if (originApi.tx.polkadotXcm) { - + reserveTransfer = originApi.tx.polkadotXcm.reserveTransferAssets( + destination, + beneficiary, + multiAsset + ); } else { throw new Error("The blockchain does not support XCM"); } + + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve) => { + const unsub = await reserveTransfer.signAndSend(sender, (result: any) => { + if (result.status.isFinalized) { + unsub(); + resolve(); + } + }) + }); } private static getDestination(receiver: Receiver, paraId: number, isPara: boolean): any { @@ -58,17 +77,44 @@ class ReserveTransfer { { parents: 1, interior: { - X2: [ + X1: [ { Parachain: paraId }, - receiverAccount ] } } ] } } else { + return { + V2: [ + { + parents: 1, + interior: "Here" + } + ] + } + } + } + private static getBeneficiary(receiver: Receiver) { + let receiverAccount; + if (receiver.type == AccountType.accountId32) { + receiverAccount = { + AccountId32: { + network: "Any", + id: receiver.addressRaw, + }, + }; + } else if (receiver.type == AccountType.accountKey20) { + receiverAccount = { + AccountKey20: { + network: "Any", + id: receiver.addressRaw, + }, + }; } + + return } private static getMultiAsset(asset: Fungible): any { From 6613ac182eef8457ec8540da19fe782131e8b3ff Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 28 Jul 2023 08:09:22 -0700 Subject: [PATCH 20/45] fix --- src/utils/transactionRouter/reserveTransfer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 0a917ec..66f80af 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -114,7 +114,7 @@ class ReserveTransfer { }; } - return + return receiverAccount; } private static getMultiAsset(asset: Fungible): any { From 1e22f2fb574746b5982aa0bc239d2a721c92bced Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 28 Jul 2023 08:48:20 -0700 Subject: [PATCH 21/45] lint fix --- .../transactionRouter/reserveTransfer.ts | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 66f80af..7095333 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -16,7 +16,7 @@ class ReserveTransfer { throw new Error("The destination blockchain does not support XCM"); } - let paraId: number = -1; + let paraId = -1; if (destinationApi.query.parachainInfo) { paraId = Number((await destinationApi.query.parachainInfo.parachainId()).toHuman()); } @@ -54,23 +54,6 @@ class ReserveTransfer { } private static getDestination(receiver: Receiver, paraId: number, isPara: boolean): any { - let receiverAccount; - if (receiver.type == AccountType.accountId32) { - receiverAccount = { - AccountId32: { - network: "Any", - id: receiver.addressRaw, - }, - }; - } else if (receiver.type == AccountType.accountKey20) { - receiverAccount = { - AccountKey20: { - network: "Any", - id: receiver.addressRaw, - }, - }; - } - if (isPara) { return { V2: [ From ac5ab71401b604ae226532d4979c3eb37abc5f75 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sat, 29 Jul 2023 20:26:37 -0700 Subject: [PATCH 22/45] hrmp between parachains in zombienet & tests boilerplate --- __tests__/crossChainRouter.test.ts | 145 +++++++++++++++++++++++++++++ local_network.toml | 23 +++++ 2 files changed, 168 insertions(+) create mode 100644 __tests__/crossChainRouter.test.ts diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts new file mode 100644 index 0000000..7530962 --- /dev/null +++ b/__tests__/crossChainRouter.test.ts @@ -0,0 +1,145 @@ +import { ApiPromise, Keyring, WsProvider } from "@polkadot/api"; +import { KeyringPair } from "@polkadot/keyring/types"; + +import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; + +import TransactionRouter from "../src/utils/transactionRouter"; +import IdentityContractFactory from "../types/constructors/identity"; +import IdentityContract from "../types/contracts/identity"; +import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; + +const wsProvider = new WsProvider("ws://127.0.0.1:9944"); +const keyring = new Keyring({ type: "sr25519" }); + +describe("TransactionRouter Cross-chain", () => { + let swankyApi: ApiPromise; + let alice: KeyringPair; + let bob: KeyringPair; + let identityContract: any; + + beforeEach(async function (): Promise { + swankyApi = await ApiPromise.create({ + provider: wsProvider, + noInitWarn: true, + }); + alice = keyring.addFromUri("//Alice"); + bob = keyring.addFromUri("//Bob"); + + const factory = new IdentityContractFactory(swankyApi, alice); + identityContract = new IdentityContract( + (await factory.new()).address, + alice, + swankyApi + ); + + await addNetwork(identityContract, alice, { + rpcUrl: "ws://127.0.0.1:4243", + accountType: AccountType.accountId32, + }); + + await addNetwork(identityContract, alice, { + rpcUrl: "ws://127.0.0.1:4244", + accountType: AccountType.accountId32, + }); + }); + + it("Transferring cross-chain works", async () => { + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 0, + }; + + // We have two asset hubs in our local network. + + const assetHub1Provider = new WsProvider("ws://127.0.0.1:4243"); + const assetHub1Api = await ApiPromise.create({ + provider: assetHub1Provider, + }); + + const assetHub2Provider = new WsProvider("ws://127.0.0.1:4244"); + const assetHub2Api = await ApiPromise.create({ + provider: assetHub1Provider, + }); + + // Create assets on both networks + + if (!(await getAsset(assetHub1Api, 0))) { + await createAsset(assetHub1Api, sender.keypair, 0); + } + + if (!(await getAsset(assetHub2Api, 0))) { + await createAsset(assetHub2Api, sender.keypair, 0); + } + + // Mint some assets to the creator. + await mintAsset(assetHub1Api, sender.keypair, 0, 500); + + }, 15000); +}); + +const addNetwork = async ( + contract: IdentityContract, + signer: KeyringPair, + network: NetworkInfo +): Promise => { + await contract + .withSigner(signer) + .tx.addNetwork(network); +}; + +const createAsset = async ( + api: ApiPromise, + signer: KeyringPair, + id: number +): Promise => { + const callTx = async (resolve: () => void) => { + const unsub = await api.tx.assets + .create( + id, + // Admin: + signer.address, + 10 // min balance + ) + .signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + }; + return new Promise(callTx); +}; + +const mintAsset = async ( + api: ApiPromise, + signer: KeyringPair, + id: number, + amount: number +): Promise => { + const callTx = async (resolve: () => void) => { + const unsub = await api.tx.assets + .mint( + id, + signer.address, // beneficiary + amount + ) + .signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + }; + return new Promise(callTx); +}; + +const getAsset = async (api: ApiPromise, id: number): Promise => { + return (await api.query.assets.asset(id)).toHuman(); +}; + diff --git a/local_network.toml b/local_network.toml index ad11f18..f325ddb 100644 --- a/local_network.toml +++ b/local_network.toml @@ -27,3 +27,26 @@ cumulus_based = true name = "westmint-collator-01" command = "./bin/polkadot-parachain" args = ["--log=xcm=trace,pallet-assets=trace"] + +[[parachains]] +id = 1001 +chain = "westmint-local" +cumulus_based = true + + [parachains.collator] + ws_port = 4244 + name = "westmint-collator-02" + command = "./bin/polkadot-parachain" + args = ["--log=xcm=trace,pallet-assets=trace"] + +[[hrmp_channels]] +sender = 1000 +recipient = 1001 +max_capacity = 8 +max_message_size = 8000 + +[[hrmp_channels]] +sender = 1001 +recipient = 1000 +max_capacity = 8 +max_message_size = 8000 From c61b4f1557c1d5950a9f56c56441f53f9ddb45b3 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 7 Aug 2023 22:24:52 -0700 Subject: [PATCH 23/45] good progress --- __tests__/crossChainRouter.test.ts | 56 +++++++++++-------- src/utils/transactionRouter/index.ts | 33 ++++++++--- .../transactionRouter/reserveTransfer.ts | 27 ++++++--- 3 files changed, 79 insertions(+), 37 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 7530962..a7097d0 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -33,12 +33,12 @@ describe("TransactionRouter Cross-chain", () => { ); await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:4243", + rpcUrl: "ws://127.0.0.1:9910", accountType: AccountType.accountId32, }); await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:4244", + rpcUrl: "ws://127.0.0.1:9920", accountType: AccountType.accountId32, }); }); @@ -52,35 +52,51 @@ describe("TransactionRouter Cross-chain", () => { const receiver: Receiver = { addressRaw: bob.addressRaw, type: AccountType.accountId32, - network: 0, + network: 1, }; // We have two asset hubs in our local network. - const assetHub1Provider = new WsProvider("ws://127.0.0.1:4243"); - const assetHub1Api = await ApiPromise.create({ - provider: assetHub1Provider, + const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubApi = await ApiPromise.create({ + provider: assetHubProvider, }); - const assetHub2Provider = new WsProvider("ws://127.0.0.1:4244"); - const assetHub2Api = await ApiPromise.create({ - provider: assetHub1Provider, + const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistApi = await ApiPromise.create({ + provider: trappistProvider, }); // Create assets on both networks - if (!(await getAsset(assetHub1Api, 0))) { - await createAsset(assetHub1Api, sender.keypair, 0); + if (!(await getAsset(assetHubApi, 0))) { + await createAsset(assetHubApi, sender.keypair, 0); } - if (!(await getAsset(assetHub2Api, 0))) { - await createAsset(assetHub2Api, sender.keypair, 0); + if (!(await getAsset(trappistApi, 0))) { + await createAsset(trappistApi, sender.keypair, 0); } // Mint some assets to the creator. - await mintAsset(assetHub1Api, sender.keypair, 0, 500); + await mintAsset(assetHubApi, sender.keypair, 0, 500); - }, 15000); + const amount = Math.pow(10, 12); + + const asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0, + }, + amount + }; + + await TransactionRouter.sendTokens( + identityContract, + sender, + receiver, + asset + ); + }, 60000); }); const addNetwork = async ( @@ -99,13 +115,8 @@ const createAsset = async ( id: number ): Promise => { const callTx = async (resolve: () => void) => { - const unsub = await api.tx.assets - .create( - id, - // Admin: - signer.address, - 10 // min balance - ) + let forceCreate = api.tx.assets.forceCreate(id, signer.address, true, 10); + const unsub = await api.tx.sudo.sudo(forceCreate) .signAndSend(signer, (result: any) => { if (result.status.isInBlock) { unsub(); @@ -142,4 +153,3 @@ const mintAsset = async ( const getAsset = async (api: ApiPromise, id: number): Promise => { return (await api.query.assets.asset(id)).toHuman(); }; - diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 162f32b..d692cba 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -3,6 +3,7 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import TransferAsset from "./transferAsset"; import { Fungible, Receiver, Sender } from "./types"; import IdentityContract from "../../../types/contracts/identity"; +import ReserveTransfer from "./reserveTransfer"; class TransactionRouter { public static async sendTokens( @@ -11,17 +12,13 @@ class TransactionRouter { receiver: Receiver, asset: Fungible ): Promise { + console.log("HEY"); if (sender.network === receiver.network && sender.keypair.addressRaw === receiver.addressRaw) { throw new Error("Cannot send tokens to yourself"); } if (sender.network === receiver.network) { - // We will extract all the chain information from the RPC node. - const rpcUrl = (await identityContract.query.networkInfoOf(sender.network)).value - .ok?.rpcUrl; - - const wsProvider = new WsProvider(rpcUrl); - const api = await ApiPromise.create({ provider: wsProvider }); + const api = await this.getApi(identityContract, sender.network); await TransferAsset.send( api, @@ -30,9 +27,31 @@ class TransactionRouter { asset ); } else { - // Send cross-chain. + const originApi = await this.getApi(identityContract, sender.network); + const destApi = await this.getApi(identityContract, receiver.network); + + console.log("HEY 2"); + await ReserveTransfer.send( + originApi, + destApi, + sender.keypair, + receiver, + asset + ); } } + + private static async getApi(identityContract: IdentityContract, networkId: number): Promise { + const rpcUrl = (await identityContract.query.networkInfoOf(networkId)).value + .ok?.rpcUrl; + + console.log(rpcUrl); + + const wsProvider = new WsProvider(rpcUrl); + const api = await ApiPromise.create({ provider: wsProvider }); + + return api; + } } export default TransactionRouter; diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 7095333..e292c12 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -21,22 +21,31 @@ class ReserveTransfer { paraId = Number((await destinationApi.query.parachainInfo.parachainId()).toHuman()); } - const destination = this.getDestination(receiver, paraId, paraId >= 0); + console.log("Reserve transferring"); + + const destination = this.getDestination(paraId, paraId >= 0); const beneficiary = this.getBeneficiary(receiver); const multiAsset = this.getMultiAsset(asset); + const feeAssetItem = 0; + const weightLimit = "Unlimited"; + let reserveTransfer: any; if (originApi.tx.xcmPallet) { - reserveTransfer = originApi.tx.xcmPallet.reserveTransferAssets( + reserveTransfer = originApi.tx.xcmPallet.limitedReserveTransferAssets( destination, beneficiary, - multiAsset + multiAsset, + feeAssetItem, + weightLimit ); } else if (originApi.tx.polkadotXcm) { - reserveTransfer = originApi.tx.polkadotXcm.reserveTransferAssets( + reserveTransfer = originApi.tx.polkadotXcm.limitedReserveTransferAssets( destination, beneficiary, - multiAsset + multiAsset, + feeAssetItem, + weightLimit ); } else { throw new Error("The blockchain does not support XCM"); @@ -53,7 +62,7 @@ class ReserveTransfer { }); } - private static getDestination(receiver: Receiver, paraId: number, isPara: boolean): any { + private static getDestination(paraId: number, isPara: boolean): any { if (isPara) { return { V2: [ @@ -97,7 +106,11 @@ class ReserveTransfer { }; } - return receiverAccount; + return { + V2: [ + receiverAccount + ] + }; } private static getMultiAsset(asset: Fungible): any { From 03574acbf8ed816f2bbb918d3078a8dbd3a95850 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Wed, 9 Aug 2023 08:46:48 -0700 Subject: [PATCH 24/45] working --- __tests__/crossChainRouter.test.ts | 13 +++-- __tests__/transactionRouter.test.ts | 24 ++++---- src/utils/transactionRouter/index.ts | 4 -- .../transactionRouter/reserveTransfer.ts | 57 +++++++++++-------- 4 files changed, 52 insertions(+), 46 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index a7097d0..da513d1 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -80,11 +80,16 @@ describe("TransactionRouter Cross-chain", () => { // Mint some assets to the creator. await mintAsset(assetHubApi, sender.keypair, 0, 500); - const amount = Math.pow(10, 12); + const amount = 200; const asset: Fungible = { multiAsset: { - interior: "Here", + interior: { + X2: [ + { PalletInstance: 50 }, + { GeneralIndex: 0 } + ] + }, parents: 0, }, amount @@ -96,7 +101,7 @@ describe("TransactionRouter Cross-chain", () => { receiver, asset ); - }, 60000); + }, 120000); }); const addNetwork = async ( @@ -151,5 +156,5 @@ const mintAsset = async ( }; const getAsset = async (api: ApiPromise, id: number): Promise => { - return (await api.query.assets.asset(id)).toHuman(); + return (await api.query.assets.asset(id)).toJSON(); }; diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index 6af82a5..e0fdfef 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -85,7 +85,7 @@ describe("TransactionRouter", () => { const { data: balance } = (await westendApi.query.system.account( receiver.addressRaw )) as any; - const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); + const receiverBalance = balance.free.toJSON(); // First lets add a network. await addNetwork(identityContract, alice, { @@ -113,9 +113,7 @@ describe("TransactionRouter", () => { const { data: newBalance } = (await westendApi.query.system.account( receiver.addressRaw )) as any; - const newReceiverBalance = parseInt( - newBalance.free.toHuman().replace(/,/g, "") - ); + const newReceiverBalance = newBalance.free.toJSON(); expect(newReceiverBalance).toBe(receiverBalance + amount); }, 30000); @@ -150,16 +148,16 @@ describe("TransactionRouter", () => { const senderAccountBefore: any = (await assetHubApi.query.assets.account( 0, sender.keypair.address - )).toHuman(); + )).toJSON(); - const senderBalanceBefore = parseInt(senderAccountBefore.balance.replace(/,/g, "")); + const senderBalanceBefore = senderAccountBefore.balance; const receiverAccountBefore: any = (await assetHubApi.query.assets.account( 0, bob.address - )).toHuman(); + )).toJSON(); - const receiverBalanceBefore = receiverAccountBefore ? parseInt(receiverAccountBefore.balance.replace(/,/g, "")) : 0; + const receiverBalanceBefore = receiverAccountBefore ? receiverAccountBefore.balance : 0; // First lets add a network. await addNetwork(identityContract, alice, { @@ -190,16 +188,16 @@ describe("TransactionRouter", () => { const senderAccountAfter: any = (await assetHubApi.query.assets.account( 0, sender.keypair.address - )).toHuman(); + )).toJSON(); - const senderBalanceAfter = parseInt(senderAccountAfter.balance.replace(/,/g, "")); + const senderBalanceAfter = senderAccountAfter.balance; const receiverAccountAfter: any = (await assetHubApi.query.assets.account( 0, bob.address - )).toHuman(); + )).toJSON(); - const receiverBalanceAfter = parseInt(receiverAccountAfter.balance.replace(/,/g, "")); + const receiverBalanceAfter = receiverAccountAfter.balance; expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); expect(receiverBalanceAfter).toBe(receiverBalanceBefore + amount); @@ -264,5 +262,5 @@ const mintAsset = async ( }; const getAsset = async (api: ApiPromise, id: number): Promise => { - return (await api.query.assets.asset(id)).toHuman(); + return (await api.query.assets.asset(id)).toJSON(); }; diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index d692cba..7f8e040 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -12,7 +12,6 @@ class TransactionRouter { receiver: Receiver, asset: Fungible ): Promise { - console.log("HEY"); if (sender.network === receiver.network && sender.keypair.addressRaw === receiver.addressRaw) { throw new Error("Cannot send tokens to yourself"); } @@ -30,7 +29,6 @@ class TransactionRouter { const originApi = await this.getApi(identityContract, sender.network); const destApi = await this.getApi(identityContract, receiver.network); - console.log("HEY 2"); await ReserveTransfer.send( originApi, destApi, @@ -45,8 +43,6 @@ class TransactionRouter { const rpcUrl = (await identityContract.query.networkInfoOf(networkId)).value .ok?.rpcUrl; - console.log(rpcUrl); - const wsProvider = new WsProvider(rpcUrl); const api = await ApiPromise.create({ provider: wsProvider }); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index e292c12..1609740 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -16,15 +16,17 @@ class ReserveTransfer { throw new Error("The destination blockchain does not support XCM"); } - let paraId = -1; + let destParaId = -1; if (destinationApi.query.parachainInfo) { - paraId = Number((await destinationApi.query.parachainInfo.parachainId()).toHuman()); + const response = (await destinationApi.query.parachainInfo.parachainId()).toJSON(); + destParaId = Number(response); } - console.log("Reserve transferring"); + const isOriginPara = destinationApi.query.hasOwnProperty("parachainInfo"); - const destination = this.getDestination(paraId, paraId >= 0); + const destination = this.getDestination(isOriginPara, destParaId, destParaId >= 0); const beneficiary = this.getBeneficiary(receiver); + console.log(beneficiary); const multiAsset = this.getMultiAsset(asset); const feeAssetItem = 0; @@ -62,28 +64,28 @@ class ReserveTransfer { }); } - private static getDestination(paraId: number, isPara: boolean): any { - if (isPara) { + private static getDestination(isOriginPara: boolean, destParaId: number, isDestPara: boolean): any { + // TODO: the destination is set incorrectly. + // const interior = isDestPara ? { Parachain: paraId } : + let parents = isOriginPara ? 1 : 0; + + if (isDestPara) { return { - V2: [ - { - parents: 1, - interior: { - X1: [ - { Parachain: paraId }, - ] - } + V1: + { + parents, + interior: { + X1: { Parachain: destParaId } } - ] + } } } else { return { - V2: [ - { - parents: 1, - interior: "Here" - } - ] + V1: + { + parents, + interior: "Here" + } } } } @@ -107,15 +109,20 @@ class ReserveTransfer { } return { - V2: [ - receiverAccount - ] + V1: { + parents: 0, + interior: { + X1: { + ...receiverAccount + } + } + } }; } private static getMultiAsset(asset: Fungible): any { return { - V2: [ + V1: [ { fun: { Fungible: asset.amount, From 80422bbd0fb61dd5280d8d75750cba9700c6ff6c Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Wed, 9 Aug 2023 10:00:01 -0700 Subject: [PATCH 25/45] test balance --- __tests__/crossChainRouter.test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index da513d1..3e29c4b 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -80,6 +80,8 @@ describe("TransactionRouter Cross-chain", () => { // Mint some assets to the creator. await mintAsset(assetHubApi, sender.keypair, 0, 500); + const balanceBefore = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; + const amount = 200; const asset: Fungible = { @@ -101,6 +103,9 @@ describe("TransactionRouter Cross-chain", () => { receiver, asset ); + + const balanceAfter = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; + expect(balanceAfter).toBe(balanceBefore - amount); }, 120000); }); @@ -158,3 +163,7 @@ const mintAsset = async ( const getAsset = async (api: ApiPromise, id: number): Promise => { return (await api.query.assets.asset(id)).toJSON(); }; + +const getAssetBalance = async (api: ApiPromise, id: number, who: string): Promise => { + return (await api.query.assets.account(id, who)).toJSON(); +} From 4188c86f1ff56194892fced53565d57b64e91745 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 10 Aug 2023 15:19:37 -0700 Subject: [PATCH 26/45] progress --- __tests__/crossChainRouter.test.ts | 32 ++++++++++++++++--- .../transactionRouter/reserveTransfer.ts | 1 - 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 3e29c4b..5d56eee 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -67,6 +67,11 @@ describe("TransactionRouter Cross-chain", () => { provider: trappistProvider, }); + const lockdownMode = await getLockdownMode(trappistApi); + if (lockdownMode) { + await deactivateLockdown(trappistApi, alice); + } + // Create assets on both networks if (!(await getAsset(assetHubApi, 0))) { @@ -77,12 +82,13 @@ describe("TransactionRouter Cross-chain", () => { await createAsset(trappistApi, sender.keypair, 0); } + const mintAmount = 20000000000000; // Mint some assets to the creator. - await mintAsset(assetHubApi, sender.keypair, 0, 500); + await mintAsset(assetHubApi, sender.keypair, 0, mintAmount); const balanceBefore = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; - const amount = 200; + const amount = 10000000000000; const asset: Fungible = { multiAsset: { @@ -106,7 +112,7 @@ describe("TransactionRouter Cross-chain", () => { const balanceAfter = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; expect(balanceAfter).toBe(balanceBefore - amount); - }, 120000); + }, 180000); }); const addNetwork = async ( @@ -125,7 +131,7 @@ const createAsset = async ( id: number ): Promise => { const callTx = async (resolve: () => void) => { - let forceCreate = api.tx.assets.forceCreate(id, signer.address, true, 10); + const forceCreate = api.tx.assets.forceCreate(id, signer.address, true, 10); const unsub = await api.tx.sudo.sudo(forceCreate) .signAndSend(signer, (result: any) => { if (result.status.isInBlock) { @@ -160,6 +166,24 @@ const mintAsset = async ( return new Promise(callTx); }; +const deactivateLockdown = async (api: ApiPromise, signer: KeyringPair): Promise => { + const callTx = async (resolve: () => void) => { + const forceDisable = api.tx.lockdownMode.deactivateLockdownMode(); + const unsub = await api.tx.sudo.sudo(forceDisable) + .signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + }; + return new Promise(callTx); +} + +const getLockdownMode = async (api: ApiPromise): Promise => { + return (await api.query.lockdownMode.lockdownModeStatus()).toJSON(); +}; + const getAsset = async (api: ApiPromise, id: number): Promise => { return (await api.query.assets.asset(id)).toJSON(); }; diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 1609740..6dd35bc 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -26,7 +26,6 @@ class ReserveTransfer { const destination = this.getDestination(isOriginPara, destParaId, destParaId >= 0); const beneficiary = this.getBeneficiary(receiver); - console.log(beneficiary); const multiAsset = this.getMultiAsset(asset); const feeAssetItem = 0; From 226bcb54567777d3d6f7f2173b89b5ad1bb13d92 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 14 Aug 2023 11:08:05 +0200 Subject: [PATCH 27/45] fix code & docs --- __tests__/crossChainRouter.test.ts | 2 + __tests__/transactionRouter.test.ts | 44 ++++++++------ src/utils/transactionRouter/index.ts | 29 ++++++++- .../transactionRouter/reserveTransfer.ts | 60 +++++++++++++++++-- src/utils/transactionRouter/transferAsset.ts | 11 ++-- 5 files changed, 116 insertions(+), 30 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 5d56eee..ec43059 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -89,6 +89,7 @@ describe("TransactionRouter Cross-chain", () => { const balanceBefore = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; const amount = 10000000000000; + const assetReserveChainId = 0; const asset: Fungible = { multiAsset: { @@ -107,6 +108,7 @@ describe("TransactionRouter Cross-chain", () => { identityContract, sender, receiver, + assetReserveChainId, asset ); diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index e0fdfef..3736aab 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -37,7 +37,7 @@ describe("TransactionRouter", () => { // First lets add a network and create an identity. await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:4242", + rpcUrl: "ws://127.0.0.1:9910", accountType: AccountType.accountId32, }); @@ -57,11 +57,14 @@ describe("TransactionRouter", () => { amount: 1000 }; + const assetReserveChainId = 0; + await expect( TransactionRouter.sendTokens( identityContract, sender, receiver, + assetReserveChainId, asset ) ).rejects.toThrow("Cannot send tokens to yourself"); @@ -79,17 +82,17 @@ describe("TransactionRouter", () => { network: 0, }; - const westendProvider = new WsProvider("ws://127.0.0.1:4242"); + const westendProvider = new WsProvider("ws://127.0.0.1:9910"); const westendApi = await ApiPromise.create({ provider: westendProvider }); const { data: balance } = (await westendApi.query.system.account( receiver.addressRaw )) as any; - const receiverBalance = balance.free.toJSON(); + const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); // First lets add a network. await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:4242", + rpcUrl: "ws://127.0.0.1:9910", accountType: AccountType.accountId32, }); @@ -102,18 +105,22 @@ describe("TransactionRouter", () => { }, amount }; + const assetReserveChainId = 0; await TransactionRouter.sendTokens( identityContract, sender, receiver, + assetReserveChainId, asset ); const { data: newBalance } = (await westendApi.query.system.account( receiver.addressRaw )) as any; - const newReceiverBalance = newBalance.free.toJSON(); + const newReceiverBalance = parseInt( + newBalance.free.toHuman().replace(/,/g, "") + ); expect(newReceiverBalance).toBe(receiverBalance + amount); }, 30000); @@ -130,7 +137,7 @@ describe("TransactionRouter", () => { network: 0, }; - const assetHubProvider = new WsProvider("ws://127.0.0.1:4243"); + const assetHubProvider = new WsProvider("ws://127.0.0.1:9930"); const assetHubApi = await ApiPromise.create({ provider: assetHubProvider, }); @@ -148,20 +155,20 @@ describe("TransactionRouter", () => { const senderAccountBefore: any = (await assetHubApi.query.assets.account( 0, sender.keypair.address - )).toJSON(); + )).toHuman(); - const senderBalanceBefore = senderAccountBefore.balance; + const senderBalanceBefore = parseInt(senderAccountBefore.balance.replace(/,/g, "")); const receiverAccountBefore: any = (await assetHubApi.query.assets.account( 0, bob.address - )).toJSON(); + )).toHuman(); - const receiverBalanceBefore = receiverAccountBefore ? receiverAccountBefore.balance : 0; + const receiverBalanceBefore = receiverAccountBefore ? parseInt(receiverAccountBefore.balance.replace(/,/g, "")) : 0; // First lets add a network. await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:4243", + rpcUrl: "ws://127.0.0.1:9930", accountType: AccountType.accountId32, }); @@ -177,32 +184,35 @@ describe("TransactionRouter", () => { }, amount }; + const assetReserveChainId = 0; await TransactionRouter.sendTokens( identityContract, sender, receiver, + assetReserveChainId, asset ); const senderAccountAfter: any = (await assetHubApi.query.assets.account( 0, sender.keypair.address - )).toJSON(); + )).toHuman(); - const senderBalanceAfter = senderAccountAfter.balance; + const senderBalanceAfter = parseInt(senderAccountAfter.balance.replace(/,/g, "")); const receiverAccountAfter: any = (await assetHubApi.query.assets.account( 0, bob.address - )).toJSON(); + )).toHuman(); - const receiverBalanceAfter = receiverAccountAfter.balance; + console.log(receiverAccountAfter); + const receiverBalanceAfter = parseInt(receiverAccountAfter.balance.replace(/,/g, "")); expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); expect(receiverBalanceAfter).toBe(receiverBalanceBefore + amount); - }, 120000); + }, 180000); }); const addNetwork = async ( @@ -262,5 +272,5 @@ const mintAsset = async ( }; const getAsset = async (api: ApiPromise, id: number): Promise => { - return (await api.query.assets.asset(id)).toJSON(); + return (await api.query.assets.asset(id)).toHuman(); }; diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 7f8e040..40daa91 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -10,6 +10,7 @@ class TransactionRouter { identityContract: IdentityContract, sender: Sender, receiver: Receiver, + reserveChainId: number, asset: Fungible ): Promise { if (sender.network === receiver.network && sender.keypair.addressRaw === receiver.addressRaw) { @@ -25,13 +26,35 @@ class TransactionRouter { receiver, asset ); + + return; + } + + const originApi = await this.getApi(identityContract, sender.network); + const destApi = await this.getApi(identityContract, receiver.network); + if (sender.network == reserveChainId) { + await ReserveTransfer.sendFromReserveChain( + originApi, + destApi, + sender.keypair, + receiver, + asset + ); + } else if (receiver.network == reserveChainId) { + ReserveTransfer.sendToReserveChain( + originApi, + destApi, + sender.keypair, + receiver, + asset + ); } else { - const originApi = await this.getApi(identityContract, sender.network); - const destApi = await this.getApi(identityContract, receiver.network); + const reserveChain = await this.getApi(identityContract, receiver.network); - await ReserveTransfer.send( + ReserveTransfer.sendAcrossReserveChain( originApi, destApi, + reserveChain, sender.keypair, receiver, asset diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 6dd35bc..addb6af 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -5,7 +5,10 @@ import { Fungible, Receiver } from "./types"; import { AccountType } from "../../../types/types-arguments/identity"; class ReserveTransfer { - public static async send( + // Transfers assets from the sender to the receiver. + // + // This function assumes that the chain from which the sending is ocurring is the reserve chain of the asset. + public static async sendFromReserveChain( originApi: ApiPromise, destinationApi: ApiPromise, sender: KeyringPair, @@ -22,7 +25,7 @@ class ReserveTransfer { destParaId = Number(response); } - const isOriginPara = destinationApi.query.hasOwnProperty("parachainInfo"); + const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const destination = this.getDestination(isOriginPara, destParaId, destParaId >= 0); const beneficiary = this.getBeneficiary(receiver); @@ -63,9 +66,53 @@ class ReserveTransfer { }); } + // Transfers assets from the sender to the receiver. + // + // This function assumes that the chain on which the receiver is receiving the tokens is the actual + // reserve chain of the asset. + public static async sendToReserveChain( + originApi: ApiPromise, + destinationApi: ApiPromise, + sender: KeyringPair, + receiver: Receiver, + asset: Fungible + ): Promise { + // TODO + } + + // Neither the sender nor the receiver chain is the reserve chain of the asset being sent. + // + // For this reason we are gonna need to transfer the asset across the reserve chain. + public static async sendAcrossReserveChain( + originApi: ApiPromise, + destinationApi: ApiPromise, + assetReserveChain: ApiPromise, + sender: KeyringPair, + receiver: Receiver, + asset: Fungible + ): Promise { + // TODO + } + + // TODO: documentation + private static twoHopXcmInstruction(): any { + // TODO + } + + // Returns the XCM instruction for transfering a reserve asset. + private static transferReserveAssetInstruction(asset: Fungible, receiver: Receiver): any { + return { + TransferReserveAsset: { + assets: this.getMultiAsset(asset), + receiver: this.getBeneficiary(receiver) + } + } + } + + // Returns the destination of an xcm reserve transfer. + // + // The destination is an entity that will process the xcm message(i.e a relaychain or a parachain). private static getDestination(isOriginPara: boolean, destParaId: number, isDestPara: boolean): any { - // TODO: the destination is set incorrectly. - // const interior = isDestPara ? { Parachain: paraId } : let parents = isOriginPara ? 1 : 0; if (isDestPara) { @@ -79,6 +126,7 @@ class ReserveTransfer { } } } else { + // If the destination is not a parachain it is basically a relay chain. return { V1: { @@ -89,6 +137,9 @@ class ReserveTransfer { } } + // Returns the beneficiary of an xcm reserve transfer. + // + // The beneficiary is an interior entity of the destination that will actually receive the tokens. private static getBeneficiary(receiver: Receiver) { let receiverAccount; if (receiver.type == AccountType.accountId32) { @@ -119,6 +170,7 @@ class ReserveTransfer { }; } + // Returns a proper MultiAsset. private static getMultiAsset(asset: Fungible): any { return { V1: [ diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index c6bbeaf..0d20101 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -11,12 +11,11 @@ class TransferAsset { receiver: Receiver, asset: Fungible ): Promise { - // We use XCM even for transfers that are occurring on the same chain. The - // reason for this is that we cannot know what is the pallet and function - // for transferring tokens since it can be different on each chain. For that - // reason we will use the XCM `TransferAsset` instruction which is - // standardized and as far as the chain has an XCM executor the transaction - // will be executed correctly. + // We use XCM even for transfers that are occurring on the same chain. The reason for + // this is that we cannot know what is the pallet and function for transferring tokens + // since it can be different on each chain. For that reason we will use the XCM `TransferAsset` + // instruction which is standardized and as far as the chain has an XCM executor the + // transaction will be executed correctly. const xcm = this.xcmTransferAssetMessage( receiver.addressRaw, From 9d3c77b4b1e06b29a9f9789527e2ce729c849c12 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 14 Aug 2023 12:25:45 +0200 Subject: [PATCH 28/45] fix test --- __tests__/crossChainRouter.test.ts | 74 ++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 13 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index ec43059..1696fd2 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -11,6 +11,8 @@ import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; const wsProvider = new WsProvider("ws://127.0.0.1:9944"); const keyring = new Keyring({ type: "sr25519" }); +const USDT_ASSET_ID = 1984; + describe("TransactionRouter Cross-chain", () => { let swankyApi: ApiPromise; let alice: KeyringPair; @@ -43,7 +45,7 @@ describe("TransactionRouter Cross-chain", () => { }); }); - it("Transferring cross-chain works", async () => { + it("Transferring cross-chain from asset's reserve chain works", async () => { const sender: Sender = { keypair: alice, network: 0 @@ -74,21 +76,35 @@ describe("TransactionRouter Cross-chain", () => { // Create assets on both networks - if (!(await getAsset(assetHubApi, 0))) { - await createAsset(assetHubApi, sender.keypair, 0); + if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { + await createAsset(assetHubApi, sender.keypair, USDT_ASSET_ID); } - if (!(await getAsset(trappistApi, 0))) { - await createAsset(trappistApi, sender.keypair, 0); + if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { + await createAsset(trappistApi, sender.keypair, USDT_ASSET_ID); } - const mintAmount = 20000000000000; + if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { + await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { + parents: 1, + interior: { + X3: [ + { Parachain: 1000 }, + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + } + }); + } + + const mintAmount = 20000000000; // Mint some assets to the creator. - await mintAsset(assetHubApi, sender.keypair, 0, mintAmount); + await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); - const balanceBefore = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; + const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); - const amount = 10000000000000; + const amount = 10000000000; const assetReserveChainId = 0; const asset: Fungible = { @@ -96,7 +112,7 @@ describe("TransactionRouter Cross-chain", () => { interior: { X2: [ { PalletInstance: 50 }, - { GeneralIndex: 0 } + { GeneralIndex: USDT_ASSET_ID } ] }, parents: 0, @@ -112,8 +128,13 @@ describe("TransactionRouter Cross-chain", () => { asset ); - const balanceAfter = (await getAssetBalance(assetHubApi, 0, alice.address)).balance; - expect(balanceAfter).toBe(balanceBefore - amount); + const senderBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + + expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); + // The `receiverBalanceAfter` won't be exactly equal to `receiverBalanceBefore + amount` since some of the tokens are + // used for `BuyExecution`. + expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); }, 180000); }); @@ -168,6 +189,29 @@ const mintAsset = async ( return new Promise(callTx); }; +const registerReserveAsset = async ( + api: ApiPromise, + signer: KeyringPair, + id: number, + assetLocation: any +): Promise => { + const callTx = async (resolve: () => void) => { + const register = api.tx.assetRegistry.registerReserveAsset(id, assetLocation); + const unsub = await api.tx.sudo.sudo(register) + .signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + }; + return new Promise(callTx); +} + +const getAssetIdMultiLocation = async (api: ApiPromise, id: number): Promise => { + return (await api.query.assetRegistry.assetIdMultiLocation(id)).toJSON(); +} + const deactivateLockdown = async (api: ApiPromise, signer: KeyringPair): Promise => { const callTx = async (resolve: () => void) => { const forceDisable = api.tx.lockdownMode.deactivateLockdownMode(); @@ -191,5 +235,9 @@ const getAsset = async (api: ApiPromise, id: number): Promise => { }; const getAssetBalance = async (api: ApiPromise, id: number, who: string): Promise => { - return (await api.query.assets.account(id, who)).toJSON(); + const maybeBalance: any = (await api.query.assets.account(id, who)).toJSON(); + if (maybeBalance && maybeBalance.balance) { + return maybeBalance.balance; + } + return 0; } From b937f03c3b75a51d4339e9e9a4a82cfc081c79b4 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 14 Aug 2023 13:07:57 +0200 Subject: [PATCH 29/45] add unit tests --- __tests__/transactionRouter.test.ts | 2 +- .../transactionRouter/reserveTransfer.test.ts | 145 ++++++++++++++++++ .../transactionRouter/reserveTransfer.ts | 16 +- 3 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 src/utils/transactionRouter/reserveTransfer.test.ts diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index 3736aab..0294acd 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -11,7 +11,7 @@ import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; const wsProvider = new WsProvider("ws://127.0.0.1:9944"); const keyring = new Keyring({ type: "sr25519" }); -describe("TransactionRouter", () => { +describe("TransactionRouter e2e tests", () => { let swankyApi: ApiPromise; let alice: KeyringPair; let bob: KeyringPair; diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts new file mode 100644 index 0000000..d67ca9a --- /dev/null +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -0,0 +1,145 @@ +// File containging unit tests for the `ReserveTransfer` class. +// +// The e2e tests are placed in the `__tests__` directory in the root of the project. + +import { AccountType } from "../../../types/types-arguments/identity"; +import ReserveTransfer from "./reserveTransfer"; +import { Receiver, Fungible } from "./types"; +import { Keyring } from "@polkadot/api"; +import { cryptoWaitReady } from '@polkadot/util-crypto'; + +const sr25519Keyring = new Keyring({ type: "sr25519" }); +const ecdsaKering = new Keyring({ type: "ecdsa" }); + +describe("TransactionRouter unit tests", () => { + describe("getDestination works", () => { + it("Works with the destination being the relay chain", () => { + // @ts-ignore + expect(ReserveTransfer.getDestination(true, 69, false)).toStrictEqual( + { + V1: { + parents: 1, + interior: "Here" + } + } + ); + + // @ts-ignore + expect(ReserveTransfer.getDestination(false, 69, false)).toStrictEqual( + { + V1: { + parents: 0, + interior: "Here" + } + } + ); + }); + + it("Works with the destination being a parachain", () => { + // @ts-ignore + expect(ReserveTransfer.getDestination(false, 2000, true)).toStrictEqual( + { + V1: { + parents: 0, + interior: { + X1: { Parachain: 2000 } + } + } + } + ); + + // @ts-ignore + expect(ReserveTransfer.getDestination(true, 2000, true)).toStrictEqual( + { + V1: { + parents: 1, + interior: { + X1: { Parachain: 2000 } + } + } + } + ); + }); + }); + + describe("getBeneficiary works", () => { + it("Works with AccountId32", async () => { + await cryptoWaitReady(); + + const alice = sr25519Keyring.addFromUri("//Alice"); + const bob = ecdsaKering.addFromUri("//Bob"); + + var receiver: Receiver = { + addressRaw: alice.addressRaw, + network: 0, + type: AccountType.accountId32 + }; + + // @ts-ignore + expect(ReserveTransfer.getBeneficiary(receiver)).toStrictEqual( + { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: "Any", + id: receiver.addressRaw + } + } + } + } + } + ); + + var receiver: Receiver = { + addressRaw: bob.addressRaw, + network: 0, + type: AccountType.accountKey20 + }; + + // @ts-ignore + expect(ReserveTransfer.getBeneficiary(receiver)).toStrictEqual( + { + V1: { + parents: 0, + interior: { + X1: { + AccountKey20: { + network: "Any", + id: receiver.addressRaw + } + } + } + } + } + ); + }); + }); + + describe("getMultiAsset works", () => { + it("Should work", () => { + const asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual( + { + V1: { + fun: { + Fungible: asset.amount + }, + id: { + Concrete: asset.multiAsset + } + } + } + ) + }); + }); +}); \ No newline at end of file diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index addb6af..13fe3dc 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -173,16 +173,14 @@ class ReserveTransfer { // Returns a proper MultiAsset. private static getMultiAsset(asset: Fungible): any { return { - V1: [ - { - fun: { - Fungible: asset.amount, - }, - id: { - Concrete: asset.multiAsset, - }, + V1: { + fun: { + Fungible: asset.amount, + }, + id: { + Concrete: asset.multiAsset, }, - ] + }, } } } From 17e9bb49ef4a3bc1faf68408601e83ec656f4fc2 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Mon, 14 Aug 2023 20:15:34 +0200 Subject: [PATCH 30/45] small fixes --- __tests__/crossChainRouter.test.ts | 4 ++-- .../transactionRouter/reserveTransfer.test.ts | 16 +++++++++------- src/utils/transactionRouter/reserveTransfer.ts | 16 +++++++++------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 1696fd2..2656734 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -97,14 +97,14 @@ describe("TransactionRouter Cross-chain", () => { }); } - const mintAmount = 20000000000; + const mintAmount = 2000000000000; // Mint some assets to the creator. await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); - const amount = 10000000000; + const amount = 1000000000000; const assetReserveChainId = 0; const asset: Fungible = { diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index d67ca9a..f03724f 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -130,14 +130,16 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual( { - V1: { - fun: { - Fungible: asset.amount - }, - id: { - Concrete: asset.multiAsset + V1: [ + { + fun: { + Fungible: asset.amount + }, + id: { + Concrete: asset.multiAsset + } } - } + ] } ) }); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 13fe3dc..addb6af 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -173,14 +173,16 @@ class ReserveTransfer { // Returns a proper MultiAsset. private static getMultiAsset(asset: Fungible): any { return { - V1: { - fun: { - Fungible: asset.amount, - }, - id: { - Concrete: asset.multiAsset, + V1: [ + { + fun: { + Fungible: asset.amount, + }, + id: { + Concrete: asset.multiAsset, + }, }, - }, + ] } } } From c0de813e081ca5402310bd46953213a7619eb6d4 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Wed, 16 Aug 2023 14:50:50 +0200 Subject: [PATCH 31/45] use trappist zombienet network for all tests --- README.md | 4 +- __tests__/crossChainRouter.test.ts | 6 ++- __tests__/transactionRouter.test.ts | 57 ++++++++++++++------ local_network.toml | 52 ------------------ src/utils/transactionRouter/transferAsset.ts | 38 ++++--------- 5 files changed, 57 insertions(+), 100 deletions(-) delete mode 100644 local_network.toml diff --git a/README.md b/README.md index 847e50f..7befb7f 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,9 @@ For details regarding the contract deployment go to this [page](https://github.c Some tests require a zombienet network to be run in the background. The steps to take before running the tests are the following: 1. Run a local [swanky](https://github.com/AstarNetwork/swanky-node) test node. This is where the contracts will be deployed to locally. The command to run: `./swanky-node --dev --tmp` -2. Run the local zombienet network: `zombienet-macos -p native spawn local_network.toml` +2. Follow the instructions on [trappist](https://github.com/paritytech/trappist) and run the [full_network.toml](https://github.com/paritytech/trappist/blob/main/zombienet/full_network.toml) network. -After the swanky node and the zombienet is running you can run all the tests: +After the swanky node and the zombienet network is running you can run all the tests: ``` yarn test diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 2656734..97734af 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -45,7 +45,7 @@ describe("TransactionRouter Cross-chain", () => { }); }); - it("Transferring cross-chain from asset's reserve chain works", async () => { + test("Transferring cross-chain from asset's reserve chain works", async () => { const sender: Sender = { keypair: alice, network: 0 @@ -136,6 +136,10 @@ describe("TransactionRouter Cross-chain", () => { // used for `BuyExecution`. expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); }, 180000); + + test("Transferring cross-chain to asset's reserve chain works", async () => { + // TODO + }); }); const addNetwork = async ( diff --git a/__tests__/transactionRouter.test.ts b/__tests__/transactionRouter.test.ts index 0294acd..d7e1844 100644 --- a/__tests__/transactionRouter.test.ts +++ b/__tests__/transactionRouter.test.ts @@ -82,17 +82,17 @@ describe("TransactionRouter e2e tests", () => { network: 0, }; - const westendProvider = new WsProvider("ws://127.0.0.1:9910"); - const westendApi = await ApiPromise.create({ provider: westendProvider }); + const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoApi = await ApiPromise.create({ provider: rococoProvider }); - const { data: balance } = (await westendApi.query.system.account( + const { data: balance } = (await rococoApi.query.system.account( receiver.addressRaw )) as any; const receiverBalance = parseInt(balance.free.toHuman().replace(/,/g, "")); // First lets add a network. await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:9910", + rpcUrl: "ws://127.0.0.1:9900", accountType: AccountType.accountId32, }); @@ -115,7 +115,7 @@ describe("TransactionRouter e2e tests", () => { asset ); - const { data: newBalance } = (await westendApi.query.system.account( + const { data: newBalance } = (await rococoApi.query.system.account( receiver.addressRaw )) as any; const newReceiverBalance = parseInt( @@ -137,29 +137,34 @@ describe("TransactionRouter e2e tests", () => { network: 0, }; - const assetHubProvider = new WsProvider("ws://127.0.0.1:9930"); - const assetHubApi = await ApiPromise.create({ - provider: assetHubProvider, + const trappitProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistApi = await ApiPromise.create({ + provider: trappitProvider, }); + const lockdownMode = await getLockdownMode(trappistApi); + if (lockdownMode) { + await deactivateLockdown(trappistApi, alice); + } + // First create an asset. - if (!(await getAsset(assetHubApi, 0))) { - await createAsset(assetHubApi, sender.keypair, 0); + if (!(await getAsset(trappistApi, 0))) { + await createAsset(trappistApi, sender.keypair, 0); } // Mint some assets to the creator. - await mintAsset(assetHubApi, sender.keypair, 0, 500); + await mintAsset(trappistApi, sender.keypair, 0, 500); const amount = 200; - const senderAccountBefore: any = (await assetHubApi.query.assets.account( + const senderAccountBefore: any = (await trappistApi.query.assets.account( 0, sender.keypair.address )).toHuman(); const senderBalanceBefore = parseInt(senderAccountBefore.balance.replace(/,/g, "")); - const receiverAccountBefore: any = (await assetHubApi.query.assets.account( + const receiverAccountBefore: any = (await trappistApi.query.assets.account( 0, bob.address )).toHuman(); @@ -168,7 +173,7 @@ describe("TransactionRouter e2e tests", () => { // First lets add a network. await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:9930", + rpcUrl: "ws://127.0.0.1:9920", accountType: AccountType.accountId32, }); @@ -176,7 +181,7 @@ describe("TransactionRouter e2e tests", () => { multiAsset: { interior: { X2: [ - { PalletInstance: 50 }, // assets pallet + { PalletInstance: 41 }, // assets pallet { GeneralIndex: 0 }, ], }, @@ -194,14 +199,14 @@ describe("TransactionRouter e2e tests", () => { asset ); - const senderAccountAfter: any = (await assetHubApi.query.assets.account( + const senderAccountAfter: any = (await trappistApi.query.assets.account( 0, sender.keypair.address )).toHuman(); const senderBalanceAfter = parseInt(senderAccountAfter.balance.replace(/,/g, "")); - const receiverAccountAfter: any = (await assetHubApi.query.assets.account( + const receiverAccountAfter: any = (await trappistApi.query.assets.account( 0, bob.address )).toHuman(); @@ -274,3 +279,21 @@ const mintAsset = async ( const getAsset = async (api: ApiPromise, id: number): Promise => { return (await api.query.assets.asset(id)).toHuman(); }; + +const deactivateLockdown = async (api: ApiPromise, signer: KeyringPair): Promise => { + const callTx = async (resolve: () => void) => { + const forceDisable = api.tx.lockdownMode.deactivateLockdownMode(); + const unsub = await api.tx.sudo.sudo(forceDisable) + .signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + }; + return new Promise(callTx); +} + +const getLockdownMode = async (api: ApiPromise): Promise => { + return (await api.query.lockdownMode.lockdownModeStatus()).toJSON(); +}; diff --git a/local_network.toml b/local_network.toml deleted file mode 100644 index f325ddb..0000000 --- a/local_network.toml +++ /dev/null @@ -1,52 +0,0 @@ -[relaychain] -default_command = "./bin/polkadot-v0.9.37" -default_args = [ "-lparachain=debug" ] - -chain = "wococo-local" - # relaychain nodes are by default validators - [[relaychain.nodes]] - ws_port = 4242 - name = "alice" - - [[relaychain.nodes]] - name = "bob" - - [[relaychain.nodes]] - name = "charlie" - - [[relaychain.nodes]] - name = "dave" - -[[parachains]] -id = 1000 -chain = "westmint-local" -cumulus_based = true - - [parachains.collator] - ws_port = 4243 - name = "westmint-collator-01" - command = "./bin/polkadot-parachain" - args = ["--log=xcm=trace,pallet-assets=trace"] - -[[parachains]] -id = 1001 -chain = "westmint-local" -cumulus_based = true - - [parachains.collator] - ws_port = 4244 - name = "westmint-collator-02" - command = "./bin/polkadot-parachain" - args = ["--log=xcm=trace,pallet-assets=trace"] - -[[hrmp_channels]] -sender = 1000 -recipient = 1001 -max_capacity = 8 -max_message_size = 8000 - -[[hrmp_channels]] -sender = 1001 -recipient = 1000 -max_capacity = 8 -max_message_size = 8000 diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index 0d20101..ce16f35 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -27,35 +27,17 @@ class TransferAsset { let xcmExecute: any; if (api.tx.xcmPallet) { - const paymentInfo = (await api.tx.xcmPallet - .execute(xcm, 0) - .paymentInfo(sender)).toHuman(); - - if (!paymentInfo || !paymentInfo.weight) { - throw new Error("Couldn't estimate transaction fee"); - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); - - // TODO: don't hardcode the max weight. - xcmExecute = api.tx.xcmPallet.execute(xcm, xcmMaxRefTime * 10); + // TODO: come up with more precise weight estimations. + xcmExecute = api.tx.xcmPallet.execute(xcm, { + refTime: Math.pow(10, 9), + proofSize: 10000, + }); } else if (api.tx.polkadotXcm) { - const paymentInfo = (await api.tx.polkadotXcm - .execute(xcm, 0) - .paymentInfo(sender)).toHuman(); - - if (!paymentInfo || !paymentInfo.weight) { - throw new Error("Couldn't estimate transaction fee"); - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const xcmMaxRefTime = parseInt(paymentInfo.weight.refTime.replace(/,/g, "")); - - // TODO: don't hardcode the max weight. - xcmExecute = api.tx.polkadotXcm.execute(xcm, xcmMaxRefTime * 10); + // TODO: come up with more precise weight estimations. + xcmExecute = api.tx.polkadotXcm.execute(xcm, { + refTime: Math.pow(10, 9), + proofSize: 10000, + }); } else { throw new Error("The blockchain does not support XCM"); } From df2cf54c192e7150e65f0c1e4788068fc0a09802 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 17 Aug 2023 09:55:26 +0200 Subject: [PATCH 32/45] force create from relaychain --- __tests__/crossChainRouter.test.ts | 70 ++++++++++++++++--- .../transactionRouter/reserveTransfer.ts | 8 +-- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 97734af..315a785 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -1,5 +1,6 @@ import { ApiPromise, Keyring, WsProvider } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; +import { u8aToHex } from '@polkadot/util'; import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; @@ -57,7 +58,10 @@ describe("TransactionRouter Cross-chain", () => { network: 1, }; - // We have two asset hubs in our local network. + const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoApi = await ApiPromise.create({ + provider: rococoProvider, + }); const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); const assetHubApi = await ApiPromise.create({ @@ -77,11 +81,11 @@ describe("TransactionRouter Cross-chain", () => { // Create assets on both networks if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { - await createAsset(assetHubApi, sender.keypair, USDT_ASSET_ID); + await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); } if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { - await createAsset(trappistApi, sender.keypair, USDT_ASSET_ID); + await createAsset(trappistApi, alice, USDT_ASSET_ID); } if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { @@ -158,18 +162,62 @@ const createAsset = async ( id: number ): Promise => { const callTx = async (resolve: () => void) => { - const forceCreate = api.tx.assets.forceCreate(id, signer.address, true, 10); - const unsub = await api.tx.sudo.sudo(forceCreate) - .signAndSend(signer, (result: any) => { - if (result.status.isInBlock) { - unsub(); - resolve(); - } - }); + const create = api.tx.assets.create(id, signer.address, 10); + const unsub = await create.signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); }; return new Promise(callTx); }; +const forceCreateAsset = async ( + relaychainApi: ApiPromise, + paraApi: ApiPromise, + paraId: number, + signer: KeyringPair, + id: number +): Promise => { + const forceCreate = u8aToHex(paraApi.tx.assets.forceCreate(id, signer.address, true, 10).method.toU8a()); + console.log(forceCreate); + + const xcm = { + V3: [ + { + UnpaidExecution: { + weightLimit: "Unlimited" + } + }, + { + Transact: { + originKind: "Superuser", + requireWeightAtMost: { + refTime: 9000000000, + proofSize: 10000 + }, + call: { + encoded: forceCreate, + } + } + } + ] + }; + + const callTx = async (resolve: () => void) => { + const paraSudoCall = relaychainApi.tx.parasSudoWrapper.sudoQueueDownwardXcm(paraId, xcm); + + const unsub = await relaychainApi.tx.sudo.sudo(paraSudoCall).signAndSend(signer, (result: any) => { + if (result.status.isInBlock) { + unsub(); + resolve(); + } + }); + } + return new Promise(callTx); +} + const mintAsset = async ( api: ApiPromise, signer: KeyringPair, diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index addb6af..58d4863 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -117,7 +117,7 @@ class ReserveTransfer { if (isDestPara) { return { - V1: + V2: { parents, interior: { @@ -128,7 +128,7 @@ class ReserveTransfer { } else { // If the destination is not a parachain it is basically a relay chain. return { - V1: + V2: { parents, interior: "Here" @@ -159,7 +159,7 @@ class ReserveTransfer { } return { - V1: { + V2: { parents: 0, interior: { X1: { @@ -173,7 +173,7 @@ class ReserveTransfer { // Returns a proper MultiAsset. private static getMultiAsset(asset: Fungible): any { return { - V1: [ + V2: [ { fun: { Fungible: asset.amount, From 4616328ead30f6f6b28353b49c3208ae36a290cf Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 17 Aug 2023 12:07:45 +0200 Subject: [PATCH 33/45] sendAcrossReserveChain --- .../transactionRouter/reserveTransfer.ts | 174 ++++++++++++++++-- src/utils/transactionRouter/types.ts | 2 +- 2 files changed, 163 insertions(+), 13 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 58d4863..0aede2d 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -15,15 +15,10 @@ class ReserveTransfer { receiver: Receiver, asset: Fungible ): Promise { - if (!(destinationApi.tx.xcmPallet || destinationApi.tx.polkadotXcm)) { - throw new Error("The destination blockchain does not support XCM"); - } + this.ensureContainsXcmPallet(originApi); + this.ensureContainsXcmPallet(destinationApi); - let destParaId = -1; - if (destinationApi.query.parachainInfo) { - const response = (await destinationApi.query.parachainInfo.parachainId()).toJSON(); - destParaId = Number(response); - } + const destParaId = await this.getParaId(destinationApi); const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); @@ -86,21 +81,88 @@ class ReserveTransfer { public static async sendAcrossReserveChain( originApi: ApiPromise, destinationApi: ApiPromise, - assetReserveChain: ApiPromise, + reserveChainApi: ApiPromise, sender: KeyringPair, receiver: Receiver, asset: Fungible ): Promise { - // TODO + this.ensureContainsXcmPallet(originApi); + this.ensureContainsXcmPallet(destinationApi); + this.ensureContainsXcmPallet(reserveChainApi); + + const reserveParaId = await this.getParaId(reserveChainApi); + const destinationParaId = await this.getParaId(destinationApi); + + const xcmProgram = this.twoHopXcmInstruction(asset, reserveParaId, destinationParaId, receiver.addressRaw); + + let reserveTransfer: any; + if (originApi.tx.xcmPallet) { + reserveTransfer = originApi.tx.xcmPallet.execute(xcmProgram, { + refTime: Math.pow(10, 10), + proofSize: Math.pow(10, 6), + }); + } else if (originApi.tx.polkadotXcm) { + reserveTransfer = originApi.tx.polkadotXcm.execute(xcmProgram, { + refTime: Math.pow(10, 10), + proofSize: Math.pow(10, 6), + }); + } else { + throw new Error("The blockchain does not support XCM"); + } + + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve) => { + const unsub = await reserveTransfer.signAndSend(sender, (result: any) => { + if (result.status.isFinalized) { + unsub(); + resolve(); + } + }) + }); } // TODO: documentation - private static twoHopXcmInstruction(): any { - // TODO + private static twoHopXcmInstruction(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: any): any { + const reserve = this.getReserve(reserveParaId); + + let assetFromReservePerspective = asset.multiAsset; + if (reserveParaId > 0) { + // The location of the asset will always start with the parachain if the reserve is a parachain. + assetFromReservePerspective.splice(0, 1); + } + + return { + V2: [ + this.withdrawAsset(asset), + { + InitiateReserveWithdraw: { + assets: { + Wild: "All" + }, + reserve, + xcm: [ + // TODO: the hardcoded number isn't really accurate to what we actually need. + this.buyExecution([assetFromReservePerspective], 450000000000), + this.depositReserveAsset([{ Wild: "All" }], 1, { + parents: 1, + interior: { + X1: { + Parachain: destParaId + } + } + }, [ + this.depositAsset([{ Wild: "All" }], 1, beneficiary) + ]) + ] + } + }, + ] + } } // Returns the XCM instruction for transfering a reserve asset. private static transferReserveAssetInstruction(asset: Fungible, receiver: Receiver): any { + // TODO: return { TransferReserveAsset: { assets: this.getMultiAsset(asset), @@ -109,6 +171,94 @@ class ReserveTransfer { } } + private static withdrawAsset(asset: Fungible): any { + return { + WithdrawAsset: [ + { + id: + { + Concrete: asset.multiAsset + }, + fun: { + Fungible: asset.amount + } + } + ] + }; + } + + private static buyExecution(multiAsset: any[], amount: number): any { + return { + BuyExecution: { + fees: { + id: { + Concrete: multiAsset + }, + fun: { + Fungible: amount + } + }, + weightLimit: "Unlimited" + }, + }; + } + + private static depositReserveAsset(assets: any[], maxAssets: number, dest: any, xcm: any[]): any { + return { + DepositReserveAsset: { + assets, + maxAssets, + dest, + xcm + } + } + } + + private static depositAsset(assets: any[], maxAssets: number, beneficiary: any): any { + return { + DepositAsset: { + assets, + maxAssets, + interior: { + X1: beneficiary + } + } + }; + } + + private static getReserve(reserveParaId: number) { + if (reserveParaId < 0) { + return { + parents: 0, + interior: "Here" + } + } else { + return { + parents: 1, + interior: { + X1: { + Parachain: reserveParaId + } + } + } + } + } + + private static async getParaId(api: ApiPromise): Promise { + if (api.query.parachainInfo) { + const response = (await api.query.parachainInfo.parachainId()).toJSON(); + return Number(response); + } else { + return -1; + } + } + + private static ensureContainsXcmPallet(api: ApiPromise) { + if (api.tx.xcmPallet || api.tx.polkadotXcm) { + throw new Error("The blockchain does not support XCM"); + } + } + // Returns the destination of an xcm reserve transfer. // // The destination is an entity that will process the xcm message(i.e a relaychain or a parachain). diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts index 0cb3604..b2cf1ff 100644 --- a/src/utils/transactionRouter/types.ts +++ b/src/utils/transactionRouter/types.ts @@ -17,6 +17,6 @@ export type Receiver = { } export type Fungible = { - multiAsset: any, + multiAsset: any[], amount: number } From 717aee381919c6aa1e42feef04f54e7814ccf610 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 17 Aug 2023 16:54:40 +0200 Subject: [PATCH 34/45] two hop reserve transfer working :)) --- __tests__/crossChainRouter.test.ts | 174 ++++++++++++++---- src/utils/transactionRouter/index.ts | 4 +- .../transactionRouter/reserveTransfer.ts | 86 ++++++--- src/utils/transactionRouter/types.ts | 2 +- 4 files changed, 193 insertions(+), 73 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 315a785..940256c 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -44,19 +44,116 @@ describe("TransactionRouter Cross-chain", () => { rpcUrl: "ws://127.0.0.1:9920", accountType: AccountType.accountId32, }); + + await addNetwork(identityContract, alice, { + rpcUrl: "ws://127.0.0.1:9930", + accountType: AccountType.accountId32, + }); }); + /* + test("Transferring cross-chain from asset's reserve chain works", async () => { + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 1, + }; + + const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoApi = await ApiPromise.create({ + provider: rococoProvider, + }); + + const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubApi = await ApiPromise.create({ + provider: assetHubProvider, + }); + + const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistApi = await ApiPromise.create({ + provider: trappistProvider, + }); + + const lockdownMode = await getLockdownMode(trappistApi); + if (lockdownMode) { + await deactivateLockdown(trappistApi, alice); + } + + // Create assets on both networks + + if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { + await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); + } + + if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { + await createAsset(trappistApi, alice, USDT_ASSET_ID); + } + + // If the asset is not already registered in the registry make sure we add it. + if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { + await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { + parents: 1, + interior: { + X3: [ + { Parachain: 1000 }, + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + } + }); + } + + const mintAmount = 2000000000000; + // Mint some assets to the creator. + await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); + + const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + + const amount = 1000000000000; + const assetReserveChainId = 0; + + const asset: Fungible = { + multiAsset: { + interior: { + X2: [ + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + }, + parents: 0, + }, + amount + }; + + await TransactionRouter.sendTokens( + identityContract, + sender, + receiver, + assetReserveChainId, + asset + ); + + const senderBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + + expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); + // The `receiverBalanceAfter` won't be exactly equal to `receiverBalanceBefore + amount` since some of the tokens are + // used for `BuyExecution`. + expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); + }, 180000); + */ - test("Transferring cross-chain from asset's reserve chain works", async () => { - const sender: Sender = { - keypair: alice, - network: 0 - }; + test("Transferring cross-chain to asset's reserve chain works", async () => { + // TODO + }); - const receiver: Receiver = { - addressRaw: bob.addressRaw, - type: AccountType.accountId32, - network: 1, - }; + test("Transferring cross-chain accross reserve chain works", async () => { + // NOTE this test depends on the success of the previos test. const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); const rococoApi = await ApiPromise.create({ @@ -73,12 +170,17 @@ describe("TransactionRouter Cross-chain", () => { provider: trappistProvider, }); + const baseProvider = new WsProvider("ws://127.0.0.1:9930"); + const baseApi = await ApiPromise.create({ + provider: baseProvider, + }); + const lockdownMode = await getLockdownMode(trappistApi); if (lockdownMode) { await deactivateLockdown(trappistApi, alice); } - // Create assets on both networks + // Create assets on all networks. if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); @@ -88,6 +190,11 @@ describe("TransactionRouter Cross-chain", () => { await createAsset(trappistApi, alice, USDT_ASSET_ID); } + if (!(await getAsset(baseApi, USDT_ASSET_ID))) { + await createAsset(baseApi, alice, USDT_ASSET_ID); + } + + // If the asset is not already registered in the registry make sure we add it. if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { parents: 1, @@ -101,49 +208,37 @@ describe("TransactionRouter Cross-chain", () => { }); } - const mintAmount = 2000000000000; - // Mint some assets to the creator. - await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); + const amount = 950000000000; + const assetReserveChainId = 0; - const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); - const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + const sender: Sender = { + keypair: bob, + network: 1 + }; - const amount = 1000000000000; - const assetReserveChainId = 0; + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 2, + }; const asset: Fungible = { multiAsset: { interior: { - X2: [ + X3: [ + { Parachain: 1000 }, { PalletInstance: 50 }, { GeneralIndex: USDT_ASSET_ID } ] }, - parents: 0, + parents: 1, }, amount }; - await TransactionRouter.sendTokens( - identityContract, - sender, - receiver, - assetReserveChainId, - asset - ); - - const senderBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); - const receiverBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); - - expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); - // The `receiverBalanceAfter` won't be exactly equal to `receiverBalanceBefore + amount` since some of the tokens are - // used for `BuyExecution`. - expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); + // Transfer the tokens to bob's account on base: + await TransactionRouter.sendTokens(identityContract, sender, receiver, assetReserveChainId, asset); }, 180000); - - test("Transferring cross-chain to asset's reserve chain works", async () => { - // TODO - }); }); const addNetwork = async ( @@ -181,7 +276,6 @@ const forceCreateAsset = async ( id: number ): Promise => { const forceCreate = u8aToHex(paraApi.tx.assets.forceCreate(id, signer.address, true, 10).method.toU8a()); - console.log(forceCreate); const xcm = { V3: [ diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 40daa91..741a6f1 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -49,9 +49,9 @@ class TransactionRouter { asset ); } else { - const reserveChain = await this.getApi(identityContract, receiver.network); + const reserveChain = await this.getApi(identityContract, reserveChainId); - ReserveTransfer.sendAcrossReserveChain( + await ReserveTransfer.sendAcrossReserveChain( originApi, destApi, reserveChain, diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 0aede2d..2f4d5c6 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -93,17 +93,17 @@ class ReserveTransfer { const reserveParaId = await this.getParaId(reserveChainApi); const destinationParaId = await this.getParaId(destinationApi); - const xcmProgram = this.twoHopXcmInstruction(asset, reserveParaId, destinationParaId, receiver.addressRaw); + const xcmProgram = this.twoHopXcmInstruction(asset, reserveParaId, destinationParaId, receiver); let reserveTransfer: any; if (originApi.tx.xcmPallet) { reserveTransfer = originApi.tx.xcmPallet.execute(xcmProgram, { - refTime: Math.pow(10, 10), + refTime: 3 * Math.pow(10, 11), proofSize: Math.pow(10, 6), }); } else if (originApi.tx.polkadotXcm) { reserveTransfer = originApi.tx.polkadotXcm.execute(xcmProgram, { - refTime: Math.pow(10, 10), + refTime: 3 * Math.pow(10, 11), proofSize: Math.pow(10, 6), }); } else { @@ -122,13 +122,14 @@ class ReserveTransfer { } // TODO: documentation - private static twoHopXcmInstruction(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: any): any { + private static twoHopXcmInstruction(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: Receiver): any { const reserve = this.getReserve(reserveParaId); - let assetFromReservePerspective = asset.multiAsset; + // NOTE: we use parse and stringify to make a hard copy of the asset. + let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (reserveParaId > 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. - assetFromReservePerspective.splice(0, 1); + this.removeParachainFromLocation(assetFromReservePerspective, reserveParaId); } return { @@ -142,8 +143,8 @@ class ReserveTransfer { reserve, xcm: [ // TODO: the hardcoded number isn't really accurate to what we actually need. - this.buyExecution([assetFromReservePerspective], 450000000000), - this.depositReserveAsset([{ Wild: "All" }], 1, { + this.buyExecution(assetFromReservePerspective, 450000000000), + this.depositReserveAsset({ Wild: "All" }, 1, { parents: 1, interior: { X1: { @@ -151,7 +152,7 @@ class ReserveTransfer { } } }, [ - this.depositAsset([{ Wild: "All" }], 1, beneficiary) + this.depositAsset({ Wild: "All" }, 1, beneficiary) ]) ] } @@ -187,7 +188,7 @@ class ReserveTransfer { }; } - private static buyExecution(multiAsset: any[], amount: number): any { + private static buyExecution(multiAsset: any, amount: number): any { return { BuyExecution: { fees: { @@ -203,7 +204,7 @@ class ReserveTransfer { }; } - private static depositReserveAsset(assets: any[], maxAssets: number, dest: any, xcm: any[]): any { + private static depositReserveAsset(assets: any, maxAssets: number, dest: any, xcm: any[]): any { return { DepositReserveAsset: { assets, @@ -214,14 +215,19 @@ class ReserveTransfer { } } - private static depositAsset(assets: any[], maxAssets: number, beneficiary: any): any { + private static depositAsset(assets: any, maxAssets: number, receiver: Receiver): any { + const beneficiary = { + parents: 0, + interior: { + X1: this.getReceiverAccount(receiver) + } + }; + return { DepositAsset: { assets, maxAssets, - interior: { - X1: beneficiary - } + beneficiary } }; } @@ -254,7 +260,7 @@ class ReserveTransfer { } private static ensureContainsXcmPallet(api: ApiPromise) { - if (api.tx.xcmPallet || api.tx.polkadotXcm) { + if (!(api.tx.xcmPallet || api.tx.polkadotXcm)) { throw new Error("The blockchain does not support XCM"); } } @@ -291,33 +297,36 @@ class ReserveTransfer { // // The beneficiary is an interior entity of the destination that will actually receive the tokens. private static getBeneficiary(receiver: Receiver) { - let receiverAccount; + const receiverAccount = this.getReceiverAccount(receiver); + + return { + V2: { + parents: 0, + interior: { + X1: { + ...receiverAccount + } + } + } + }; + } + + private static getReceiverAccount(receiver: Receiver): any { if (receiver.type == AccountType.accountId32) { - receiverAccount = { + return { AccountId32: { network: "Any", id: receiver.addressRaw, }, }; } else if (receiver.type == AccountType.accountKey20) { - receiverAccount = { + return { AccountKey20: { network: "Any", id: receiver.addressRaw, }, }; } - - return { - V2: { - parents: 0, - interior: { - X1: { - ...receiverAccount - } - } - } - }; } // Returns a proper MultiAsset. @@ -335,6 +344,23 @@ class ReserveTransfer { ] } } + + // Helper function to remove a specific key from an object. + private static removeParachainFromLocation(location: any, paraId: number) { + const keyPattern = /^X\d$/; + + const key = Object.keys(location.interior).find(key => keyPattern.test(key)); + + if (key) { + const junctions: any[] = location.interior[key]; + junctions.splice(0, 1); + delete location.interior[key]; + location.interior[`X${junctions.length}`] = junctions; + location.parents = 0; + } else { + throw Error("Couldn't get junctions of an asset's location"); + } + } } export default ReserveTransfer; diff --git a/src/utils/transactionRouter/types.ts b/src/utils/transactionRouter/types.ts index b2cf1ff..0cb3604 100644 --- a/src/utils/transactionRouter/types.ts +++ b/src/utils/transactionRouter/types.ts @@ -17,6 +17,6 @@ export type Receiver = { } export type Fungible = { - multiAsset: any[], + multiAsset: any, amount: number } From e16e11287e977e391f82e3707e747a7707ded45e Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 17 Aug 2023 17:39:21 +0200 Subject: [PATCH 35/45] add test --- __tests__/crossChainRouter.test.ts | 205 ++++++++++++++++------------- 1 file changed, 110 insertions(+), 95 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 940256c..30f5986 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -50,103 +50,102 @@ describe("TransactionRouter Cross-chain", () => { accountType: AccountType.accountId32, }); }); - /* - test("Transferring cross-chain from asset's reserve chain works", async () => { - const sender: Sender = { - keypair: alice, - network: 0 - }; - - const receiver: Receiver = { - addressRaw: bob.addressRaw, - type: AccountType.accountId32, - network: 1, - }; - - const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); - const rococoApi = await ApiPromise.create({ - provider: rococoProvider, - }); - - const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); - const assetHubApi = await ApiPromise.create({ - provider: assetHubProvider, - }); - - const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); - const trappistApi = await ApiPromise.create({ - provider: trappistProvider, + + test("Transferring cross-chain from asset's reserve chain works", async () => { + const sender: Sender = { + keypair: alice, + network: 0 + }; + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 1, + }; + + const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoApi = await ApiPromise.create({ + provider: rococoProvider, + }); + + const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubApi = await ApiPromise.create({ + provider: assetHubProvider, + }); + + const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistApi = await ApiPromise.create({ + provider: trappistProvider, + }); + + const lockdownMode = await getLockdownMode(trappistApi); + if (lockdownMode) { + await deactivateLockdown(trappistApi, alice); + } + + // Create assets on both networks + + if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { + await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); + } + + if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { + await createAsset(trappistApi, alice, USDT_ASSET_ID); + } + + // If the asset is not already registered in the registry make sure we add it. + if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { + await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { + parents: 1, + interior: { + X3: [ + { Parachain: 1000 }, + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + } }); - - const lockdownMode = await getLockdownMode(trappistApi); - if (lockdownMode) { - await deactivateLockdown(trappistApi, alice); - } - - // Create assets on both networks - - if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { - await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); - } - - if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { - await createAsset(trappistApi, alice, USDT_ASSET_ID); - } - - // If the asset is not already registered in the registry make sure we add it. - if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { - await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { - parents: 1, - interior: { - X3: [ - { Parachain: 1000 }, - { PalletInstance: 50 }, - { GeneralIndex: USDT_ASSET_ID } - ] - } - }); - } - - const mintAmount = 2000000000000; - // Mint some assets to the creator. - await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); - - const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); - const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); - - const amount = 1000000000000; - const assetReserveChainId = 0; - - const asset: Fungible = { - multiAsset: { - interior: { - X2: [ - { PalletInstance: 50 }, - { GeneralIndex: USDT_ASSET_ID } - ] - }, - parents: 0, + } + + const mintAmount = 5000000000000; + // Mint some assets to the creator. + await mintAsset(assetHubApi, sender.keypair, USDT_ASSET_ID, mintAmount); + + const senderBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + + const amount = 4000000000000; + const assetReserveChainId = 0; + + const asset: Fungible = { + multiAsset: { + interior: { + X2: [ + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] }, - amount - }; - - await TransactionRouter.sendTokens( - identityContract, - sender, - receiver, - assetReserveChainId, - asset - ); - - const senderBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); - const receiverBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); - - expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); - // The `receiverBalanceAfter` won't be exactly equal to `receiverBalanceBefore + amount` since some of the tokens are - // used for `BuyExecution`. - expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); - }, 180000); - */ + parents: 0, + }, + amount + }; + + await TransactionRouter.sendTokens( + identityContract, + sender, + receiver, + assetReserveChainId, + asset + ); + + const senderBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, alice.address); + const receiverBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + + expect(senderBalanceAfter).toBe(senderBalanceBefore - amount); + // The `receiverBalanceAfter` won't be exactly equal to `receiverBalanceBefore + amount` since some of the tokens are + // used for `BuyExecution`. + expect(receiverBalanceAfter).toBeGreaterThan(receiverBalanceBefore); + }, 180000); test("Transferring cross-chain to asset's reserve chain works", async () => { // TODO @@ -236,8 +235,22 @@ describe("TransactionRouter Cross-chain", () => { amount }; + const senderBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + const receiverBalanceBefore = await getAssetBalance(baseApi, USDT_ASSET_ID, bob.address); + // Transfer the tokens to bob's account on base: await TransactionRouter.sendTokens(identityContract, sender, receiver, assetReserveChainId, asset); + + // We need to wait a bit more to actually receive the assets on the base chain. + await delay(12000); + + const senderBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + const receiverBalanceAfter = await getAssetBalance(baseApi, USDT_ASSET_ID, bob.address); + + // Some tolerance since part of the tokens will be used for fee payment. + const tolerance = 100000; + expect(senderBalanceAfter).toBeLessThanOrEqual(senderBalanceBefore - amount); + expect(receiverBalanceAfter).toBeGreaterThanOrEqual(receiverBalanceBefore + amount - tolerance); }, 180000); }); @@ -387,3 +400,5 @@ const getAssetBalance = async (api: ApiPromise, id: number, who: string): Promis } return 0; } + +const delay = (ms: number) => new Promise(res => setTimeout(res, ms)); From 800f2491079dafab3b5b848bb3530a413c4537d5 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Thu, 17 Aug 2023 20:33:38 +0200 Subject: [PATCH 36/45] transfer to reserve chain almost working --- __tests__/crossChainRouter.test.ts | 96 ++++++++++++++++++- src/utils/transactionRouter/index.ts | 2 +- .../transactionRouter/reserveTransfer.ts | 64 +++++++++++-- 3 files changed, 151 insertions(+), 11 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index 30f5986..e6fbe15 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -18,6 +18,7 @@ describe("TransactionRouter Cross-chain", () => { let swankyApi: ApiPromise; let alice: KeyringPair; let bob: KeyringPair; + let charlie: KeyringPair; let identityContract: any; beforeEach(async function (): Promise { @@ -27,6 +28,7 @@ describe("TransactionRouter Cross-chain", () => { }); alice = keyring.addFromUri("//Alice"); bob = keyring.addFromUri("//Bob"); + charlie = keyring.addFromUri("//Charlie"); const factory = new IdentityContractFactory(swankyApi, alice); identityContract = new IdentityContract( @@ -148,11 +150,99 @@ describe("TransactionRouter Cross-chain", () => { }, 180000); test("Transferring cross-chain to asset's reserve chain works", async () => { - // TODO - }); + // NOTE this test depends on the success of the first test. + + const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoApi = await ApiPromise.create({ + provider: rococoProvider, + }); + + const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubApi = await ApiPromise.create({ + provider: assetHubProvider, + }); + + const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistApi = await ApiPromise.create({ + provider: trappistProvider, + }); + + const lockdownMode = await getLockdownMode(trappistApi); + if (lockdownMode) { + await deactivateLockdown(trappistApi, alice); + } + + // Create assets on both networks. + + if (!(await getAsset(assetHubApi, USDT_ASSET_ID))) { + await forceCreateAsset(rococoApi, assetHubApi, 1000, alice, USDT_ASSET_ID); + } + + if (!(await getAsset(trappistApi, USDT_ASSET_ID))) { + await createAsset(trappistApi, alice, USDT_ASSET_ID); + } + + // If the asset is not already registered in the registry make sure we add it. + if (!(await getAssetIdMultiLocation(trappistApi, USDT_ASSET_ID))) { + await registerReserveAsset(trappistApi, alice, USDT_ASSET_ID, { + parents: 1, + interior: { + X3: [ + { Parachain: 1000 }, + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + } + }); + } + + const amount = 950000000000; + + const sender: Sender = { + keypair: bob, + network: 1 + }; + + const receiver: Receiver = { + addressRaw: charlie.addressRaw, + type: AccountType.accountId32, + network: 0, + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { Parachain: 1000 }, + { PalletInstance: 50 }, + { GeneralIndex: USDT_ASSET_ID } + ] + }, + parents: 1, + }, + amount + }; + + const senderBalanceBefore = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + const receiverBalanceBefore = await getAssetBalance(assetHubApi, USDT_ASSET_ID, charlie.address); + + // Transfer the tokens to charlies's account on asset hub: + await TransactionRouter.sendTokens(identityContract, sender, receiver, receiver.network, asset); + + // We need to wait a bit more to actually receive the assets on the base chain. + await delay(5000); + + const senderBalanceAfter = await getAssetBalance(trappistApi, USDT_ASSET_ID, bob.address); + const receiverBalanceAfter = await getAssetBalance(assetHubApi, USDT_ASSET_ID, charlie.address); + + // Some tolerance since part of the tokens will be used for fee payment. + const tolerance = 100000; + expect(senderBalanceAfter).toBeLessThanOrEqual(senderBalanceBefore - amount); + expect(receiverBalanceAfter).toBeGreaterThanOrEqual(receiverBalanceBefore + amount - tolerance); + }, 120000); test("Transferring cross-chain accross reserve chain works", async () => { - // NOTE this test depends on the success of the previos test. + // NOTE this test depends on the success of the first test. const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); const rococoApi = await ApiPromise.create({ diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 741a6f1..42cf708 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -41,7 +41,7 @@ class TransactionRouter { asset ); } else if (receiver.network == reserveChainId) { - ReserveTransfer.sendToReserveChain( + await ReserveTransfer.sendToReserveChain( originApi, destApi, sender.keypair, diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 2f4d5c6..70dd910 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -72,7 +72,37 @@ class ReserveTransfer { receiver: Receiver, asset: Fungible ): Promise { - // TODO + this.ensureContainsXcmPallet(originApi); + this.ensureContainsXcmPallet(destinationApi); + + const destinationParaId = await this.getParaId(destinationApi); + + const xcmProgram = this.transferReserveAssetInstruction(asset, destinationParaId, receiver); + + let reserveTransfer: any; + if (originApi.tx.xcmPallet) { + reserveTransfer = originApi.tx.xcmPallet.execute(xcmProgram, { + refTime: 3 * Math.pow(10, 11), + proofSize: Math.pow(10, 6), + }); + } else if (originApi.tx.polkadotXcm) { + reserveTransfer = originApi.tx.polkadotXcm.execute(xcmProgram, { + refTime: 3 * Math.pow(10, 11), + proofSize: Math.pow(10, 6), + }); + } else { + throw new Error("The blockchain does not support XCM"); + } + + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve) => { + const unsub = await reserveTransfer.signAndSend(sender, (result: any) => { + if (result.status.isFinalized) { + unsub(); + resolve(); + } + }) + }); } // Neither the sender nor the receiver chain is the reserve chain of the asset being sent. @@ -162,13 +192,33 @@ class ReserveTransfer { } // Returns the XCM instruction for transfering a reserve asset. - private static transferReserveAssetInstruction(asset: Fungible, receiver: Receiver): any { - // TODO: + private static transferReserveAssetInstruction(asset: Fungible, destParaId: number, beneficiary: Receiver): any { + const reserve = this.getReserve(destParaId); + + // NOTE: we use parse and stringify to make a hard copy of the asset. + let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); + if (destParaId >= 0) { + // The location of the asset will always start with the parachain if the reserve is a parachain. + this.removeParachainFromLocation(assetFromReservePerspective, destParaId); + } + return { - TransferReserveAsset: { - assets: this.getMultiAsset(asset), - receiver: this.getBeneficiary(receiver) - } + V2: [ + this.withdrawAsset(asset), + { + InitiateReserveWithdraw: { + assets: { + Wild: "All" + }, + reserve, + xcm: [ + // TODO: the hardcoded number isn't really accurate to what we actually need. + this.buyExecution(assetFromReservePerspective, 450000000000), + this.depositAsset({ Wild: "All" }, 1, this.getReceiverAccount(beneficiary)) + ] + } + }, + ] } } From 62ba5b2c7204f964b7a5e691d6dcb6fbde1372b0 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 09:39:15 +0200 Subject: [PATCH 37/45] all working --- src/utils/transactionRouter/reserveTransfer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 70dd910..7c1ea5a 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -214,7 +214,7 @@ class ReserveTransfer { xcm: [ // TODO: the hardcoded number isn't really accurate to what we actually need. this.buyExecution(assetFromReservePerspective, 450000000000), - this.depositAsset({ Wild: "All" }, 1, this.getReceiverAccount(beneficiary)) + this.depositAsset({ Wild: "All" }, 1, beneficiary) ] } }, From bc3294ff5a68ea24011eef5dc2d4f8976eb47343 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 11:10:46 +0200 Subject: [PATCH 38/45] docs --- src/utils/transactionRouter/index.ts | 30 ++++++++++++ .../transactionRouter/reserveTransfer.ts | 49 +++++++++++++------ src/utils/transactionRouter/transferAsset.ts | 1 + 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 42cf708..8775893 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -5,7 +5,28 @@ import { Fungible, Receiver, Sender } from "./types"; import IdentityContract from "../../../types/contracts/identity"; import ReserveTransfer from "./reserveTransfer"; +// Responsible for handling all the transfer logic. +// +// Supports both non-cross-chain and cross-chain transfers. +// +// At the moment it doesn't support teleports. class TransactionRouter { + // Sends tokens to the receiver on the receiver chain. + // + // If the sender and receiver are on the same chain the asset gets sent by executing the xcm `TransferAsset` + // instruction. The reason we use xcm is because we don't know on which chain the transfer will be + // executed, so the only assumption we make is that the chain supports xcm. + // + // The other more complex case involves transferring the asset to a different blockchain. We are utilising + // reserve transfers for this. There are three different scenarios that can occur: + // 1. The chain from which the transfer is ocurring the reserve chain of the asset. In this case we simply + // utilise the existing `limitedReserveTransferAssets` extrinsic. + // 2. The destination chain is the reserve of the asset. This is a more complex case, so we need to construct + // our own xcm program to do this. + // 3. Neither the sender or the destination chain are the reserve chains of the asset. In this case we do a + // 'two-hop` reserve transfer. This is essentially pretty similar to the previous scenario, only difference + // being that we deposit the assets to the receiver's chain sovereign account on the reserve chain and then + // do a separate `DepositAsset` instruction on the destination chain. public static async sendTokens( identityContract: IdentityContract, sender: Sender, @@ -17,6 +38,7 @@ class TransactionRouter { throw new Error("Cannot send tokens to yourself"); } + // The simplest case, both the sender and the receiver are on the same network: if (sender.network === receiver.network) { const api = await this.getApi(identityContract, sender.network); @@ -32,6 +54,9 @@ class TransactionRouter { const originApi = await this.getApi(identityContract, sender.network); const destApi = await this.getApi(identityContract, receiver.network); + + // The sender chain is the reserve chain of the asset. This will simply use the existing + // `limitedReserveTransferAssets` extrinsic if (sender.network == reserveChainId) { await ReserveTransfer.sendFromReserveChain( originApi, @@ -41,6 +66,7 @@ class TransactionRouter { asset ); } else if (receiver.network == reserveChainId) { + // The destination chain is the reserve chain of the asset: await ReserveTransfer.sendToReserveChain( originApi, destApi, @@ -49,6 +75,9 @@ class TransactionRouter { asset ); } else { + // The most complex case, the reserve chain is neither the sender or the destination chain. + // For this we will have to send tokens accross the reserve chain. + const reserveChain = await this.getApi(identityContract, reserveChainId); await ReserveTransfer.sendAcrossReserveChain( @@ -62,6 +91,7 @@ class TransactionRouter { } } + // Simple helper function to get the api of a chain with the corresponding id. private static async getApi(identityContract: IdentityContract, networkId: number): Promise { const rpcUrl = (await identityContract.query.networkInfoOf(networkId)).value .ok?.rpcUrl; diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 7c1ea5a..ac7bedd 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -23,7 +23,7 @@ class ReserveTransfer { const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const destination = this.getDestination(isOriginPara, destParaId, destParaId >= 0); - const beneficiary = this.getBeneficiary(receiver); + const beneficiary = this.getReserveTransferBeneficiary(receiver); const multiAsset = this.getMultiAsset(asset); const feeAssetItem = 0; @@ -77,7 +77,7 @@ class ReserveTransfer { const destinationParaId = await this.getParaId(destinationApi); - const xcmProgram = this.transferReserveAssetInstruction(asset, destinationParaId, receiver); + const xcmProgram = this.sendToReserveChainInstructions(asset, destinationParaId, receiver); let reserveTransfer: any; if (originApi.tx.xcmPallet) { @@ -123,7 +123,7 @@ class ReserveTransfer { const reserveParaId = await this.getParaId(reserveChainApi); const destinationParaId = await this.getParaId(destinationApi); - const xcmProgram = this.twoHopXcmInstruction(asset, reserveParaId, destinationParaId, receiver); + const xcmProgram = this.twoHopTransferInstructions(asset, reserveParaId, destinationParaId, receiver); let reserveTransfer: any; if (originApi.tx.xcmPallet) { @@ -151,8 +151,20 @@ class ReserveTransfer { }); } - // TODO: documentation - private static twoHopXcmInstruction(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: Receiver): any { + // Returns the xcm instruction for transferring an asset accross its reserve chain. + // + // This xcm program executes the following instructions: + // 1. `WithdrawAsset`, withdraw the amount the user wants to transfer from the sending chain + // and put it into the holding register + // 2. `InitiateReserveWithdraw`, this will take all the assets in the holding register and burn + // them on the origin chain. This will put the appropriate amount into the holding register on + // the reserve chain. + // 3. `BuyExecution`, on the reserve chain + // 4. `DepositReserveAsset`, deposit into the parachain sovereign account. This will also notify the + // destination chain that it received the tokens. + // 5. `DepositAsset`, this deposits the received assets on the destination chain into the receiver's + // account. + private static twoHopTransferInstructions(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: Receiver): any { const reserve = this.getReserve(reserveParaId); // NOTE: we use parse and stringify to make a hard copy of the asset. @@ -191,8 +203,17 @@ class ReserveTransfer { } } - // Returns the XCM instruction for transfering a reserve asset. - private static transferReserveAssetInstruction(asset: Fungible, destParaId: number, beneficiary: Receiver): any { + // Returns the XCM instruction for transfering an asset where the destination is the reserve chain of the asset. + // + // This xcm program executes the following instructions: + // 1. `WithdrawAsset`, withdraw the amount the user wants to transfer from the sending chain + // and put it into the holding register + // 2. `InitiateReserveWithdraw`, this will take all the assets in the holding register and burn + // them on the origin chain. This will put the appropriate amount into the holding register on + // the reserve chain. + // 3. `BuyExecution`, on the reserve chain + // 4. `DepositAsset`, this deposits the received assets to the receiver on the reserve chain. + private static sendToReserveChainInstructions(asset: Fungible, destParaId: number, beneficiary: Receiver): any { const reserve = this.getReserve(destParaId); // NOTE: we use parse and stringify to make a hard copy of the asset. @@ -309,12 +330,6 @@ class ReserveTransfer { } } - private static ensureContainsXcmPallet(api: ApiPromise) { - if (!(api.tx.xcmPallet || api.tx.polkadotXcm)) { - throw new Error("The blockchain does not support XCM"); - } - } - // Returns the destination of an xcm reserve transfer. // // The destination is an entity that will process the xcm message(i.e a relaychain or a parachain). @@ -346,7 +361,7 @@ class ReserveTransfer { // Returns the beneficiary of an xcm reserve transfer. // // The beneficiary is an interior entity of the destination that will actually receive the tokens. - private static getBeneficiary(receiver: Receiver) { + private static getReserveTransferBeneficiary(receiver: Receiver) { const receiverAccount = this.getReceiverAccount(receiver); return { @@ -395,6 +410,12 @@ class ReserveTransfer { } } + private static ensureContainsXcmPallet(api: ApiPromise) { + if (!(api.tx.xcmPallet || api.tx.polkadotXcm)) { + throw new Error("The blockchain does not support XCM"); + } + } + // Helper function to remove a specific key from an object. private static removeParachainFromLocation(location: any, paraId: number) { const keyPattern = /^X\d$/; diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index ce16f35..b3f9235 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -78,6 +78,7 @@ class TransferAsset { }; } + // TODO: should this have `BuyExecution`? const xcmMessage = { V2: [ { From e2a17b237ec12bbebb682c2ab6f3b463e77def68 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 13:56:05 +0200 Subject: [PATCH 39/45] fixes & xcm instruction unit tests --- .../transactionRouter/reserveTransfer.test.ts | 280 +++++++++++++++++- .../transactionRouter/reserveTransfer.ts | 76 +++-- 2 files changed, 325 insertions(+), 31 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index f03724f..405d2f2 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -17,7 +17,7 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getDestination(true, 69, false)).toStrictEqual( { - V1: { + V2: { parents: 1, interior: "Here" } @@ -27,7 +27,7 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getDestination(false, 69, false)).toStrictEqual( { - V1: { + V2: { parents: 0, interior: "Here" } @@ -39,7 +39,7 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getDestination(false, 2000, true)).toStrictEqual( { - V1: { + V2: { parents: 0, interior: { X1: { Parachain: 2000 } @@ -51,7 +51,7 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getDestination(true, 2000, true)).toStrictEqual( { - V1: { + V2: { parents: 1, interior: { X1: { Parachain: 2000 } @@ -62,7 +62,7 @@ describe("TransactionRouter unit tests", () => { }); }); - describe("getBeneficiary works", () => { + describe("getReserveTransferBeneficiary works", () => { it("Works with AccountId32", async () => { await cryptoWaitReady(); @@ -76,9 +76,9 @@ describe("TransactionRouter unit tests", () => { }; // @ts-ignore - expect(ReserveTransfer.getBeneficiary(receiver)).toStrictEqual( + expect(ReserveTransfer.getReserveTransferBeneficiary(receiver)).toStrictEqual( { - V1: { + V2: { parents: 0, interior: { X1: { @@ -99,9 +99,9 @@ describe("TransactionRouter unit tests", () => { }; // @ts-ignore - expect(ReserveTransfer.getBeneficiary(receiver)).toStrictEqual( + expect(ReserveTransfer.getReserveTransferBeneficiary(receiver)).toStrictEqual( { - V1: { + V2: { parents: 0, interior: { X1: { @@ -130,7 +130,7 @@ describe("TransactionRouter unit tests", () => { // @ts-ignore expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual( { - V1: [ + V2: [ { fun: { Fungible: asset.amount @@ -143,5 +143,263 @@ describe("TransactionRouter unit tests", () => { } ) }); + + describe("getTwoHopTransferInstructions works", () => { + test("Works with parachain reserve", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const reserveParaId = 2000; + const destParaId = 2002; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { Parachain: reserveParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 } + ] + }, + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + true + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [{ + id: + { + Concrete: { + interior: { + X3: [ + { + Parachain: reserveParaId, + }, + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 1, + }, + }, + fun: { + Fungible: asset.amount + } + }] + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: { + X1: { + Parachain: reserveParaId, + }, + }, + parents: 1, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + }, + }, + { + DepositReserveAsset: { + assets: { + Wild: "All", + }, + dest: { + interior: { + X1: { + Parachain: destParaId, + }, + }, + parents: 1, + }, + maxAssets: 1, + xcm: [ + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + } + }, + ] + }); + }); + + test("Works with relaychain reserve", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const reserveParaId = -1; + const destParaId = 2002; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + true + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [ + { + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: "Here", + parents: 1, + }, + }, + }, + ], + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: "Here", + parents: 1, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: "Here", + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + } + }, + { + DepositReserveAsset: { + assets: { + Wild: "All", + }, + dest: { + interior: { + X1: { + Parachain: destParaId, + }, + }, + parents: 1, + }, + maxAssets: 1, + xcm: [ + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + } + } + ] + }); + }); + }); }); -}); \ No newline at end of file +}); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index ac7bedd..45c8d13 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -77,7 +77,8 @@ class ReserveTransfer { const destinationParaId = await this.getParaId(destinationApi); - const xcmProgram = this.sendToReserveChainInstructions(asset, destinationParaId, receiver); + const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); + const xcmProgram = this.getSendToReserveChainInstructions(asset, destinationParaId, receiver, isOriginPara); let reserveTransfer: any; if (originApi.tx.xcmPallet) { @@ -123,7 +124,8 @@ class ReserveTransfer { const reserveParaId = await this.getParaId(reserveChainApi); const destinationParaId = await this.getParaId(destinationApi); - const xcmProgram = this.twoHopTransferInstructions(asset, reserveParaId, destinationParaId, receiver); + const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); + const xcmProgram = this.getTwoHopTransferInstructions(asset, reserveParaId, destinationParaId, receiver, isOriginPara); let reserveTransfer: any; if (originApi.tx.xcmPallet) { @@ -164,19 +166,28 @@ class ReserveTransfer { // destination chain that it received the tokens. // 5. `DepositAsset`, this deposits the received assets on the destination chain into the receiver's // account. - private static twoHopTransferInstructions(asset: Fungible, reserveParaId: number, destParaId: number, beneficiary: Receiver): any { - const reserve = this.getReserve(reserveParaId); + private static getTwoHopTransferInstructions( + asset: Fungible, + reserveParaId: number, + destParaId: number, + beneficiary: Receiver, + isOriginPara: boolean + ): any { + const reserve = this.getReserve(reserveParaId, isOriginPara); // NOTE: we use parse and stringify to make a hard copy of the asset. let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (reserveParaId > 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. - this.removeParachainFromLocation(assetFromReservePerspective, reserveParaId); + this.removeParachainFromLocation(assetFromReservePerspective); + } else { + // The reserve is the relay chain. + assetFromReservePerspective.parents = 0; } return { V2: [ - this.withdrawAsset(asset), + this.withdrawAsset(asset, isOriginPara), { InitiateReserveWithdraw: { assets: { @@ -213,19 +224,24 @@ class ReserveTransfer { // the reserve chain. // 3. `BuyExecution`, on the reserve chain // 4. `DepositAsset`, this deposits the received assets to the receiver on the reserve chain. - private static sendToReserveChainInstructions(asset: Fungible, destParaId: number, beneficiary: Receiver): any { - const reserve = this.getReserve(destParaId); + private static getSendToReserveChainInstructions( + asset: Fungible, + destParaId: number, + beneficiary: Receiver, + isOriginPara: boolean + ): any { + const reserve = this.getReserve(destParaId, isOriginPara); // NOTE: we use parse and stringify to make a hard copy of the asset. let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (destParaId >= 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. - this.removeParachainFromLocation(assetFromReservePerspective, destParaId); + this.removeParachainFromLocation(assetFromReservePerspective); } return { V2: [ - this.withdrawAsset(asset), + this.withdrawAsset(asset, isOriginPara), { InitiateReserveWithdraw: { assets: { @@ -243,13 +259,24 @@ class ReserveTransfer { } } - private static withdrawAsset(asset: Fungible): any { + private static withdrawAsset(asset: Fungible, isOriginPara: boolean): any { + const junctions = this.extractJunctions(asset.multiAsset); + let parents = 0; + if (isOriginPara) { + parents = 1; + } + + let interior = junctions == "Here" ? "Here" : { [`X${junctions.length}`]: junctions }; + return { WithdrawAsset: [ { id: { - Concrete: asset.multiAsset + Concrete: { + interior, + parents + }, }, fun: { Fungible: asset.amount @@ -303,10 +330,11 @@ class ReserveTransfer { }; } - private static getReserve(reserveParaId: number) { + private static getReserve(reserveParaId: number, isOriginPara: boolean) { if (reserveParaId < 0) { + const parents = isOriginPara ? 1 : 0; return { - parents: 0, + parents, interior: "Here" } } else { @@ -417,17 +445,25 @@ class ReserveTransfer { } // Helper function to remove a specific key from an object. - private static removeParachainFromLocation(location: any, paraId: number) { + private static removeParachainFromLocation(location: any) { + const junctions = this.extractJunctions(location); + junctions.splice(0, 1); + delete location.interior[`X${junctions.length + 1}`]; + location.interior[`X${junctions.length}`] = junctions; + location.parents = 0; + } + + private static extractJunctions(location: any): any { const keyPattern = /^X\d$/; + if (location.interior == "Here") { + return "Here"; + } + const key = Object.keys(location.interior).find(key => keyPattern.test(key)); if (key) { - const junctions: any[] = location.interior[key]; - junctions.splice(0, 1); - delete location.interior[key]; - location.interior[`X${junctions.length}`] = junctions; - location.parents = 0; + return location.interior[key]; } else { throw Error("Couldn't get junctions of an asset's location"); } From 65deb920dcec06bd54fa0185ff2342686c195b4d Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 14:20:56 +0200 Subject: [PATCH 40/45] two hop fully tested --- .../transactionRouter/reserveTransfer.test.ts | 146 +++++++++++++++++- .../transactionRouter/reserveTransfer.ts | 5 +- 2 files changed, 147 insertions(+), 4 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index 405d2f2..adae023 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -145,7 +145,7 @@ describe("TransactionRouter unit tests", () => { }); describe("getTwoHopTransferInstructions works", () => { - test("Works with parachain reserve", () => { + it("Works with parachain reserve", () => { const bob = ecdsaKering.addFromUri("//Bob"); const reserveParaId = 2000; @@ -288,7 +288,7 @@ describe("TransactionRouter unit tests", () => { }); }); - test("Works with relaychain reserve", () => { + it("Works with relaychain being the reserve chain", () => { const bob = ecdsaKering.addFromUri("//Bob"); const reserveParaId = -1; @@ -400,6 +400,148 @@ describe("TransactionRouter unit tests", () => { ] }); }); + + test("Sending from relaychain to a parachain through a reserve parachain", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const reserveParaId = 1000; + const destParaId = 2000; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { Parachain: reserveParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 } + ] + }, + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + false + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [{ + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: { + X3: [ + { + Parachain: reserveParaId, + }, + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + } + }] + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: { + X1: { + Parachain: reserveParaId, + }, + }, + parents: 0, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + }, + }, + { + DepositReserveAsset: { + assets: { + Wild: "All", + }, + dest: { + interior: { + X1: { + Parachain: 2000, + }, + }, + parents: 1, + }, + maxAssets: 1, + xcm: [ + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + } + } + ] + }); + }); }); }); }); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 45c8d13..6ceb417 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -331,15 +331,16 @@ class ReserveTransfer { } private static getReserve(reserveParaId: number, isOriginPara: boolean) { + const parents = isOriginPara ? 1 : 0; + if (reserveParaId < 0) { - const parents = isOriginPara ? 1 : 0; return { parents, interior: "Here" } } else { return { - parents: 1, + parents, interior: { X1: { Parachain: reserveParaId From 06fbdd17f7eccf68ca813fe978c912069135ff62 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 14:49:11 +0200 Subject: [PATCH 41/45] getSendToReserveChainInstructions fully tested --- .../transactionRouter/reserveTransfer.test.ts | 356 ++++++++++++++++++ .../transactionRouter/reserveTransfer.ts | 9 +- 2 files changed, 362 insertions(+), 3 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index adae023..b80d66f 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -144,6 +144,362 @@ describe("TransactionRouter unit tests", () => { ) }); + describe("getSendToReserveChainInstructions works", () => { + it("Works from parachain to parachain", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const destParaId = 2002; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { Parachain: destParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 } + ] + }, + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + true + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [ + { + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: { + X3: [ + { + Parachain: destParaId, + }, + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 1, + }, + }, + }, + ] + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: { + X1: { + Parachain: destParaId, + }, + }, + parents: 1, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + }, + }, + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + }); + }); + + it("Works from parachain to relaychain", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const destParaId = -1; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X2: [ + { PalletInstance: 42 }, + { GeneralIndex: 69 } + ] + }, + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + true + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [ + { + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 1, + }, + }, + }, + ] + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: "Here", + parents: 1, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + }, + }, + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + }); + }); + + it("Works from relaychain to parachain", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const destParaId = 1000; + const beneficiary: Receiver = { + addressRaw: bob.addressRaw, + network: 1, + type: AccountType.accountId32 + }; + + const asset: Fungible = { + multiAsset: { + interior: { + X2: [ + { Parachain: destParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 } + ] + }, + parents: 0, + }, + amount: 200 + }; + + // @ts-ignore + expect(ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + false + )).toStrictEqual({ + V2: [ + { + WithdrawAsset: [ + { + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: { + X3: [ + { Parachain: destParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 0, + }, + }, + }, + ] + }, + { + InitiateReserveWithdraw: { + assets: { + Wild: "All", + }, + reserve: { + interior: { X1: { Parachain: destParaId } }, + parents: 0, + }, + xcm: [ + { + BuyExecution: { + fees: { + fun: { + Fungible: 450000000000, + }, + id: { + Concrete: { + interior: { + X2: [ + { + PalletInstance: 42, + }, + { + GeneralIndex: 69, + }, + ], + }, + parents: 0, + }, + }, + }, + weightLimit: "Unlimited", + }, + }, + { + DepositAsset: { + assets: { + Wild: "All", + }, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: bob.addressRaw, + network: "Any" + } + } + }, + parents: 0 + }, + maxAssets: 1 + } + } + ] + } + } + ] + }); + }); + }); + describe("getTwoHopTransferInstructions works", () => { it("Works with parachain reserve", () => { const bob = ecdsaKering.addFromUri("//Bob"); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 6ceb417..b818d50 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -179,7 +179,7 @@ class ReserveTransfer { let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (reserveParaId > 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. - this.removeParachainFromLocation(assetFromReservePerspective); + this.assetFromReservePerspective(assetFromReservePerspective); } else { // The reserve is the relay chain. assetFromReservePerspective.parents = 0; @@ -236,7 +236,10 @@ class ReserveTransfer { let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (destParaId >= 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. - this.removeParachainFromLocation(assetFromReservePerspective); + this.assetFromReservePerspective(assetFromReservePerspective); + } else { + // The reserve is the relay chain. + assetFromReservePerspective.parents = 0; } return { @@ -446,7 +449,7 @@ class ReserveTransfer { } // Helper function to remove a specific key from an object. - private static removeParachainFromLocation(location: any) { + private static assetFromReservePerspective(location: any) { const junctions = this.extractJunctions(location); junctions.splice(0, 1); delete location.interior[`X${junctions.length + 1}`]; From a4d54d64ec52a3ba27381488783a38e516fe300c Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 14:53:04 +0200 Subject: [PATCH 42/45] prettier --- .../transactionRouter/reserveTransfer.test.ts | 598 ++++++++---------- 1 file changed, 279 insertions(+), 319 deletions(-) diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index b80d66f..6ad1764 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -6,7 +6,7 @@ import { AccountType } from "../../../types/types-arguments/identity"; import ReserveTransfer from "./reserveTransfer"; import { Receiver, Fungible } from "./types"; import { Keyring } from "@polkadot/api"; -import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { cryptoWaitReady } from "@polkadot/util-crypto"; const sr25519Keyring = new Keyring({ type: "sr25519" }); const ecdsaKering = new Keyring({ type: "ecdsa" }); @@ -15,50 +15,42 @@ describe("TransactionRouter unit tests", () => { describe("getDestination works", () => { it("Works with the destination being the relay chain", () => { // @ts-ignore - expect(ReserveTransfer.getDestination(true, 69, false)).toStrictEqual( - { - V2: { - parents: 1, - interior: "Here" - } - } - ); + expect(ReserveTransfer.getDestination(true, 69, false)).toStrictEqual({ + V2: { + parents: 1, + interior: "Here", + }, + }); // @ts-ignore - expect(ReserveTransfer.getDestination(false, 69, false)).toStrictEqual( - { - V2: { - parents: 0, - interior: "Here" - } - } - ); + expect(ReserveTransfer.getDestination(false, 69, false)).toStrictEqual({ + V2: { + parents: 0, + interior: "Here", + }, + }); }); it("Works with the destination being a parachain", () => { // @ts-ignore - expect(ReserveTransfer.getDestination(false, 2000, true)).toStrictEqual( - { - V2: { - parents: 0, - interior: { - X1: { Parachain: 2000 } - } - } - } - ); + expect(ReserveTransfer.getDestination(false, 2000, true)).toStrictEqual({ + V2: { + parents: 0, + interior: { + X1: { Parachain: 2000 }, + }, + }, + }); // @ts-ignore - expect(ReserveTransfer.getDestination(true, 2000, true)).toStrictEqual( - { - V2: { - parents: 1, - interior: { - X1: { Parachain: 2000 } - } - } - } - ); + expect(ReserveTransfer.getDestination(true, 2000, true)).toStrictEqual({ + V2: { + parents: 1, + interior: { + X1: { Parachain: 2000 }, + }, + }, + }); }); }); @@ -72,48 +64,48 @@ describe("TransactionRouter unit tests", () => { var receiver: Receiver = { addressRaw: alice.addressRaw, network: 0, - type: AccountType.accountId32 + type: AccountType.accountId32, }; - // @ts-ignore - expect(ReserveTransfer.getReserveTransferBeneficiary(receiver)).toStrictEqual( - { - V2: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: "Any", - id: receiver.addressRaw - } - } - } - } - } - ); + expect( + // @ts-ignore + ReserveTransfer.getReserveTransferBeneficiary(receiver), + ).toStrictEqual({ + V2: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: "Any", + id: receiver.addressRaw, + }, + }, + }, + }, + }); var receiver: Receiver = { addressRaw: bob.addressRaw, network: 0, - type: AccountType.accountKey20 + type: AccountType.accountKey20, }; - // @ts-ignore - expect(ReserveTransfer.getReserveTransferBeneficiary(receiver)).toStrictEqual( - { - V2: { - parents: 0, - interior: { - X1: { - AccountKey20: { - network: "Any", - id: receiver.addressRaw - } - } - } - } - } - ); + expect( + // @ts-ignore + ReserveTransfer.getReserveTransferBeneficiary(receiver), + ).toStrictEqual({ + V2: { + parents: 0, + interior: { + X1: { + AccountKey20: { + network: "Any", + id: receiver.addressRaw, + }, + }, + }, + }, + }); }); }); @@ -124,24 +116,22 @@ describe("TransactionRouter unit tests", () => { interior: "Here", parents: 0, }, - amount: 200 + amount: 200, }; // @ts-ignore - expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual( - { - V2: [ - { - fun: { - Fungible: asset.amount - }, - id: { - Concrete: asset.multiAsset - } - } - ] - } - ) + expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual({ + V2: [ + { + fun: { + Fungible: asset.amount, + }, + id: { + Concrete: asset.multiAsset, + }, + }, + ], + }); }); describe("getSendToReserveChainInstructions works", () => { @@ -152,7 +142,7 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { @@ -161,21 +151,23 @@ describe("TransactionRouter unit tests", () => { X3: [ { Parachain: destParaId }, { PalletInstance: 42 }, - { GeneralIndex: 69 } - ] + { GeneralIndex: 69 }, + ], }, parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getSendToReserveChainInstructions( - asset, - destParaId, - beneficiary, - true - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + true, + ), + ).toStrictEqual({ V2: [ { WithdrawAsset: [ @@ -187,22 +179,16 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X3: [ - { - Parachain: destParaId, - }, - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { Parachain: destParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 1, }, }, }, - ] + ], }, { InitiateReserveWithdraw: { @@ -228,12 +214,8 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 0, @@ -253,19 +235,19 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] + maxAssets: 1, + }, + }, + ], + }, + }, + ], }); }); @@ -276,29 +258,28 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { multiAsset: { interior: { - X2: [ - { PalletInstance: 42 }, - { GeneralIndex: 69 } - ] + X2: [{ PalletInstance: 42 }, { GeneralIndex: 69 }], }, parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getSendToReserveChainInstructions( - asset, - destParaId, - beneficiary, - true - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + true, + ), + ).toStrictEqual({ V2: [ { WithdrawAsset: [ @@ -310,19 +291,15 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 1, }, }, }, - ] + ], }, { InitiateReserveWithdraw: { @@ -344,12 +321,8 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 0, @@ -369,19 +342,19 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] + maxAssets: 1, + }, + }, + ], + }, + }, + ], }); }); @@ -392,7 +365,7 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { @@ -401,21 +374,23 @@ describe("TransactionRouter unit tests", () => { X2: [ { Parachain: destParaId }, { PalletInstance: 42 }, - { GeneralIndex: 69 } - ] + { GeneralIndex: 69 }, + ], }, parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getSendToReserveChainInstructions( - asset, - destParaId, - beneficiary, - false - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getSendToReserveChainInstructions( + asset, + destParaId, + beneficiary, + false, + ), + ).toStrictEqual({ V2: [ { WithdrawAsset: [ @@ -436,7 +411,7 @@ describe("TransactionRouter unit tests", () => { }, }, }, - ] + ], }, { InitiateReserveWithdraw: { @@ -458,12 +433,8 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 0, @@ -483,19 +454,19 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] + maxAssets: 1, + }, + }, + ], + }, + }, + ], }); }); }); @@ -509,7 +480,7 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { @@ -518,48 +489,45 @@ describe("TransactionRouter unit tests", () => { X3: [ { Parachain: reserveParaId }, { PalletInstance: 42 }, - { GeneralIndex: 69 } - ] + { GeneralIndex: 69 }, + ], }, parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getTwoHopTransferInstructions( - asset, - reserveParaId, - destParaId, - beneficiary, - true - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + true, + ), + ).toStrictEqual({ V2: [ { - WithdrawAsset: [{ - id: + WithdrawAsset: [ { - Concrete: { - interior: { - X3: [ - { - Parachain: reserveParaId, - }, - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, - ], + id: { + Concrete: { + interior: { + X3: [ + { Parachain: reserveParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 1, }, - parents: 1, + }, + fun: { + Fungible: asset.amount, }, }, - fun: { - Fungible: asset.amount - } - }] + ], }, { InitiateReserveWithdraw: { @@ -585,12 +553,8 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 0, @@ -625,22 +589,22 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] - } + maxAssets: 1, + }, + }, + ], + }, + }, + ], + }, }, - ] + ], }); }); @@ -652,7 +616,7 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { @@ -660,17 +624,19 @@ describe("TransactionRouter unit tests", () => { interior: "Here", parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getTwoHopTransferInstructions( - asset, - reserveParaId, - destParaId, - beneficiary, - true - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + true, + ), + ).toStrictEqual({ V2: [ { WithdrawAsset: [ @@ -711,7 +677,7 @@ describe("TransactionRouter unit tests", () => { }, }, weightLimit: "Unlimited", - } + }, }, { DepositReserveAsset: { @@ -738,22 +704,22 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] - } - } - ] + maxAssets: 1, + }, + }, + ], + }, + }, + ], + }, + }, + ], }); }); @@ -765,7 +731,7 @@ describe("TransactionRouter unit tests", () => { const beneficiary: Receiver = { addressRaw: bob.addressRaw, network: 1, - type: AccountType.accountId32 + type: AccountType.accountId32, }; const asset: Fungible = { @@ -774,47 +740,45 @@ describe("TransactionRouter unit tests", () => { X3: [ { Parachain: reserveParaId }, { PalletInstance: 42 }, - { GeneralIndex: 69 } - ] + { GeneralIndex: 69 }, + ], }, parents: 0, }, - amount: 200 + amount: 200, }; - // @ts-ignore - expect(ReserveTransfer.getTwoHopTransferInstructions( - asset, - reserveParaId, - destParaId, - beneficiary, - false - )).toStrictEqual({ + expect( + // @ts-ignore + ReserveTransfer.getTwoHopTransferInstructions( + asset, + reserveParaId, + destParaId, + beneficiary, + false, + ), + ).toStrictEqual({ V2: [ { - WithdrawAsset: [{ - fun: { - Fungible: 200, - }, - id: { - Concrete: { - interior: { - X3: [ - { - Parachain: reserveParaId, - }, - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, - ], + WithdrawAsset: [ + { + fun: { + Fungible: 200, + }, + id: { + Concrete: { + interior: { + X3: [ + { Parachain: reserveParaId }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 0, }, - parents: 0, }, - } - }] + }, + ], }, { InitiateReserveWithdraw: { @@ -840,12 +804,8 @@ describe("TransactionRouter unit tests", () => { Concrete: { interior: { X2: [ - { - PalletInstance: 42, - }, - { - GeneralIndex: 69, - }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, ], }, parents: 0, @@ -880,22 +840,22 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { id: bob.addressRaw, - network: "Any" - } - } + network: "Any", + }, + }, }, - parents: 0 + parents: 0, }, - maxAssets: 1 - } - } - ] - } - } - ] - } - } - ] + maxAssets: 1, + }, + }, + ], + }, + }, + ], + }, + }, + ], }); }); }); From e1c421930f9b1bbef365f6dbdb1a5929e83ca284 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Fri, 18 Aug 2023 19:42:26 +0200 Subject: [PATCH 43/45] reserveTransfer.ts fully tested --- .../transactionRouter/reserveTransfer.test.ts | 336 ++++++++++++++++++ .../transactionRouter/reserveTransfer.ts | 7 + 2 files changed, 343 insertions(+) diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index 6ad1764..b5f1276 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -134,6 +134,342 @@ describe("TransactionRouter unit tests", () => { }); }); + describe("withdrawAsset works", () => { + it("Works with parachain origin", () => { + const asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { Parachain: 2000 }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 0, + }, + amount: 200, + }; + + // @ts-ignore + expect(ReserveTransfer.withdrawAsset(asset, true)).toStrictEqual({ + WithdrawAsset: [{ + id: { + Concrete: { + interior: { + X3: [ + { Parachain: 2000 }, + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 1 + } + }, + fun: { + Fungible: 200 + } + }] + }); + }); + + it("Works with relaychain origin", () => { + var asset: Fungible = { + multiAsset: { + interior: { + X3: [ + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 0, + }, + amount: 200, + }; + + // @ts-ignore + expect(ReserveTransfer.withdrawAsset(asset, false)).toStrictEqual({ + WithdrawAsset: [{ + id: { + Concrete: { + interior: { + X2: [ + { PalletInstance: 42 }, + { GeneralIndex: 69 }, + ], + }, + parents: 0 + } + }, + fun: { + Fungible: 200 + } + }] + }); + + // Works with asset which has "Here" as interior. + var asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0 + }, + amount: 200, + }; + + // @ts-ignore + expect(ReserveTransfer.withdrawAsset(asset, false)).toStrictEqual({ + WithdrawAsset: [{ + id: { + Concrete: { + interior: "Here", + parents: 0 + } + }, + fun: { + Fungible: 200 + } + }] + }); + }); + }); + + describe("buyExecution works", () => { + it("Works", () => { + // Works with asset which has "Here" as interior. + var asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0 + }, + amount: 200, + }; + + // @ts-ignore + expect(ReserveTransfer.buyExecution(asset.multiAsset, 500)).toStrictEqual({ + BuyExecution: { + fees: { + id: { + Concrete: { + interior: "Here", + parents: 0 + } + }, + fun: { + Fungible: 500 + } + }, + weightLimit: "Unlimited" + } + }) + }); + }); + + describe("depositReserveAsset works", () => { + it("Works", () => { + // Works with asset which has "Here" as interior. + var asset: Fungible = { + multiAsset: { + interior: "Here", + parents: 0 + }, + amount: 200, + }; + + + // @ts-ignore + expect(ReserveTransfer.depositReserveAsset(asset, 1, { + parents: 1, + interior: { + X1: { + Parachain: 2000 + } + } + // @ts-ignore + }, [])).toStrictEqual({ + DepositReserveAsset: { + assets: asset, + maxAssets: 1, + dest: { + parents: 1, + interior: { + X1: { + Parachain: 2000 + } + } + }, + xcm: [] + } + }); + }); + }); + + describe("depositAsset & getReceiverAccount work", () => { + it("Works with AccountId32", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountId32, + network: 0, + }; + + // @ts-ignore + expect(ReserveTransfer.depositAsset({ Wild: "All" }, 1, receiver)).toStrictEqual({ + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: 1, + beneficiary: { + interior: { + X1: { + AccountId32: { + id: receiver.addressRaw, + network: "Any" + } + } + }, + parents: 0 + } + } + }); + }); + + it("Works with AccountKey20", () => { + const bob = ecdsaKering.addFromUri("//Bob"); + + const receiver: Receiver = { + addressRaw: bob.addressRaw, + type: AccountType.accountKey20, + network: 0, + }; + + // @ts-ignore + expect(ReserveTransfer.depositAsset({ Wild: "All" }, 1, receiver)).toStrictEqual({ + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: 1, + beneficiary: { + interior: { + X1: { + AccountKey20: { + id: receiver.addressRaw, + network: "Any" + } + } + }, + parents: 0 + } + } + }); + }); + }); + + describe("getReserve works", () => { + it("works with origin para", () => { + // @ts-ignore + expect(ReserveTransfer.getReserve(1000, true)).toStrictEqual({ + parents: 1, + interior: { + X1: { + Parachain: 1000 + } + } + }); + }); + + it("works with origin being the relaychain", () => { + // @ts-ignore + expect(ReserveTransfer.getReserve(1000, false)).toStrictEqual({ + parents: 0, + interior: { + X1: { + Parachain: 1000 + } + } + }); + }); + + it("works with origin para and reserve relay", () => { + // @ts-ignore + expect(ReserveTransfer.getReserve(-1, true)).toStrictEqual({ + parents: 1, + interior: "Here" + }); + }); + }); + + describe("assetFromReservePerspective works", () => { + it("Works with any number of junctions and 'Here'", () => { + const junctions = { + interior: { + X5: [ + { Parachain: 1000 }, + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + // Doesn't matter what is in here for testing... + ] + }, + parents: 0 + }; + // @ts-ignore + ReserveTransfer.assetFromReservePerspective(junctions); + expect(junctions).toStrictEqual({ + interior: { + X4: [ + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + { GeneralIndex: 42 }, + ] + }, + parents: 0 + }); + + const junctions2 = { + interior: { + X1: [ + { Parachain: 1000 }, + // Doesn't matter what is in here for testing this + ] + }, + parents: 1 + }; + // @ts-ignore + ReserveTransfer.assetFromReservePerspective(junctions2); + expect(junctions2).toStrictEqual({ + interior: "Here", + parents: 0 + }); + }); + }); + + describe("extractJunctions works", () => { + it("Works with any number of junctions and 'Here'", () => { + // @ts-ignore + expect(ReserveTransfer.extractJunctions({ + interior: { + X3: [ + // Doesn't matter what is in here for testing this + { GeneralIndex: 42 }, + { Parachain: 42 }, + { GeneralIndex: 42 }, + ] + }, + parents: 1 + })).toStrictEqual([ + { GeneralIndex: 42 }, + { Parachain: 42 }, + { GeneralIndex: 42 }, + ]); + + // @ts-ignore + expect(ReserveTransfer.extractJunctions({ + interior: "Here", + parents: 1 + })).toStrictEqual("Here"); + }); + }); + describe("getSendToReserveChainInstructions works", () => { it("Works from parachain to parachain", () => { const bob = ecdsaKering.addFromUri("//Bob"); diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index b818d50..bea93b8 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -451,6 +451,13 @@ class ReserveTransfer { // Helper function to remove a specific key from an object. private static assetFromReservePerspective(location: any) { const junctions = this.extractJunctions(location); + + if (junctions.length === 1) { + location.interior = "Here"; + location.parents = 0; + return; + } + junctions.splice(0, 1); delete location.interior[`X${junctions.length + 1}`]; location.interior[`X${junctions.length}`] = junctions; From f050bf1e03aa0db1113a77a6de474fddc22e7bb9 Mon Sep 17 00:00:00 2001 From: Sergej Sakac Date: Sat, 19 Aug 2023 12:06:15 +0200 Subject: [PATCH 44/45] Make eslint happy --- src/utils/transactionRouter/index.ts | 2 +- .../transactionRouter/reserveTransfer.test.ts | 57 ++++++++++++++----- .../transactionRouter/reserveTransfer.ts | 11 ++-- 3 files changed, 51 insertions(+), 19 deletions(-) diff --git a/src/utils/transactionRouter/index.ts b/src/utils/transactionRouter/index.ts index 8775893..bf79e27 100644 --- a/src/utils/transactionRouter/index.ts +++ b/src/utils/transactionRouter/index.ts @@ -1,9 +1,9 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; +import ReserveTransfer from "./reserveTransfer"; import TransferAsset from "./transferAsset"; import { Fungible, Receiver, Sender } from "./types"; import IdentityContract from "../../../types/contracts/identity"; -import ReserveTransfer from "./reserveTransfer"; // Responsible for handling all the transfer logic. // diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index b5f1276..12533f9 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -2,18 +2,20 @@ // // The e2e tests are placed in the `__tests__` directory in the root of the project. -import { AccountType } from "../../../types/types-arguments/identity"; -import ReserveTransfer from "./reserveTransfer"; -import { Receiver, Fungible } from "./types"; import { Keyring } from "@polkadot/api"; import { cryptoWaitReady } from "@polkadot/util-crypto"; +import ReserveTransfer from "./reserveTransfer"; +import { Fungible, Receiver } from "./types"; +import { AccountType } from "../../../types/types-arguments/identity"; + const sr25519Keyring = new Keyring({ type: "sr25519" }); const ecdsaKering = new Keyring({ type: "ecdsa" }); describe("TransactionRouter unit tests", () => { describe("getDestination works", () => { it("Works with the destination being the relay chain", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getDestination(true, 69, false)).toStrictEqual({ V2: { @@ -22,6 +24,7 @@ describe("TransactionRouter unit tests", () => { }, }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getDestination(false, 69, false)).toStrictEqual({ V2: { @@ -32,6 +35,7 @@ describe("TransactionRouter unit tests", () => { }); it("Works with the destination being a parachain", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getDestination(false, 2000, true)).toStrictEqual({ V2: { @@ -42,6 +46,7 @@ describe("TransactionRouter unit tests", () => { }, }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getDestination(true, 2000, true)).toStrictEqual({ V2: { @@ -61,13 +66,14 @@ describe("TransactionRouter unit tests", () => { const alice = sr25519Keyring.addFromUri("//Alice"); const bob = ecdsaKering.addFromUri("//Bob"); - var receiver: Receiver = { + const receiverAccId32: Receiver = { addressRaw: alice.addressRaw, network: 0, type: AccountType.accountId32, }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getReserveTransferBeneficiary(receiver), ).toStrictEqual({ @@ -77,20 +83,21 @@ describe("TransactionRouter unit tests", () => { X1: { AccountId32: { network: "Any", - id: receiver.addressRaw, + id: receiverAccId32.addressRaw, }, }, }, }, }); - var receiver: Receiver = { + const receiverAccKey20: Receiver = { addressRaw: bob.addressRaw, network: 0, type: AccountType.accountKey20, }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getReserveTransferBeneficiary(receiver), ).toStrictEqual({ @@ -100,7 +107,7 @@ describe("TransactionRouter unit tests", () => { X1: { AccountKey20: { network: "Any", - id: receiver.addressRaw, + id: receiverAccKey20.addressRaw, }, }, }, @@ -119,6 +126,7 @@ describe("TransactionRouter unit tests", () => { amount: 200, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getMultiAsset(asset)).toStrictEqual({ V2: [ @@ -150,6 +158,7 @@ describe("TransactionRouter unit tests", () => { amount: 200, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.withdrawAsset(asset, true)).toStrictEqual({ WithdrawAsset: [{ @@ -173,10 +182,10 @@ describe("TransactionRouter unit tests", () => { }); it("Works with relaychain origin", () => { - var asset: Fungible = { + const complexAsset: Fungible = { multiAsset: { interior: { - X3: [ + X2: [ { PalletInstance: 42 }, { GeneralIndex: 69 }, ], @@ -186,8 +195,9 @@ describe("TransactionRouter unit tests", () => { amount: 200, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - expect(ReserveTransfer.withdrawAsset(asset, false)).toStrictEqual({ + expect(ReserveTransfer.withdrawAsset(complexAsset, false)).toStrictEqual({ WithdrawAsset: [{ id: { Concrete: { @@ -207,7 +217,7 @@ describe("TransactionRouter unit tests", () => { }); // Works with asset which has "Here" as interior. - var asset: Fungible = { + const simpleAsset: Fungible = { multiAsset: { interior: "Here", parents: 0 @@ -215,8 +225,9 @@ describe("TransactionRouter unit tests", () => { amount: 200, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - expect(ReserveTransfer.withdrawAsset(asset, false)).toStrictEqual({ + expect(ReserveTransfer.withdrawAsset(simpleAsset, false)).toStrictEqual({ WithdrawAsset: [{ id: { Concrete: { @@ -235,7 +246,7 @@ describe("TransactionRouter unit tests", () => { describe("buyExecution works", () => { it("Works", () => { // Works with asset which has "Here" as interior. - var asset: Fungible = { + const asset: Fungible = { multiAsset: { interior: "Here", parents: 0 @@ -243,6 +254,7 @@ describe("TransactionRouter unit tests", () => { amount: 200, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.buyExecution(asset.multiAsset, 500)).toStrictEqual({ BuyExecution: { @@ -266,7 +278,7 @@ describe("TransactionRouter unit tests", () => { describe("depositReserveAsset works", () => { it("Works", () => { // Works with asset which has "Here" as interior. - var asset: Fungible = { + const asset: Fungible = { multiAsset: { interior: "Here", parents: 0 @@ -275,6 +287,7 @@ describe("TransactionRouter unit tests", () => { }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.depositReserveAsset(asset, 1, { parents: 1, @@ -283,6 +296,7 @@ describe("TransactionRouter unit tests", () => { Parachain: 2000 } } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore }, [])).toStrictEqual({ DepositReserveAsset: { @@ -312,6 +326,7 @@ describe("TransactionRouter unit tests", () => { network: 0, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.depositAsset({ Wild: "All" }, 1, receiver)).toStrictEqual({ DepositAsset: { @@ -341,6 +356,7 @@ describe("TransactionRouter unit tests", () => { network: 0, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.depositAsset({ Wild: "All" }, 1, receiver)).toStrictEqual({ DepositAsset: { @@ -364,6 +380,7 @@ describe("TransactionRouter unit tests", () => { describe("getReserve works", () => { it("works with origin para", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getReserve(1000, true)).toStrictEqual({ parents: 1, @@ -376,6 +393,7 @@ describe("TransactionRouter unit tests", () => { }); it("works with origin being the relaychain", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getReserve(1000, false)).toStrictEqual({ parents: 0, @@ -388,6 +406,7 @@ describe("TransactionRouter unit tests", () => { }); it("works with origin para and reserve relay", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.getReserve(-1, true)).toStrictEqual({ parents: 1, @@ -411,6 +430,7 @@ describe("TransactionRouter unit tests", () => { }, parents: 0 }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.assetFromReservePerspective(junctions); expect(junctions).toStrictEqual({ @@ -434,6 +454,7 @@ describe("TransactionRouter unit tests", () => { }, parents: 1 }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.assetFromReservePerspective(junctions2); expect(junctions2).toStrictEqual({ @@ -445,6 +466,7 @@ describe("TransactionRouter unit tests", () => { describe("extractJunctions works", () => { it("Works with any number of junctions and 'Here'", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.extractJunctions({ interior: { @@ -462,6 +484,7 @@ describe("TransactionRouter unit tests", () => { { GeneralIndex: 42 }, ]); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(ReserveTransfer.extractJunctions({ interior: "Here", @@ -496,6 +519,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getSendToReserveChainInstructions( asset, @@ -608,6 +632,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getSendToReserveChainInstructions( asset, @@ -719,6 +744,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getSendToReserveChainInstructions( asset, @@ -834,6 +860,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getTwoHopTransferInstructions( asset, @@ -964,6 +991,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getTwoHopTransferInstructions( asset, @@ -1085,6 +1113,7 @@ describe("TransactionRouter unit tests", () => { }; expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ReserveTransfer.getTwoHopTransferInstructions( asset, diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index bea93b8..18e576e 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -20,6 +20,7 @@ class ReserveTransfer { const destParaId = await this.getParaId(destinationApi); + // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const destination = this.getDestination(isOriginPara, destParaId, destParaId >= 0); @@ -77,6 +78,7 @@ class ReserveTransfer { const destinationParaId = await this.getParaId(destinationApi); + // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const xcmProgram = this.getSendToReserveChainInstructions(asset, destinationParaId, receiver, isOriginPara); @@ -124,6 +126,7 @@ class ReserveTransfer { const reserveParaId = await this.getParaId(reserveChainApi); const destinationParaId = await this.getParaId(destinationApi); + // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const xcmProgram = this.getTwoHopTransferInstructions(asset, reserveParaId, destinationParaId, receiver, isOriginPara); @@ -176,7 +179,7 @@ class ReserveTransfer { const reserve = this.getReserve(reserveParaId, isOriginPara); // NOTE: we use parse and stringify to make a hard copy of the asset. - let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); + const assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (reserveParaId > 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. this.assetFromReservePerspective(assetFromReservePerspective); @@ -233,7 +236,7 @@ class ReserveTransfer { const reserve = this.getReserve(destParaId, isOriginPara); // NOTE: we use parse and stringify to make a hard copy of the asset. - let assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); + const assetFromReservePerspective = JSON.parse(JSON.stringify(asset.multiAsset)); if (destParaId >= 0) { // The location of the asset will always start with the parachain if the reserve is a parachain. this.assetFromReservePerspective(assetFromReservePerspective); @@ -269,7 +272,7 @@ class ReserveTransfer { parents = 1; } - let interior = junctions == "Here" ? "Here" : { [`X${junctions.length}`]: junctions }; + const interior = junctions == "Here" ? "Here" : { [`X${junctions.length}`]: junctions }; return { WithdrawAsset: [ @@ -366,7 +369,7 @@ class ReserveTransfer { // // The destination is an entity that will process the xcm message(i.e a relaychain or a parachain). private static getDestination(isOriginPara: boolean, destParaId: number, isDestPara: boolean): any { - let parents = isOriginPara ? 1 : 0; + const parents = isOriginPara ? 1 : 0; if (isDestPara) { return { From d7cc28824b6a93870daec30ebef2d55d5f5476a5 Mon Sep 17 00:00:00 2001 From: cute0laf Date: Sun, 20 Aug 2023 09:33:22 -0700 Subject: [PATCH 45/45] refactor --- __tests__/crossChainRouter.test.ts | 28 +++--- src/utils/index.ts | 10 ++ .../transactionRouter/reserveTransfer.test.ts | 20 ++-- .../transactionRouter/reserveTransfer.ts | 93 ++++++------------- src/utils/transactionRouter/transferAsset.ts | 24 ++--- 5 files changed, 72 insertions(+), 103 deletions(-) diff --git a/__tests__/crossChainRouter.test.ts b/__tests__/crossChainRouter.test.ts index e6fbe15..6e3e541 100644 --- a/__tests__/crossChainRouter.test.ts +++ b/__tests__/crossChainRouter.test.ts @@ -2,9 +2,9 @@ import { ApiPromise, Keyring, WsProvider } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; import { u8aToHex } from '@polkadot/util'; +import TransactionRouter from "@/utils/transactionRouter"; import { Fungible, Receiver, Sender } from "@/utils/transactionRouter/types"; -import TransactionRouter from "../src/utils/transactionRouter"; import IdentityContractFactory from "../types/constructors/identity"; import IdentityContract from "../types/contracts/identity"; import { AccountType, NetworkInfo } from "../types/types-arguments/identity"; @@ -14,6 +14,10 @@ const keyring = new Keyring({ type: "sr25519" }); const USDT_ASSET_ID = 1984; +const WS_ROROCO_LOCAL = "ws://127.0.0.1:9900"; +const WS_ASSET_HUB_LOCAL = "ws://127.0.0.1:9910"; +const WS_TRAPPIST_LOCAL = "ws://127.0.0.1:9920"; + describe("TransactionRouter Cross-chain", () => { let swankyApi: ApiPromise; let alice: KeyringPair; @@ -38,12 +42,12 @@ describe("TransactionRouter Cross-chain", () => { ); await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:9910", + rpcUrl: WS_ASSET_HUB_LOCAL, accountType: AccountType.accountId32, }); await addNetwork(identityContract, alice, { - rpcUrl: "ws://127.0.0.1:9920", + rpcUrl: WS_TRAPPIST_LOCAL, accountType: AccountType.accountId32, }); @@ -65,17 +69,17 @@ describe("TransactionRouter Cross-chain", () => { network: 1, }; - const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoProvider = new WsProvider(WS_ROROCO_LOCAL); const rococoApi = await ApiPromise.create({ provider: rococoProvider, }); - const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubProvider = new WsProvider(WS_ASSET_HUB_LOCAL); const assetHubApi = await ApiPromise.create({ provider: assetHubProvider, }); - const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistProvider = new WsProvider(WS_TRAPPIST_LOCAL); const trappistApi = await ApiPromise.create({ provider: trappistProvider, }); @@ -152,17 +156,17 @@ describe("TransactionRouter Cross-chain", () => { test("Transferring cross-chain to asset's reserve chain works", async () => { // NOTE this test depends on the success of the first test. - const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoProvider = new WsProvider(WS_ROROCO_LOCAL); const rococoApi = await ApiPromise.create({ provider: rococoProvider, }); - const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubProvider = new WsProvider(WS_ASSET_HUB_LOCAL); const assetHubApi = await ApiPromise.create({ provider: assetHubProvider, }); - const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistProvider = new WsProvider(WS_TRAPPIST_LOCAL); const trappistApi = await ApiPromise.create({ provider: trappistProvider, }); @@ -244,17 +248,17 @@ describe("TransactionRouter Cross-chain", () => { test("Transferring cross-chain accross reserve chain works", async () => { // NOTE this test depends on the success of the first test. - const rococoProvider = new WsProvider("ws://127.0.0.1:9900"); + const rococoProvider = new WsProvider(WS_ROROCO_LOCAL); const rococoApi = await ApiPromise.create({ provider: rococoProvider, }); - const assetHubProvider = new WsProvider("ws://127.0.0.1:9910"); + const assetHubProvider = new WsProvider(WS_ASSET_HUB_LOCAL); const assetHubApi = await ApiPromise.create({ provider: assetHubProvider, }); - const trappistProvider = new WsProvider("ws://127.0.0.1:9920"); + const trappistProvider = new WsProvider(WS_TRAPPIST_LOCAL); const trappistApi = await ApiPromise.create({ provider: trappistProvider, }); diff --git a/src/utils/index.ts b/src/utils/index.ts index d7fb9a3..1a007f6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,3 +1,4 @@ +import { ApiPromise } from "@polkadot/api"; import { isHex } from "@polkadot/util"; import { validateAddress } from '@polkadot/util-crypto'; @@ -20,3 +21,12 @@ export const isValidAddress = (networkAddress: string, ss58Prefix: number) => { return false; } }; + +export const getParaId = async (api: ApiPromise): Promise => { + if (api.query.parachainInfo) { + const response = (await api.query.parachainInfo.parachainId()).toJSON(); + return Number(response); + } else { + return -1; + } +} \ No newline at end of file diff --git a/src/utils/transactionRouter/reserveTransfer.test.ts b/src/utils/transactionRouter/reserveTransfer.test.ts index 12533f9..762e6ed 100644 --- a/src/utils/transactionRouter/reserveTransfer.test.ts +++ b/src/utils/transactionRouter/reserveTransfer.test.ts @@ -10,7 +10,7 @@ import { Fungible, Receiver } from "./types"; import { AccountType } from "../../../types/types-arguments/identity"; const sr25519Keyring = new Keyring({ type: "sr25519" }); -const ecdsaKering = new Keyring({ type: "ecdsa" }); +const ecdsaKeyring = new Keyring({ type: "ecdsa" }); describe("TransactionRouter unit tests", () => { describe("getDestination works", () => { @@ -64,7 +64,7 @@ describe("TransactionRouter unit tests", () => { await cryptoWaitReady(); const alice = sr25519Keyring.addFromUri("//Alice"); - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const receiverAccId32: Receiver = { addressRaw: alice.addressRaw, @@ -318,7 +318,7 @@ describe("TransactionRouter unit tests", () => { describe("depositAsset & getReceiverAccount work", () => { it("Works with AccountId32", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const receiver: Receiver = { addressRaw: bob.addressRaw, @@ -348,7 +348,7 @@ describe("TransactionRouter unit tests", () => { }); it("Works with AccountKey20", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const receiver: Receiver = { addressRaw: bob.addressRaw, @@ -495,7 +495,7 @@ describe("TransactionRouter unit tests", () => { describe("getSendToReserveChainInstructions works", () => { it("Works from parachain to parachain", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const destParaId = 2002; const beneficiary: Receiver = { @@ -612,7 +612,7 @@ describe("TransactionRouter unit tests", () => { }); it("Works from parachain to relaychain", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const destParaId = -1; const beneficiary: Receiver = { @@ -720,7 +720,7 @@ describe("TransactionRouter unit tests", () => { }); it("Works from relaychain to parachain", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const destParaId = 1000; const beneficiary: Receiver = { @@ -835,7 +835,7 @@ describe("TransactionRouter unit tests", () => { describe("getTwoHopTransferInstructions works", () => { it("Works with parachain reserve", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const reserveParaId = 2000; const destParaId = 2002; @@ -972,7 +972,7 @@ describe("TransactionRouter unit tests", () => { }); it("Works with relaychain being the reserve chain", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const reserveParaId = -1; const destParaId = 2002; @@ -1088,7 +1088,7 @@ describe("TransactionRouter unit tests", () => { }); test("Sending from relaychain to a parachain through a reserve parachain", () => { - const bob = ecdsaKering.addFromUri("//Bob"); + const bob = ecdsaKeyring.addFromUri("//Bob"); const reserveParaId = 1000; const destParaId = 2000; diff --git a/src/utils/transactionRouter/reserveTransfer.ts b/src/utils/transactionRouter/reserveTransfer.ts index 18e576e..e17fbb5 100644 --- a/src/utils/transactionRouter/reserveTransfer.ts +++ b/src/utils/transactionRouter/reserveTransfer.ts @@ -2,12 +2,13 @@ import { ApiPromise } from "@polkadot/api"; import { KeyringPair } from "@polkadot/keyring/types"; import { Fungible, Receiver } from "./types"; +import { getParaId } from ".."; import { AccountType } from "../../../types/types-arguments/identity"; class ReserveTransfer { // Transfers assets from the sender to the receiver. // - // This function assumes that the chain from which the sending is ocurring is the reserve chain of the asset. + // This function assumes that the sender chain is the reserve chain of the asset. public static async sendFromReserveChain( originApi: ApiPromise, destinationApi: ApiPromise, @@ -18,7 +19,7 @@ class ReserveTransfer { this.ensureContainsXcmPallet(originApi); this.ensureContainsXcmPallet(destinationApi); - const destParaId = await this.getParaId(destinationApi); + const destParaId = await getParaId(destinationApi); // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); @@ -30,26 +31,15 @@ class ReserveTransfer { const feeAssetItem = 0; const weightLimit = "Unlimited"; - let reserveTransfer: any; - if (originApi.tx.xcmPallet) { - reserveTransfer = originApi.tx.xcmPallet.limitedReserveTransferAssets( - destination, - beneficiary, - multiAsset, - feeAssetItem, - weightLimit - ); - } else if (originApi.tx.polkadotXcm) { - reserveTransfer = originApi.tx.polkadotXcm.limitedReserveTransferAssets( - destination, - beneficiary, - multiAsset, - feeAssetItem, - weightLimit - ); - } else { - throw new Error("The blockchain does not support XCM"); - } + const xcmPallet = (originApi.tx.xcmPallet || originApi.tx.polkadotXcm); + + const reserveTransfer = xcmPallet.limitedReserveTransferAssets( + destination, + beneficiary, + multiAsset, + feeAssetItem, + weightLimit + ); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { @@ -76,26 +66,18 @@ class ReserveTransfer { this.ensureContainsXcmPallet(originApi); this.ensureContainsXcmPallet(destinationApi); - const destinationParaId = await this.getParaId(destinationApi); + const destinationParaId = await getParaId(destinationApi); // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const xcmProgram = this.getSendToReserveChainInstructions(asset, destinationParaId, receiver, isOriginPara); - let reserveTransfer: any; - if (originApi.tx.xcmPallet) { - reserveTransfer = originApi.tx.xcmPallet.execute(xcmProgram, { - refTime: 3 * Math.pow(10, 11), - proofSize: Math.pow(10, 6), - }); - } else if (originApi.tx.polkadotXcm) { - reserveTransfer = originApi.tx.polkadotXcm.execute(xcmProgram, { - refTime: 3 * Math.pow(10, 11), - proofSize: Math.pow(10, 6), - }); - } else { - throw new Error("The blockchain does not support XCM"); - } + const xcmPallet = originApi.tx.xcmPallet || originApi.tx.polkadotXcm; + + const reserveTransfer = xcmPallet.execute(xcmProgram, { + refTime: 3 * Math.pow(10, 11), + proofSize: Math.pow(10, 6), + }); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { @@ -123,28 +105,19 @@ class ReserveTransfer { this.ensureContainsXcmPallet(destinationApi); this.ensureContainsXcmPallet(reserveChainApi); - const reserveParaId = await this.getParaId(reserveChainApi); - const destinationParaId = await this.getParaId(destinationApi); + const reserveParaId = await getParaId(reserveChainApi); + const destinationParaId = await getParaId(destinationApi); // eslint-disable-next-line no-prototype-builtins const isOriginPara = originApi.query.hasOwnProperty("parachainInfo"); const xcmProgram = this.getTwoHopTransferInstructions(asset, reserveParaId, destinationParaId, receiver, isOriginPara); - let reserveTransfer: any; - if (originApi.tx.xcmPallet) { - reserveTransfer = originApi.tx.xcmPallet.execute(xcmProgram, { - refTime: 3 * Math.pow(10, 11), - proofSize: Math.pow(10, 6), - }); - } else if (originApi.tx.polkadotXcm) { - reserveTransfer = originApi.tx.polkadotXcm.execute(xcmProgram, { - refTime: 3 * Math.pow(10, 11), - proofSize: Math.pow(10, 6), - }); - } else { - throw new Error("The blockchain does not support XCM"); - } + const xcmPallet = originApi.tx.xcmPallet || originApi.tx.polkadotXcm; + const reserveTransfer = xcmPallet.execute(xcmProgram, { + refTime: 3 * Math.pow(10, 11), + proofSize: Math.pow(10, 6), + }); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { const unsub = await reserveTransfer.signAndSend(sender, (result: any) => { @@ -267,10 +240,7 @@ class ReserveTransfer { private static withdrawAsset(asset: Fungible, isOriginPara: boolean): any { const junctions = this.extractJunctions(asset.multiAsset); - let parents = 0; - if (isOriginPara) { - parents = 1; - } + const parents = isOriginPara ? 1 : 0; const interior = junctions == "Here" ? "Here" : { [`X${junctions.length}`]: junctions }; @@ -356,15 +326,6 @@ class ReserveTransfer { } } - private static async getParaId(api: ApiPromise): Promise { - if (api.query.parachainInfo) { - const response = (await api.query.parachainInfo.parachainId()).toJSON(); - return Number(response); - } else { - return -1; - } - } - // Returns the destination of an xcm reserve transfer. // // The destination is an entity that will process the xcm message(i.e a relaychain or a parachain). diff --git a/src/utils/transactionRouter/transferAsset.ts b/src/utils/transactionRouter/transferAsset.ts index b3f9235..feeaa39 100644 --- a/src/utils/transactionRouter/transferAsset.ts +++ b/src/utils/transactionRouter/transferAsset.ts @@ -24,23 +24,17 @@ class TransferAsset { asset.amount ); - let xcmExecute: any; + const xcmPallet = api.tx.xcmPallet || api.tx.polkadotXcm; - if (api.tx.xcmPallet) { - // TODO: come up with more precise weight estimations. - xcmExecute = api.tx.xcmPallet.execute(xcm, { - refTime: Math.pow(10, 9), - proofSize: 10000, - }); - } else if (api.tx.polkadotXcm) { - // TODO: come up with more precise weight estimations. - xcmExecute = api.tx.polkadotXcm.execute(xcm, { - refTime: Math.pow(10, 9), - proofSize: 10000, - }); - } else { + if (!xcmPallet) { throw new Error("The blockchain does not support XCM"); - } + }; + + // TODO: come up with more precise weight estimations. + const xcmExecute = xcmPallet.execute(xcm, { + refTime: Math.pow(10, 9), + proofSize: 10000, + }); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => {