difftreelog
feat split tests into packages
in: master
179 files changed
.githooks/pre-commitdiffbeforeafterboth--- a/.githooks/pre-commit
+++ b/.githooks/pre-commit
@@ -28,7 +28,7 @@
fi
echo "Starting eslint.."
-./tests/node_modules/.bin/eslint --max-warnings 0 ${STAGED_TEST_FILES[@]}
+./js-packages/node_modules/.bin/eslint --max-warnings 0 ${STAGED_TEST_FILES[@]}
ESLINT_EXIT="$?"
if [[ "${ESLINT_EXIT}" = 0 ]]; then
.github/workflows/polkadot-types.ymldiffbeforeafterboth--- a/.github/workflows/polkadot-types.yml
+++ b/.github/workflows/polkadot-types.yml
@@ -77,10 +77,10 @@
working-directory: tests
run: |
yarn install
- /bin/bash ./scripts/wait_for_first_block.sh
+ /bin/bash ./scripts/generate_types/wait_for_first_block.sh
git config --global user.name "Unique"
git config --global user.email github-actions@usetech.com
- /bin/bash ./scripts/generate_types_package.sh --release ${{ matrix.usage }} --push
+ /bin/bash ./scripts/generate_types/generate_types_package.sh --release ${{ matrix.usage }} --push
env:
RPC_URL: http://127.0.0.1:9944/
Makefilediffbeforeafterboth--- a/Makefile
+++ b/Makefile
@@ -7,25 +7,25 @@
@echo " bench-unique"
NATIVE_FUNGIBLE_EVM_STUBS=./pallets/balances-adapter/src/stubs
-NATIVE_FUNGIBLE_EVM_ABI=./tests/src/eth/abi/nativeFungible.json
+NATIVE_FUNGIBLE_EVM_ABI=./js-packages/tests/src/eth/abi/nativeFungible.json
FUNGIBLE_EVM_STUBS=./pallets/fungible/src/stubs
-FUNGIBLE_EVM_ABI=./tests/src/eth/abi/fungible.json
+FUNGIBLE_EVM_ABI=./js-packages/tests/src/eth/abi/fungible.json
NONFUNGIBLE_EVM_STUBS=./pallets/nonfungible/src/stubs
-NONFUNGIBLE_EVM_ABI=./tests/src/eth/abi/nonFungible.json
+NONFUNGIBLE_EVM_ABI=./js-packages/tests/src/eth/abi/nonFungible.json
REFUNGIBLE_EVM_STUBS=./pallets/refungible/src/stubs
-REFUNGIBLE_EVM_ABI=./tests/src/eth/abi/reFungible.json
-REFUNGIBLE_TOKEN_EVM_ABI=./tests/src/eth/abi/reFungibleToken.json
+REFUNGIBLE_EVM_ABI=./js-packages/tests/src/eth/abi/reFungible.json
+REFUNGIBLE_TOKEN_EVM_ABI=./js-packages/tests/src/eth/abi/reFungibleToken.json
CONTRACT_HELPERS_STUBS=./pallets/evm-contract-helpers/src/stubs/
-CONTRACT_HELPERS_ABI=./tests/src/eth/abi/contractHelpers.json
+CONTRACT_HELPERS_ABI=./js-packages/tests/src/eth/abi/contractHelpers.json
COLLECTION_HELPER_STUBS=./pallets/unique/src/eth/stubs/
-COLLECTION_HELPER_ABI=./tests/src/eth/abi/collectionHelpers.json
+COLLECTION_HELPER_ABI=./js-packages/tests/src/eth/abi/collectionHelpers.json
-TESTS_API=./tests/src/eth/api/
+TESTS_API=./js-packages/tests/src/eth/api/
.PHONY: regenerate_solidity
regenerate_solidity: UniqueFungible.sol UniqueNFT.sol UniqueRefungible.sol UniqueRefungibleToken.sol ContractHelpers.sol CollectionHelpers.sol
js-packages/.gitignorediffbeforeafterboth--- a/js-packages/.gitignore
+++ b/js-packages/.gitignore
@@ -1,6 +1,8 @@
/node_modules/
+/*/dist/
+/*/tsconfig.tsbuildinfo
properties.csv
erc721.csv
erc20.csv
.yarn/cache
-.yarn/install-state.gz
+.yarn/install-state.gz
\ No newline at end of file
js-packages/package.jsondiffbeforeafterboth--- a/js-packages/package.json
+++ b/js-packages/package.json
@@ -3,24 +3,29 @@
"version": "1.0.0",
"description": "Unique Chain Tests",
"main": "",
+ "private": true,
+ "dependencies": {
+ "@openzeppelin/contracts": "^4.9.2",
+ "chai-as-promised": "^7.1.1",
+ "chai-like": "^1.1.1",
+ "csv-writer": "^1.6.0",
+ "lossless-json": "^3.0.1",
+ "solc": "^0.8.22",
+ "typechain": "^8.3.2",
+ "web3": "1.10.0"
+ },
"devDependencies": {
- "@polkadot/typegen": "10.10.1",
- "@types/chai": "^4.3.3",
- "@types/chai-as-promised": "^7.1.5",
- "@types/chai-like": "^1.1.1",
- "@types/chai-subset": "^1.3.3",
- "@types/mocha": "^10.0.0",
- "@types/node": "^20.4.2",
- "@typescript-eslint/eslint-plugin": "^6.0.0",
- "@typescript-eslint/parser": "^6.0.0",
- "chai": "^4.3.6",
+ "@types/chai": "^4.3.9",
+ "@types/chai-as-promised": "^7.1.7",
+ "@types/chai-like": "^1.1.2",
+ "@types/chai-subset": "^1.3.4",
+ "@types/mocha": "^10.0.3",
+ "@types/node": "^20.8.10",
+ "@unique/opal-types": "workspace:*",
+ "@unique/playgrounds": "workspace:*",
+ "chai": "^4.3.10",
"chai-subset": "^1.6.0",
- "eslint": "^8.45.0",
- "eslint-plugin-mocha": "^10.1.0",
- "mocha": "^10.1.0",
- "mochawesome": "^7.1.3",
- "ts-node": "^10.9.1",
- "typescript": "^5.1.6"
+ "typescript": "^5.2.2"
},
"mocha": {
"timeout": 9999999,
@@ -31,134 +36,23 @@
"scripts": {
"lint": "eslint --ext .ts,.js src/",
"fix": "yarn lint --fix",
- "setup": "ts-node --esm ./src/util/globalSetup.ts",
- "setIdentities": "ts-node --esm ./src/util/identitySetter.ts",
- "checkRelayIdentities": "ts-node --esm ./src/util/relayIdentitiesChecker.ts",
- "frankenstein": "ts-node --esm ./src/util/frankenstein.ts",
- "_test": "yarn setup && mocha --timeout 9999999 --loader=ts-node/esm.mjs",
- "_testParallel": "yarn setup && mocha --timeout 9999999 --parallel --loader=ts-node/esm.mjs",
- "test": "yarn _test './src/**/*.*test.ts'",
- "testParallelFull": "yarn testParallel && yarn testSequential",
- "testParallel": "yarn _testParallel './src/**/*.test.ts'",
- "testSequential": "yarn _test './src/**/*.seqtest.ts'",
- "testStructure": "yarn _test ./**/nesting/*.*test.ts",
- "testGovernance": "RUN_GOV_TESTS=1 yarn _test ./**/governance/*.*test.ts",
- "testEth": "yarn _test './**/eth/**/*.*test.ts'",
- "testEthNesting": "yarn _test './**/eth/nesting/**/*.*test.ts'",
- "testEthFractionalizer": "yarn _test './**/eth/fractionalizer/**/*.*test.ts'",
- "testEthMarketplace": "yarn _test './**/eth/marketplace/**/*.*test.ts'",
- "testEthMarket": "yarn _test './**/eth/marketplace-v2/**/*.*test.ts'",
- "testPerformance": "yarn _test ./**/performance.*test.ts",
- "testSub": "yarn _test './**/sub/**/*.*test.ts'",
- "testSubNesting": "yarn _test './**/sub/nesting/**/*.*test.ts'",
- "testEvent": "yarn _test ./src/check-event/*.*test.ts",
- "testEthPayable": "yarn _test './**/eth/payable.test.ts'",
- "testEvmCoder": "yarn _test './**/eth/evmCoder.test.ts'",
- "testNesting": "yarn _test ./**/nest.test.ts",
- "testUnnesting": "yarn _test ./**/unnest.test.ts",
- "testProperties": "yarn _test ./**/collectionProperties.*test.ts ./**/tokenProperties.*test.ts ./**/getPropertiesRpc.test.ts",
- "testCollectionProperties": "yarn _test ./**/collectionProperties.*test.ts",
- "testTokenProperties": "yarn _test ./**/tokenProperties.*test.ts",
- "testMigration": "yarn _test ./**/nesting/migration-check.test.ts",
- "testAddCollectionAdmin": "yarn _test ./**/addCollectionAdmin.test.ts",
- "testSetCollectionLimits": "yarn _test ./**/setCollectionLimits.test.ts",
- "testChangeCollectionOwner": "yarn _test ./**/change-collection-owner.test.ts",
- "testSetCollectionSponsor": "yarn _test ./**/setCollectionSponsor.test.ts",
- "testConfirmSponsorship": "yarn _test ./**/confirmSponsorship.test.ts",
- "testRemoveCollectionAdmin": "yarn _test ./**/removeCollectionAdmin.test.ts",
- "testRemoveCollectionSponsor": "yarn _test ./**/removeCollectionSponsor.test.ts",
- "testAllowLists": "yarn _test ./**/allowLists.test.ts",
- "testConnection": "yarn _test ./**/connection.test.ts",
- "testContracts": "yarn _test ./**/contracts.test.ts",
- "testCreateItem": "yarn _test ./**/createItem.test.ts",
- "testCreateMultipleItems": "yarn _test ./**/createMultipleItems.test.ts",
- "testCreateMultipleItemsEx": "yarn _test ./**/createMultipleItemsEx.test.ts",
- "testApprove": "yarn _test ./**/approve.test.ts",
- "testTransferFrom": "yarn _test ./**/transferFrom.test.ts",
- "testCreateCollection": "yarn _test ./**/createCollection.test.ts",
- "testDestroyCollection": "yarn _test ./**/destroyCollection.test.ts",
- "testToggleContractAllowList": "yarn _test ./**/toggleContractAllowList.test.ts",
- "testAddToContractAllowList": "yarn _test ./**/addToContractAllowList.test.ts",
- "testTransfer": "yarn _test ./**/transfer.test.ts",
- "testBurnItem": "yarn _test ./**/burnItem.test.ts",
- "testAdminTransferAndBurn": "yarn _test ./**/adminTransferAndBurn.test.ts",
- "testSetPermissions": "yarn _test ./**/setPermissions.test.ts",
- "testCreditFeesToTreasury": "yarn _test ./**/creditFeesToTreasury.seqtest.ts",
- "testContractSponsoring": "yarn _test ./**/eth/contractSponsoring.test.ts",
- "testEnableContractSponsoring": "yarn _test ./**/enableContractSponsoring.test.ts",
- "testRemoveFromContractAllowList": "yarn _test ./**/removeFromContractAllowList.test.ts",
- "testSetContractSponsoringRateLimit": "yarn _test ./**/setContractSponsoringRateLimit.test.ts",
- "testSetOffchainSchema": "yarn _test ./**/setOffchainSchema.test.ts",
- "testNextSponsoring": "yarn _test ./**/nextSponsoring.test.ts",
- "testOverflow": "yarn _test ./**/overflow.test.ts",
- "testMaintenance": "yarn _test ./**/maintenance.seqtest.ts",
- "testInflation": "yarn _test ./**/inflation.seqtest.ts",
- "testScheduler": "yarn _test ./**/scheduler.seqtest.ts",
- "testSchedulingEVM": "yarn _test ./**/eth/scheduling.test.ts",
- "testPalletPresence": "yarn _test ./**/pallet-presence.test.ts",
- "testEnableDisableTransfers": "yarn _test ./**/enableDisableTransfer.test.ts",
- "testLimits": "yarn _test ./**/limits.test.ts",
- "testEthCreateNFTCollection": "yarn _test ./**/eth/createNFTCollection.test.ts",
- "testEthCreateRFTCollection": "yarn _test ./**/eth/createRFTCollection.test.ts",
- "testEthNFT": "yarn _test ./**/eth/nonFungible.test.ts",
- "testRFT": "yarn _test ./**/refungible.test.ts",
- "testEthRFT": "yarn _test ./**/eth/reFungible.test.ts ./**/eth/reFungibleToken.test.ts",
- "testFT": "yarn _test ./**/fungible.test.ts",
- "testEthFT": "yarn _test ./**/eth/fungible.test.ts",
- "testRPC": "yarn _test ./**/rpc.test.ts",
- "testPromotion": "yarn _test ./**/appPromotion/*test.ts",
- "testApiConsts": "yarn _test ./**/apiConsts.test.ts",
- "testCouncil": "yarn _test ./**/council.*test.ts",
- "testDemocracy": "yarn _test ./**/democracy.*test.ts",
- "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts --timeout 49999999",
- "testCollatorSelection": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collatorSelection.*test.ts --timeout 49999999",
- "testIdentity": "RUN_COLLATOR_TESTS=1 yarn _test ./**/identity.*test.ts --timeout 49999999",
- "testLowLevelXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/lowLevelXcmUnique.test.ts",
- "testXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmUnique.test.ts",
- "testFullXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/*Unique.test.ts",
- "testXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmQuartz.test.ts",
- "testLowLevelXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/lowLevelXcmQuartz.test.ts",
- "testFullXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/*Quartz.test.ts",
- "testXcmOpal": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmOpal.test.ts",
- "testXcmTransferAcala": "yarn _test ./**/xcm/xcmTransferAcala.test.ts acalaId=2000 uniqueId=5000",
- "testXcmTransferStatemine": "yarn _test ./**/xcm/xcmTransferStatemine.test.ts statemineId=1000 uniqueId=5000",
- "testXcmTransferMoonbeam": "yarn _test ./**/xcm/xcmTransferMoonbeam.test.ts",
- "benchMintingFee": "ts-node src/benchmarks/mintFee/benchmark.ts",
- "load": "yarn _test './**/*.load.ts'",
- "loadTransfer": "ts-node src/transfer.nload.ts",
- "polkadot-types-fetch-metadata": "yarn ts-node --esm src/fetchMetadata.ts",
- "polkadot-types-from-defs": "ts-node --esm ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .",
- "polkadot-types-from-chain": "ts-node --esm ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .",
- "polkadot-types": "echo \"export default {}\" > src/interfaces/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain",
- "generateEnv": "ts-node --esm ./src/generateEnv.ts",
- "propose-upgrade": "ts-node --esm ./src/proposeupgrade.ts",
- "propose-fast-track": "ts-node --esm ./src/proposefasttrack.ts"
+ "polkadot-types-fetch-metadata": "yarn ts-node --esm scripts/src/fetchMetadata.ts",
+ "polkadot-types-from-defs": "ts-node --esm ./node_modules/.bin/polkadot-types-from-defs --endpoint types/src/metadata.json --input types/src/ --package .",
+ "polkadot-types-from-chain": "ts-node --esm ./node_modules/.bin/polkadot-types-from-chain --endpoint types/src/metadata.json --output types/src/ --package .",
+ "polkadot-types": "echo \"export default {}\" > types/src/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain"
},
"author": "",
"license": "SEE LICENSE IN ../LICENSE",
"homepage": "",
- "dependencies": {
- "@openzeppelin/contracts": "^4.9.2",
- "@polkadot/api": "10.10.1",
- "@polkadot/rpc-core": "^10.10.1",
- "@polkadot/util": "12.5.1",
- "@polkadot/util-crypto": "12.5.1",
- "@polkadot/wasm-crypto-asmjs": "^7.2.2",
- "@polkadot/wasm-crypto-wasm": "^7.2.2",
- "@rmrk-team/evm-contracts": "^1.2.1",
- "@typechain/web3-v1": "^6.0.3",
- "chai-as-promised": "^7.1.1",
- "chai-like": "^1.1.1",
- "csv-writer": "^1.6.0",
- "find-process": "^1.4.7",
- "lossless-json": "^2.0.9",
- "solc": "0.8.20",
- "typechain": "^8.2.0",
- "web3": "1.10.0"
- },
"resolutions": {
"decode-uri-component": "^0.2.1"
},
"type": "module",
- "packageManager": "yarn@3.6.1"
+ "packageManager": "yarn@3.6.1",
+ "workspaces": [
+ "types",
+ "playgrounds",
+ "scripts",
+ "tests"
+ ]
}
js-packages/playgrounds/package.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/playgrounds/package.json
@@ -0,0 +1,20 @@
+{
+ "author": "",
+ "license": "SEE LICENSE IN ../../../LICENSE",
+ "description": "Interfaces for interacting with contracts and contract ABIs",
+ "engines": {
+ "node": ">=16"
+ },
+ "name": "@unique/playgrounds",
+ "type": "module",
+ "version": "1.0.0",
+ "main": "unique.js",
+ "dependencies": {
+ "@polkadot/api": "10.10.1",
+ "@polkadot/util": "^12.5.1",
+ "@polkadot/util-crypto": "^12.5.1",
+ "@unique/opal-types": "workspace:*",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.6.2"
+ }
+}
js-packages/playgrounds/src/index.tsdiffbeforeafterbothno changes
js-packages/playgrounds/src/types.tsdiffbeforeafterboth--- a/js-packages/playgrounds/src/types.ts
+++ b/js-packages/playgrounds/src/types.ts
@@ -1,7 +1,7 @@
// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
// SPDX-License-Identifier: Apache-2.0
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
export const NON_EXISTENT_COLLECTION_ID = 4_294_967_295;
js-packages/playgrounds/src/unique.dev.tsdiffbeforeafterboth--- a/js-packages/playgrounds/src/unique.dev.ts
+++ b/js-packages/playgrounds/src/unique.dev.ts
@@ -1,20 +1,25 @@
// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
// SPDX-License-Identifier: Apache-2.0
+import '@unique/opal-types/src/augment-api.js';
+import '@unique/opal-types/src/augment-types.js';
+import '@unique/opal-types/src/types-lookup.js';
+
import {stringToU8a} from '@polkadot/util';
import {blake2AsHex, encodeAddress, mnemonicGenerate} from '@polkadot/util-crypto';
-import {UniqueHelper, ChainHelperBase, ChainHelperBaseConstructor, HelperGroup, UniqueHelperConstructor} from './unique';
+import type {ChainHelperBaseConstructor, UniqueHelperConstructor} from './unique.js';
+import {UniqueHelper, ChainHelperBase, HelperGroup} from './unique.js';
import {ApiPromise, Keyring, WsProvider} from '@polkadot/api';
-import * as defs from '../../interfaces/definitions';
-import {IKeyringPair} from '@polkadot/types/types';
-import {EventRecord} from '@polkadot/types/interfaces';
-import {ICrossAccountId, ILogger, IPovInfo, ISchedulerOptions, ITransactionResult, TSigner} from './types';
-import {FrameSystemEventRecord, StagingXcmV2TraitsError, StagingXcmV3TraitsOutcome} from '@polkadot/types/lookup';
-import {SignerOptions, VoidFn} from '@polkadot/api/types';
-import {Pallets} from '..';
+import * as defs from '@unique/opal-types/src/definitions.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import type {EventRecord} from '@polkadot/types/interfaces';
+import type {ICrossAccountId, ILogger, IPovInfo, ISchedulerOptions, ITransactionResult, TSigner} from './types.js';
+import type {FrameSystemEventRecord, StagingXcmV2TraitsError, StagingXcmV3TraitsOutcome} from '@polkadot/types/lookup';
+import type {SignerOptions, VoidFn} from '@polkadot/api/types';
import {spawnSync} from 'child_process';
-import {AcalaHelper, AstarHelper, MoonbeamHelper, PolkadexHelper, RelayHelper, WestmintHelper, ForeignAssetsGroup, XcmGroup, XTokensGroup, TokensGroup} from './unique.xcm';
-import {CollectiveGroup, CollectiveMembershipGroup, DemocracyGroup, ICollectiveGroup, IFellowshipGroup, RankedCollectiveGroup, ReferendaGroup} from './unique.governance';
+import {AcalaHelper, AstarHelper, MoonbeamHelper, PolkadexHelper, RelayHelper, WestmintHelper, ForeignAssetsGroup, XcmGroup, XTokensGroup, TokensGroup} from './unique.xcm.js';
+import {CollectiveGroup, CollectiveMembershipGroup, DemocracyGroup, RankedCollectiveGroup, ReferendaGroup} from './unique.governance.js';
+import type {ICollectiveGroup, IFellowshipGroup} from './unique.governance.js';
export class SilentLogger {
log(_msg: any, _level: any): void { }
@@ -275,7 +280,7 @@
super(...args);
}
- async executeExtrinsic(
+ override async executeExtrinsic(
sender: IKeyringPair,
extrinsic: string,
params: any[],
@@ -307,7 +312,7 @@
}
return result;
}
- async executeExtrinsicUncheckedWeight(
+ override async executeExtrinsicUncheckedWeight(
sender: IKeyringPair,
extrinsic: string,
params: any[],
@@ -504,7 +509,7 @@
this.democracy = new DemocracyGroup(this);
}
- async connect(wsEndpoint: string, _listeners?: any): Promise<void> {
+ override async connect(wsEndpoint: string, _listeners?: any): Promise<void> {
if(!wsEndpoint) throw new Error('wsEndpoint was not set');
const wsProvider = new WsProvider(wsEndpoint);
this.api = new ApiPromise({
@@ -692,7 +697,7 @@
accounts.push(recipient);
if(balance !== 0n) {
const tx = this.helper.constructApiCall('api.tx.balances.transfer', [{Id: recipient.address}, balance * tokenNominal]);
- transactions.push(this.helper.signTransaction(donor, tx, {nonce, era: 0}, 'account generation'));
+ transactions.push(this.helper.signTransaction(donor, tx, {nonce}, 'account generation'));
nonce++;
}
}
@@ -806,6 +811,7 @@
const block1date = await findCreationDate(block1);
const block2date = await findCreationDate(block2);
if(block2date! - block1date! < 9000) return true;
+ return false;
};
async calculcateFee(payer: ICrossAccountId, promise: () => Promise<any>): Promise<bigint> {
@@ -1388,8 +1394,8 @@
this.helper = helper;
}
- async enable() {
- if(this.helper.fetchMissingPalletNames([Pallets.TestUtils]).length != 0) {
+ async enable(testUtilsPalletName: string) {
+ if(this.helper.fetchMissingPalletNames([testUtilsPalletName]).length != 0) {
return;
}
@@ -1502,7 +1508,7 @@
this.options = options.options;
}
- executeExtrinsic(sender: IKeyringPair, scheduledExtrinsic: string, scheduledParams: any[], expectSuccess?: boolean): Promise<ITransactionResult> {
+ override executeExtrinsic(sender: IKeyringPair, scheduledExtrinsic: string, scheduledParams: any[], expectSuccess?: boolean): Promise<ITransactionResult> {
const scheduledTx = this.constructApiCall(scheduledExtrinsic, scheduledParams);
const mandatorySchedArgs = [
js-packages/playgrounds/src/unique.governance.tsdiffbeforeafterboth--- a/js-packages/playgrounds/src/unique.governance.ts
+++ b/js-packages/playgrounds/src/unique.governance.ts
@@ -1,7 +1,7 @@
import {blake2AsHex} from '@polkadot/util-crypto';
-import {PalletDemocracyConviction} from '@polkadot/types/lookup';
-import {IPhasicEvent, TSigner} from './types';
-import {HelperGroup, UniqueHelper} from './unique';
+import type {PalletDemocracyConviction} from '@polkadot/types/lookup';
+import type {IPhasicEvent, TSigner} from './types.js';
+import {HelperGroup, UniqueHelper} from './unique.js';
export class CollectiveGroup extends HelperGroup<UniqueHelper> {
/**
js-packages/playgrounds/src/unique.tsdiffbeforeafterboth--- a/js-packages/playgrounds/src/unique.ts
+++ b/js-packages/playgrounds/src/unique.ts
@@ -6,15 +6,14 @@
/* eslint-disable no-prototype-builtins */
import {ApiPromise, WsProvider, Keyring} from '@polkadot/api';
-import {SignerOptions} from '@polkadot/api/types/submittable';
-import '../../interfaces/augment-api';
-import {AugmentedSubmittables} from '@polkadot/api-base/types/submittable';
-import {ApiInterfaceEvents} from '@polkadot/api/types';
-import {encodeAddress, decodeAddress, keccakAsHex, evmToAddress, addressToEvm, base58Encode, blake2AsU8a, blake2AsHex} from '@polkadot/util-crypto';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {SignerOptions} from '@polkadot/api/types';
+import type {AugmentedSubmittables} from '@polkadot/api-base/types/submittable';
+import type {ApiInterfaceEvents} from '@polkadot/api/types';
+import {encodeAddress, decodeAddress, keccakAsHex, evmToAddress, addressToEvm, base58Encode, blake2AsU8a} from '@polkadot/util-crypto';
+import type {IKeyringPair} from '@polkadot/types/types';
import {hexToU8a} from '@polkadot/util/hex';
import {u8aConcat} from '@polkadot/util/u8a';
-import {
+import type {
IApiListeners,
IBlock,
IEvent,
@@ -28,7 +27,6 @@
INestingPermissions,
IProperty,
IStakingInfo,
- ISchedulerOptions,
ISubstrateBalance,
IToken,
ITokenPropertyPermission,
@@ -40,18 +38,14 @@
TSubstrateAccount,
TNetworks,
IEthCrossAccountId,
-} from './types';
-import {RuntimeDispatchInfo} from '@polkadot/types/interfaces';
-import type {Vec} from '@polkadot/types-codec';
-import {FrameSystemEventRecord} from '@polkadot/types/lookup';
+} from './types.js';
+import type {RuntimeDispatchInfo} from '@polkadot/types/interfaces';
export class CrossAccountId {
- Substrate!: TSubstrateAccount;
- Ethereum!: TEthereumAccount;
+ account: ICrossAccountId;
constructor(account: ICrossAccountId) {
- if('Substrate' in account) this.Substrate = account.Substrate;
- else this.Ethereum = account.Ethereum;
+ this.account = account;
}
static fromKeyring(account: IKeyringPair, domain: 'Substrate' | 'Ethereum' = 'Substrate') {
@@ -66,16 +60,17 @@
else return new CrossAccountId({Ethereum: address.ethereum});
}
- static normalizeSubstrateAddress(address: TSubstrateAccount, ss58Format = 42): TSubstrateAccount {
- return encodeAddress(decodeAddress(address), ss58Format);
+ static normalizeSubstrateAddress(address: {Substrate: TSubstrateAccount}, ss58Format = 42): TSubstrateAccount {
+ return encodeAddress(decodeAddress(address.Substrate), ss58Format);
}
- static withNormalizedSubstrate(address: TSubstrateAccount, ss58Format = 42): CrossAccountId {
- return new CrossAccountId({Substrate: CrossAccountId.normalizeSubstrateAddress(address, ss58Format)});
+ static withNormalizedSubstrate(address: ICrossAccountId, ss58Format = 42): ICrossAccountId {
+ if('Substrate' in address) return {Substrate: CrossAccountId.normalizeSubstrateAddress(address, ss58Format)};
+ return address;
}
withNormalizedSubstrate(ss58Format = 42): CrossAccountId {
- if(this.Substrate) return CrossAccountId.withNormalizedSubstrate(this.Substrate, ss58Format);
+ if('Substrate' in this.account) this.account = CrossAccountId.withNormalizedSubstrate(this.account, ss58Format);
return this;
}
@@ -84,24 +79,43 @@
}
toEthereum(): CrossAccountId {
- if(this.Substrate) return new CrossAccountId({Ethereum: CrossAccountId.translateSubToEth(this.Substrate)});
+ this.account = CrossAccountId.toEthereum(this.account);
return this;
}
+ static toEthereum(account: ICrossAccountId): ICrossAccountId {
+ if('Substrate' in account) return {Ethereum: CrossAccountId.translateSubToEth(account.Substrate)};
+ return account;
+ }
+
static translateEthToSub(address: TEthereumAccount, ss58Format?: number): TSubstrateAccount {
return evmToAddress(address, ss58Format);
}
toSubstrate(ss58Format?: number): CrossAccountId {
- if(this.Ethereum) return new CrossAccountId({Substrate: CrossAccountId.translateEthToSub(this.Ethereum, ss58Format)});
+ this.account = CrossAccountId.toSubstrate(this.account, ss58Format);
return this;
}
+ static toSubstrate(account: ICrossAccountId, ss58Format?: number): ICrossAccountId {
+ if('Ethereum' in account) return {Substrate: CrossAccountId.translateEthToSub(account.Ethereum, ss58Format)};
+ return account;
+ }
+
toLowerCase(): CrossAccountId {
- if(this.Substrate) this.Substrate = this.Substrate.toLowerCase();
- if(this.Ethereum) this.Ethereum = this.Ethereum.toLowerCase();
+ this.account = CrossAccountId.toLowerCase(this.account);
return this;
}
+
+ static toLowerCase(account: ICrossAccountId) {
+ if('Substrate' in account) return {Substrate: account.Substrate.toLowerCase()};
+ if('Ethereum' in account) return {Ethereum: account.Ethereum.toLowerCase()};
+ return account;
+ }
+
+ toICrossAccountId(): ICrossAccountId {
+ return this.account;
+ }
}
const nesting = {
@@ -141,8 +155,8 @@
RPC: 'rpc',
};
- static getTokenAccount(token: IToken): CrossAccountId {
- return new CrossAccountId({Ethereum: this.getTokenAddress(token)});
+ static getTokenAccount(token: IToken): ICrossAccountId {
+ return {Ethereum: this.getTokenAddress(token)};
}
static getTokenAddress(token: IToken): string {
@@ -228,7 +242,7 @@
}
let success = false;
const tokens = [] as { collectionId: number, tokenId: number, owner: CrossAccountId, amount: bigint }[];
- burnResult.result.events.forEach(({event: {data, method, section}}) => {
+ burnResult.result.events.forEach(({event: {data, method, section}}: any) => {
if(method === 'ExtrinsicSuccess') {
success = true;
} else if((section === 'common') && (method === 'ItemDestroyed')) {
@@ -260,24 +274,19 @@
static isTokenTransferSuccess(events: { event: IEvent }[], collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount = 1n) {
const normalizeAddress = (address: string | ICrossAccountId) => {
if(typeof address === 'string') return address;
- const obj = {} as any;
- Object.keys(address).forEach(k => {
- obj[k.toLocaleLowerCase()] = (address as any)[k];
- });
- if(obj.substrate) return CrossAccountId.withNormalizedSubstrate(obj.substrate);
- if(obj.ethereum) return CrossAccountId.fromLowerCaseKeys(obj).toLowerCase();
+ if('Substrate' in address) return CrossAccountId.withNormalizedSubstrate(address);
+ if('Ethereum' in address) return CrossAccountId.toLowerCase(address);
return address;
};
let transfer = {collectionId: null, tokenId: null, from: null, to: null, amount: 1} as any;
events.forEach(({event: {data, method, section}}) => {
if((section === 'common') && (method === 'Transfer')) {
- const hData = (data as any).toJSON();
transfer = {
- collectionId: hData[0],
- tokenId: hData[1],
- from: normalizeAddress(hData[2]),
- to: normalizeAddress(hData[3]),
- amount: BigInt(hData[4]),
+ collectionId: data[0].toJSON(),
+ tokenId: data[1].toJSON(),
+ from: normalizeAddress(data[2].toHuman()),
+ to: normalizeAddress(data[3].toHuman()),
+ amount: BigInt(data[4].toJSON()),
};
}
});
@@ -303,12 +312,12 @@
}
class UniqueEventHelper {
- private static extractIndex(index: any): [number, number] | string {
+ static extractIndex(index: any): [number, number] | string {
if(index.toRawType() === '[u8;2]') return [index[0], index[1]];
return index.toJSON();
}
- private static extractSub(data: any, subTypes: any): { [key: string]: any } {
+ static extractSub(data: any, subTypes: any): { [key: string]: any } {
let obj: any = {};
let index = 0;
@@ -322,11 +331,11 @@
return obj;
}
- private static toHuman(data: any) {
+ static toHuman(data: any) {
return data && data.toHuman ? data.toHuman() : `${data}`;
}
- private static extractData(data: any, type: any): any {
+ static extractData(data: any, type: any): any {
if(!type) return this.toHuman(data);
if(['u16', 'u32'].indexOf(type.type) > -1) return data.toNumber();
if(['u64', 'u128', 'u256'].indexOf(type.type) > -1) return data.toBigInt();
@@ -361,7 +370,7 @@
}
const InvalidTypeSymbol = Symbol('Invalid type');
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-export type Invalid<ErrorMessage> =
+export type Invalid =
| ((
invalidType: typeof InvalidTypeSymbol,
..._: typeof InvalidTypeSymbol[]
@@ -371,7 +380,7 @@
// Has slightly better error messages than Get
type Get2<T, P extends string, E> =
P extends `${infer Key}.${infer Key2}` ? Key extends keyof T ? Key2 extends keyof T[Key] ? T[Key][Key2] : E : E : E;
-type ForceFunction<T> = T extends (...args: any) => any ? T : (...args: any) => Invalid<'not a function'>;
+type ForceFunction<T> = T extends (...args: any) => any ? T : (...args: any) => Invalid;
export class ChainHelperBase {
helperBase: any;
@@ -432,7 +441,7 @@
async subscribeEvents(expectedEvents: { section: string, names: string[] }[]) {
const collectedEvents: IEvent[] = [];
- const unsubscribe = await this.getApi().query.system.events((events: Vec<FrameSystemEventRecord>) => {
+ const unsubscribe = await this.getApi().query.system.events((events: any) => {
const ievents = this.eventHelper.extractEvents(events);
ievents.forEach((event) => {
expectedEvents.forEach((e => {
@@ -523,7 +532,7 @@
westmint: {},
};
if(!supportedRPC.hasOwnProperty(network)) network = await this.detectNetworkByWsEndpoint(wsEndpoint);
- const rpc = supportedRPC[network];
+ const rpc = supportedRPC[network] as any;
// TODO: investigate how to replace rpc in runtime
// api._rpcCore.addUserInterfaces(rpc);
@@ -669,7 +678,7 @@
...args: any) => any = ForceFunction<
Get2<
AugmentedSubmittables<'promise'>,
- E, (...args: any) => Invalid<'not found'>
+ E, (...args: any) => Invalid
>
>
>(
@@ -735,15 +744,15 @@
...args: any) => any = ForceFunction<
Get2<
AugmentedSubmittables<'promise'>,
- E, (...args: any) => Invalid<'not found'>
+ E, (...args: any) => Invalid
>
>
>(
- sender: TSigner,
- extrinsic: `api.tx.${E}`,
- params: Parameters<V>,
- expectSuccess = true,
- options: Partial<SignerOptions> | null = null,/*, failureMessage='expected success'*/
+ _sender: TSigner,
+ _extrinsic: `api.tx.${E}`,
+ _params: Parameters<V>,
+ _expectSuccess = true,
+ _options: Partial<SignerOptions> | null = null,/*, failureMessage='expected success'*/
): Promise<ITransactionResult> {
throw new Error('executeExtrinsicUncheckedWeight only supported in sudo');
}
@@ -892,11 +901,11 @@
* @example await getAdmins(1)
* @returns array of administrators
*/
- async getAdmins(collectionId: number, normalize = false): Promise<CrossAccountId[]> {
- const admins = (await this.helper.callRpc('api.rpc.unique.adminlist', [collectionId])).toHuman();
+ async getAdmins(collectionId: number, normalize = false): Promise<ICrossAccountId[]> {
+ const admins = (await this.helper.callRpc('api.rpc.unique.adminlist', [collectionId])).toHuman() as ICrossAccountId[];
return normalize
- ? admins.map((address: CrossAccountId) => address.withNormalizedSubstrate())
+ ? admins.map(address => CrossAccountId.withNormalizedSubstrate(address))
: admins;
}
@@ -907,10 +916,10 @@
* @example await getAllowList(1)
* @returns array of allow-listed addresses
*/
- async getAllowList(collectionId: number, normalize = false): Promise<CrossAccountId[]> {
- const allowListed = (await this.helper.callRpc('api.rpc.unique.allowlist', [collectionId])).toHuman();
+ async getAllowList(collectionId: number, normalize = false): Promise<ICrossAccountId[]> {
+ const allowListed = (await this.helper.callRpc('api.rpc.unique.allowlist', [collectionId])).toHuman() as ICrossAccountId[];
return normalize
- ? allowListed.map((address: CrossAccountId) => address.withNormalizedSubstrate())
+ ? allowListed.map(address => CrossAccountId.withNormalizedSubstrate(address))
: allowListed;
}
@@ -1372,7 +1381,7 @@
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
async approveTokenFromEth(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount = 1n) {
- const ethMirror = CrossAccountId.fromKeyring(signer).toEthereum();
+ const ethMirror = CrossAccountId.fromKeyring(signer).toEthereum().toICrossAccountId();
return await this.approveTokenFrom(signer, collectionId, tokenId, ethMirror, toAddressObj, amount);
}
@@ -1439,12 +1448,12 @@
*/
async getToken(collectionId: number, tokenId: number, propertyKeys: string[] = [], blockHashAt?: string): Promise<{
properties: IProperty[];
- owner: CrossAccountId;
- normalizedOwner: CrossAccountId;
+ owner: ICrossAccountId;
+ normalizedOwner: ICrossAccountId;
} | null> {
- let tokenData;
+ let args;
if(typeof blockHashAt === 'undefined') {
- tokenData = await this.helper.callRpc('api.rpc.unique.tokenData', [collectionId, tokenId]);
+ args = [collectionId, tokenId];
}
else {
if(propertyKeys.length == 0) {
@@ -1452,17 +1461,11 @@
if(!collection) return null;
propertyKeys = collection.tokenPropertyPermissions.map((x: ITokenPropertyPermission) => x.key);
}
- tokenData = await this.helper.callRpc('api.rpc.unique.tokenData', [collectionId, tokenId, propertyKeys, blockHashAt]);
+ args = [collectionId, tokenId, propertyKeys, blockHashAt];
}
- tokenData = tokenData.toHuman();
+ const tokenData = (await this.helper.callRpc('api.rpc.unique.tokenData', args)).toHuman();
if(tokenData === null || tokenData.owner === null) return null;
- const owner = {} as any;
- for(const key of Object.keys(tokenData.owner)) {
- owner[key.toLocaleLowerCase()] = key.toLocaleLowerCase() == 'substrate'
- ? CrossAccountId.normalizeSubstrateAddress(tokenData.owner[key])
- : tokenData.owner[key];
- }
- tokenData.normalizedOwner = CrossAccountId.fromLowerCaseKeys(owner);
+ tokenData.normalizedOwner = CrossAccountId.withNormalizedSubstrate(tokenData.owner);
return tokenData;
}
@@ -1474,14 +1477,14 @@
* @example getTokenOwner(10, 5);
* @returns Address in CrossAccountId format, e.g. {Substrate: "5DnSF6RRjwteE3BrCj..."}
*/
- async getTokenOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<CrossAccountId> {
+ async getTokenOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<ICrossAccountId> {
let owner;
if(typeof blockHashAt === 'undefined') {
owner = await this.helper.callRpc('api.rpc.unique.tokenOwner', [collectionId, tokenId]);
} else {
owner = await this.helper.callRpc('api.rpc.unique.tokenOwner', [collectionId, tokenId, blockHashAt]);
}
- return CrossAccountId.fromLowerCaseKeys(owner.toJSON());
+ return CrossAccountId.fromLowerCaseKeys(owner.toJSON()).toICrossAccountId();
}
/**
@@ -1492,7 +1495,7 @@
* @example getTokenTopmostOwner(10, 5);
* @returns address in CrossAccountId format, e.g. {Substrate: "5DyN4Y92vZCjv38fg..."}
*/
- async getTokenTopmostOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<CrossAccountId | null> {
+ async getTokenTopmostOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<ICrossAccountId | null> {
let owner;
if(typeof blockHashAt === 'undefined') {
owner = await this.helper.callRpc('api.rpc.unique.topmostTokenOwner', [collectionId, tokenId]);
@@ -1702,7 +1705,7 @@
* @example getCollectionObject(2);
* @returns instance of UniqueNFTCollection
*/
- getCollectionObject(collectionId: number): UniqueNFTCollection {
+ override getCollectionObject(collectionId: number): UniqueNFTCollection {
return new UniqueNFTCollection(collectionId, this.helper);
}
@@ -1713,7 +1716,7 @@
* @example getTokenObject(10, 5);
* @returns instance of UniqueNFTToken
*/
- getTokenObject(collectionId: number, tokenId: number): UniqueNFToken {
+ override getTokenObject(collectionId: number, tokenId: number): UniqueNFToken {
return new UniqueNFToken(tokenId, this.getCollectionObject(collectionId));
}
@@ -1725,7 +1728,7 @@
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
async isTokenApproved(collectionId: number, tokenId: number, toAccountObj: ICrossAccountId): Promise<boolean> {
- return (await this.getTokenApprovedPieces(collectionId, tokenId, toAccountObj, await this.getTokenOwner(collectionId, tokenId))) === 1n;
+ return (await this.getTokenApprovedPieces(collectionId, tokenId, toAccountObj, (await this.getTokenOwner(collectionId, tokenId)))) === 1n;
}
/**
@@ -1738,7 +1741,7 @@
* @example transferToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId): Promise<boolean> {
+ override async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId): Promise<boolean> {
return await super.transferToken(signer, collectionId, tokenId, addressObj, 1n);
}
@@ -1754,7 +1757,7 @@
* @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, {Ethereum: "0x9F0583DbB85..."})
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId): Promise<boolean> {
+ override async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId): Promise<boolean> {
return await super.transferTokenFrom(signer, collectionId, tokenId, fromAddressObj, toAddressObj, 1n);
}
@@ -1789,7 +1792,7 @@
* })
* @returns object of the created collection
*/
- async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueNFTCollection> {
+ override async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueNFTCollection> {
return await super.mintCollection(signer, collectionOptions, 'NFT') as UniqueNFTCollection;
}
@@ -1883,7 +1886,7 @@
* @example approveToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount = 1n) {
+ override approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount = 1n) {
return super.approveToken(signer, collectionId, tokenId, toAddressObj, amount);
}
}
@@ -1896,7 +1899,7 @@
* @example getCollectionObject(2);
* @returns instance of UniqueRFTCollection
*/
- getCollectionObject(collectionId: number): UniqueRFTCollection {
+ override getCollectionObject(collectionId: number): UniqueRFTCollection {
return new UniqueRFTCollection(collectionId, this.helper);
}
@@ -1907,7 +1910,7 @@
* @example getTokenObject(10, 5);
* @returns instance of UniqueNFTToken
*/
- getTokenObject(collectionId: number, tokenId: number): UniqueRFToken {
+ override getTokenObject(collectionId: number, tokenId: number): UniqueRFToken {
return new UniqueRFToken(tokenId, this.getCollectionObject(collectionId));
}
@@ -1918,8 +1921,8 @@
* @example getTokenTop10Owners(10, 5);
* @returns array of top 10 owners
*/
- async getTokenTop10Owners(collectionId: number, tokenId: number): Promise<CrossAccountId[]> {
- return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, tokenId])).toJSON().map(CrossAccountId.fromLowerCaseKeys);
+ async getTokenTop10Owners(collectionId: number, tokenId: number): Promise<ICrossAccountId[]> {
+ return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, tokenId])).toJSON().map(CrossAccountId.fromLowerCaseKeys).map(a => a.toICrossAccountId());
}
/**
@@ -1944,7 +1947,7 @@
* @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, 2000n)
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
+ override async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
return await super.transferToken(signer, collectionId, tokenId, addressObj, amount);
}
@@ -1959,7 +1962,7 @@
* @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, {Substrate: "5DfhbVfww7ThF8q6f3i..."}, 2000n)
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
+ override async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
return await super.transferTokenFrom(signer, collectionId, tokenId, fromAddressObj, toAddressObj, amount);
}
@@ -1975,7 +1978,7 @@
* })
* @returns object of the created collection
*/
- async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueRFTCollection> {
+ override async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueRFTCollection> {
return await super.mintCollection(signer, collectionOptions, 'RFT') as UniqueRFTCollection;
}
@@ -2003,15 +2006,15 @@
return this.getTokenObject(data.collectionId, createdTokens.tokens[0].tokenId);
}
- async mintMultipleTokens(signer: TSigner, collectionId: number, tokens: { owner: ICrossAccountId, pieces: bigint, properties?: IProperty[] }[]): Promise<UniqueRFToken[]> {
+ mintMultipleTokens(_signer: TSigner, _collectionId: number, _tokens: { owner: ICrossAccountId, pieces: bigint, properties?: IProperty[] }[]): Promise<UniqueRFToken[]> {
throw Error('Not implemented');
- const creationResult = await this.helper.executeExtrinsic(
- signer,
- 'api.tx.unique.createMultipleItemsEx', [collectionId, {RefungibleMultipleOwners: tokens}],
- true, // `Unable to mint RFT tokens for ${label}`,
- );
- const collection = this.getCollectionObject(collectionId);
- return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));
+ // const creationResult = await this.helper.executeExtrinsic(
+ // signer,
+ // 'api.tx.unique.createMultipleItemsEx', [collectionId, {RefungibleMultipleOwners: tokens}],
+ // true, // `Unable to mint RFT tokens for ${label}`,
+ // );
+ // const collection = this.getCollectionObject(collectionId);
+ // return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));
}
/**
@@ -2047,7 +2050,7 @@
* @example burnToken(aliceKeyring, 10, 5);
* @returns ```true``` if the extrinsic is successful, otherwise ```false```
*/
- async burnToken(signer: IKeyringPair, collectionId: number, tokenId: number, amount = 1n): Promise<boolean> {
+ override async burnToken(signer: IKeyringPair, collectionId: number, tokenId: number, amount = 1n): Promise<boolean> {
return await super.burnToken(signer, collectionId, tokenId, amount);
}
@@ -2061,7 +2064,7 @@
* @example burnTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, 2n)
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async burnTokenFrom(signer: IKeyringPair, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
+ override async burnTokenFrom(signer: IKeyringPair, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, amount = 1n): Promise<boolean> {
return await super.burnTokenFrom(signer, collectionId, tokenId, fromAddressObj, amount);
}
@@ -2076,7 +2079,7 @@
* @example approveToken(aliceKeyring, 10, 5, {Substrate: "5GHoZe9c73RYbVzq..."}, "", 10000n);
* @returns true if the token success, otherwise false
*/
- approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount = 1n) {
+ override approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount = 1n) {
return super.approveToken(signer, collectionId, tokenId, toAddressObj, amount);
}
@@ -2202,8 +2205,8 @@
* @example getTop10Owners(10);
* @returns array of ```ICrossAccountId```
*/
- async getTop10Owners(collectionId: number): Promise<CrossAccountId[]> {
- return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, 0])).toJSON().map(CrossAccountId.fromLowerCaseKeys);
+ async getTop10Owners(collectionId: number): Promise<ICrossAccountId[]> {
+ return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, 0])).toJSON().map(CrossAccountId.fromLowerCaseKeys).map(a => a.toICrossAccountId());
}
/**
@@ -2391,7 +2394,7 @@
const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true/*, `Unable to transfer balance from ${this.helper.getSignerAddress(signer)} to ${address}`*/);
let transfer = {from: null, to: null, amount: 0n} as any;
- result.result.events.forEach(({event: {data, method, section}}) => {
+ result.result.events.forEach(({event: {data, method, section}}: any) => {
if((section === 'balances') && (method === 'Transfer')) {
transfer = {
from: this.helper.address.normalizeSubstrate(data[0]),
@@ -2458,7 +2461,7 @@
const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true);
let transfer = {from: null, to: null, amount: 0n} as any;
- result.result.events.forEach(({event: {data, method, section}}) => {
+ result.result.events.forEach(({event: {data, method, section}}: any) => {
if((section === 'balances') && (method === 'Transfer')) {
transfer = {
from: data[0].toString(),
@@ -2573,7 +2576,7 @@
const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.forceTransfer', [from, to, amount], true);
let transfer = {from: null, to: null, amount: 0n} as any;
- result.result.events.forEach(({event: {data, method, section}}) => {
+ result.result.events.forEach(({event: {data, method, section}}: any) => {
if((section === 'balances') && (method === 'Transfer')) {
transfer = {
from: this.helper.address.normalizeSubstrate(data[0]),
@@ -2598,7 +2601,7 @@
async vestedTransfer(signer: TSigner, address: TSubstrateAccount, schedule: { start: bigint, period: bigint, periodCount: bigint, perPeriod: bigint }): Promise<void> {
const result = await this.helper.executeExtrinsic(signer, 'api.tx.vesting.vestedTransfer', [address, schedule]);
const event = result.result.events
- .find(e => e.event.section === 'vesting' &&
+ .find((e: any) => e.event.section === 'vesting' &&
e.event.method === 'VestingScheduleAdded' &&
e.event.data[0].toHuman() === signer.address);
if(!event) throw Error('Cannot find transfer in events');
@@ -2626,7 +2629,7 @@
async claim(signer: TSigner) {
const result = await this.helper.executeExtrinsic(signer, 'api.tx.vesting.claim', []);
const event = result.result.events
- .find(e => e.event.section === 'vesting' &&
+ .find((e: any) => e.event.section === 'vesting' &&
e.event.method === 'Claimed' &&
e.event.data[0].toHuman() === signer.address);
if(!event) throw Error('Cannot find claim in events');
@@ -2642,7 +2645,7 @@
* @returns substrate address converted to normalized (i.e., starting with 5) or specified explicitly representation
*/
normalizeSubstrate(address: TSubstrateAccount, ss58Format = 42): TSubstrateAccount {
- return CrossAccountId.normalizeSubstrateAddress(address, ss58Format);
+ return CrossAccountId.normalizeSubstrateAddress({Substrate: address}, ss58Format);
}
/**
@@ -2766,7 +2769,7 @@
*/
async stake(signer: TSigner, amountToStake: bigint, label?: string): Promise<boolean> {
if(typeof label === 'undefined') label = `${signer.address} amount: ${amountToStake}`;
- const _stakeResult = await this.helper.executeExtrinsic(
+ await this.helper.executeExtrinsic(
signer, 'api.tx.appPromotion.stake',
[amountToStake], true,
);
@@ -2895,7 +2898,7 @@
const promise = this.helper.executeExtrinsic(signer, 'api.tx.preimage.notePreimage', [bytes]);
if(returnPreimageHash) {
const result = await promise;
- const events = result.result.events.filter(x => x.event.method === 'Noted' && x.event.section === 'preimage');
+ const events = result.result.events.filter((x: any) => x.event.method === 'Noted' && x.event.section === 'preimage');
const preimageHash = events[0].event.data[0].toHuman();
return preimageHash;
}
@@ -3363,13 +3366,13 @@
return await this.collection.doesTokenExist(this.tokenId);
}
- nestingAccount() {
+ nestingAccount(): ICrossAccountId {
return this.collection.helper.util.getTokenAccount(this);
}
}
export class UniqueNFToken extends UniqueBaseToken {
- collection: UniqueNFTCollection;
+ declare collection: UniqueNFTCollection;
constructor(tokenId: number, collection: UniqueNFTCollection) {
super(tokenId, collection);
@@ -3426,7 +3429,7 @@
}
export class UniqueRFToken extends UniqueBaseToken {
- collection: UniqueRFTCollection;
+ declare collection: UniqueRFTCollection;
constructor(tokenId: number, collection: UniqueRFTCollection) {
super(tokenId, collection);
js-packages/playgrounds/src/unique.xcm.tsdiffbeforeafterboth--- a/js-packages/playgrounds/src/unique.xcm.ts
+++ b/js-packages/playgrounds/src/unique.xcm.ts
@@ -1,12 +1,12 @@
import {ApiPromise, WsProvider} from '@polkadot/api';
-import {IKeyringPair} from '@polkadot/types/types';
-import {ChainHelperBase, EthereumBalanceGroup, HelperGroup, SubstrateBalanceGroup, UniqueHelper} from './unique';
-import {ILogger, TSigner, TSubstrateAccount} from './types';
-import {AcalaAssetMetadata, DemocracyStandardAccountVote, IForeignAssetMetadata, MoonbeamAssetInfo} from './types.xcm';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {ChainHelperBase, EthereumBalanceGroup, HelperGroup, SubstrateBalanceGroup, UniqueHelper} from './unique.js';
+import type {ILogger, TSigner, TSubstrateAccount} from './types.js';
+import type {AcalaAssetMetadata, DemocracyStandardAccountVote, IForeignAssetMetadata, MoonbeamAssetInfo} from './types.xcm.js';
export class XcmChainHelper extends ChainHelperBase {
- async connect(wsEndpoint: string, _listeners?: any): Promise<void> {
+ override async connect(wsEndpoint: string, _listeners?: any): Promise<void> {
const wsProvider = new WsProvider(wsEndpoint);
this.api = new ApiPromise({
provider: wsProvider,
js-packages/playgrounds/tsconfig.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/playgrounds/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../tsconfig.packages.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "dist"
+ },
+ "references": [
+ { "path": "../types/tsconfig.json" },
+ ]
+}
\ No newline at end of file
js-packages/scripts/package.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/scripts/package.json
@@ -0,0 +1,23 @@
+{
+ "author": "",
+ "license": "SEE LICENSE IN ../../../LICENSE",
+ "description": "Interfaces for interacting with contracts and contract ABIs",
+ "engines": {
+ "node": ">=16"
+ },
+ "name": "@unique/scripts",
+ "type": "module",
+ "version": "1.0.0",
+ "main": "",
+ "dependencies": {
+ "rxjs": "^7.8.1",
+ "tslib": "^2.6.2"
+ },
+ "scripts": {
+ "benchMintingFee": "ts-node src/benchmarks/mintFee/benchmark.ts",
+ "loadTransfer": "ts-node src/transfer.nload.ts",
+ "generateEnv": "ts-node --esm ./src/generateEnv.ts",
+ "propose-upgrade": "ts-node --esm ./src/proposeupgrade.ts",
+ "propose-fast-track": "ts-node --esm ./src/proposefasttrack.ts"
+ }
+}
js-packages/scripts/src/benchmarks/mintFee/index.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/mintFee/index.ts
+++ b/js-packages/scripts/src/benchmarks/mintFee/index.ts
@@ -1,15 +1,14 @@
-import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';
+import {usingEthPlaygrounds} from '@unique/tests/src/eth/util/index.js';
+import {EthUniqueHelper} from '@unique/tests/src/eth/util/playgrounds/unique.dev.js';
import {readFile} from 'fs/promises';
-import {
- ICrossAccountId,
-} from '../../util/playgrounds/types';
-import {IKeyringPair} from '@polkadot/types/types';
-import {UniqueNFTCollection} from '../../util/playgrounds/unique';
+import type {ICrossAccountId} from '@unique/playgrounds/src/types.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {UniqueNFTCollection} from '@unique/playgrounds/src/unique.js';
import {Contract} from 'web3-eth-contract';
import {createObjectCsvWriter} from 'csv-writer';
-import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common';
-import {makeNames} from '../../util';
-import {ContractImports} from '../../eth/util/playgrounds/types';
+import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common.js';
+import {makeNames} from '@unique/tests/src/util/index.js';
+import type {ContractImports} from '@unique/tests/src/eth/util/playgrounds/types.js';
const {dirname} = makeNames(import.meta.url);
js-packages/scripts/src/benchmarks/nesting/ABIGEN/RMRKNestableMintable.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/nesting/ABIGEN/RMRKNestableMintable.ts
+++ b/js-packages/scripts/src/benchmarks/nesting/ABIGEN/RMRKNestableMintable.ts
@@ -8,12 +8,11 @@
import type { EventEmitter } from "events";
import type {
Callback,
- PayableTransactionObject,
NonPayableTransactionObject,
BlockType,
ContractEventLog,
BaseContract,
-} from "./types";
+} from "./types.js";
export interface EventOptions {
filter?: object;
js-packages/scripts/src/benchmarks/nesting/ABIGEN/index.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/nesting/ABIGEN/index.ts
+++ b/js-packages/scripts/src/benchmarks/nesting/ABIGEN/index.ts
@@ -1,4 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
-export type { RMRKNestableMintable } from "./RMRKNestableMintable";
+export type { RMRKNestableMintable } from "./RMRKNestableMintable.js";
js-packages/scripts/src/benchmarks/nesting/ABIGEN/types.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/nesting/ABIGEN/types.ts
+++ b/js-packages/scripts/src/benchmarks/nesting/ABIGEN/types.ts
@@ -3,7 +3,7 @@
/* eslint-disable */
import type BN from "bn.js";
import type { EventEmitter } from "events";
-import type { EventLog, PromiEvent, TransactionReceipt } from "web3-core/types";
+import type { EventLog, PromiEvent, TransactionReceipt } from "web3-core";
import type { Contract } from "web3-eth-contract";
export interface EstimateGasOptions {
js-packages/scripts/src/benchmarks/nesting/index.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/nesting/index.ts
+++ b/js-packages/scripts/src/benchmarks/nesting/index.ts
@@ -1,57 +1,58 @@
-import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';
+import {usingEthPlaygrounds} from '@unique/tests/src/eth/util/index.js';
+import {EthUniqueHelper} from '@unique/tests/src/eth/util/playgrounds/unique.dev.js';
import {readFile} from 'fs/promises';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Contract} from 'web3-eth-contract';
-import {convertToTokens} from '../utils/common';
-import {makeNames} from '../../util';
-import {ContractImports} from '../../eth/util/playgrounds/types';
-import {RMRKNestableMintable} from './ABIGEN';
+import {convertToTokens} from '../utils/common.js';
+import {makeNames} from '@unique/tests/src/util/index.js';
+import type {ContractImports} from '@unique/tests/src/eth/util/playgrounds/types.js';
+import type {RMRKNestableMintable} from './ABIGEN/index.js';
const {dirname} = makeNames(import.meta.url);
export const CONTRACT_IMPORT: ContractImports[] = [
{
- fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol`,
solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol`,
solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol`,
solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol`,
solPath: '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
solPath: '@openzeppelin/contracts/token/ERC721/IERC721.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol`,
solPath: '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Address.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/Address.sol`,
solPath: '@openzeppelin/contracts/utils/Address.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,
solPath: '@openzeppelin/contracts/utils/Context.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
solPath: '@openzeppelin/contracts/utils/introspection/IERC165.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol`,
solPath: '@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol',
},
{
- fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol`,
solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol',
},
{
js-packages/scripts/src/benchmarks/opsFee/index.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/opsFee/index.ts
+++ b/js-packages/scripts/src/benchmarks/opsFee/index.ts
@@ -1,13 +1,15 @@
-import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';
+import {usingEthPlaygrounds} from '@unique/tests/src/eth/util/index.js';
+import {EthUniqueHelper} from '@unique/tests/src/eth/util/playgrounds/unique.dev.js';
import {readFile} from 'fs/promises';
-import {CollectionLimitField, CreateCollectionData, TokenPermissionField} from '../../eth/util/playgrounds/types';
-import {IKeyringPair} from '@polkadot/types/types';
-import {UniqueFTCollection, UniqueNFTCollection} from '../../util/playgrounds/unique';
+import {CollectionLimitField, CreateCollectionData, TokenPermissionField} from '@unique/tests/src/eth/util/playgrounds/types.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {UniqueFTCollection, UniqueNFTCollection} from '@unique/playgrounds/src/unique.js';
import {Contract} from 'web3-eth-contract';
import {createObjectCsvWriter} from 'csv-writer';
-import {FunctionFeeVM, IFunctionFee} from '../utils/types';
-import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES, SUBS_PROPERTIES} from '../utils/common';
-import {makeNames} from '../../util';
+import {FunctionFeeVM} from '../utils/types.js';
+import type {IFunctionFee} from '../utils/types.js';
+import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES, SUBS_PROPERTIES} from '../utils/common.js';
+import {makeNames} from '@unique/tests/src/util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/scripts/src/benchmarks/utils/common.tsdiffbeforeafterboth--- a/js-packages/scripts/src/benchmarks/utils/common.ts
+++ b/js-packages/scripts/src/benchmarks/utils/common.ts
@@ -1,7 +1,7 @@
-import {EthUniqueHelper} from '../../eth/util';
-import {ITokenPropertyPermission, TCollectionMode} from '../../util/playgrounds/types';
-import {UniqueNFTCollection, UniqueRFTCollection} from '../../util/playgrounds/unique';
-import {IKeyringPair} from '@polkadot/types/types';
+import {EthUniqueHelper} from '@unique/tests/src/eth/util/playgrounds/unique.dev.js';
+import {UniqueNFTCollection, UniqueRFTCollection} from '@unique/playgrounds/src/unique.js';
+import type {ITokenPropertyPermission, TCollectionMode} from '@unique/playgrounds/src/types.js';
+import type {IKeyringPair} from '@polkadot/types/types';
export const PROPERTIES = Array(40)
.fill(0)
js-packages/scripts/src/calibrate.tsdiffbeforeafterboth--- a/js-packages/scripts/src/calibrate.ts
+++ b/js-packages/scripts/src/calibrate.ts
@@ -1,5 +1,6 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingEthPlaygrounds, EthUniqueHelper} from './eth/util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingEthPlaygrounds} from '@unique/tests/src/eth/util/index.js';
+import {EthUniqueHelper} from '@unique/tests/src//eth/util/playgrounds/unique.dev.js';
class Fract {
static ZERO = new Fract(0n);
@@ -174,14 +175,14 @@
const hypothesisLinear = (a: Fract, b: Fract) => (x: Fract) => rpn(x, a, '*', b, '+');
-function _error(points: { x: Fract, y: Fract }[], hypothesis: (a: Fract) => Fract) {
- return points.map(p => {
- const v = hypothesis(p.x);
- const vv = p.y;
+// function error(points: { x: Fract, y: Fract }[], hypothesis: (a: Fract) => Fract) {
+// return points.map(p => {
+// const v = hypothesis(p.x);
+// const vv = p.y;
- return rpn(v, vv, '-', 'dup', '*');
- }).reduce((a, b) => a.plus(b), Fract.ZERO).sqrt().div(new Fract(BigInt(points.length)));
-}
+// return rpn(v, vv, '-', 'dup', '*');
+// }).reduce((a, b) => a.plus(b), Fract.ZERO).sqrt().div(new Fract(BigInt(points.length)));
+// }
async function calibrateWeightToFee(helper: EthUniqueHelper, privateKey: (account: string) => Promise<IKeyringPair>) {
const alice = await privateKey('//Alice');
js-packages/scripts/src/calibrateApply.tsdiffbeforeafterboth--- a/js-packages/scripts/src/calibrateApply.ts
+++ b/js-packages/scripts/src/calibrateApply.ts
@@ -1,7 +1,6 @@
import {readFile, writeFile} from 'fs/promises';
import path from 'path';
-import usingApi from './.outdated/substrate/substrate-api';
-import {makeNames} from './util';
+import {makeNames, usingPlaygrounds} from '@unique/tests/src/util/index.js';
const {dirname} = makeNames(import.meta.url);
@@ -10,9 +9,9 @@
(async () => {
let weightToFeeCoefficientOverride: string;
let minGasPriceOverride: string;
- await usingApi(async (api, _privateKey) => {
- weightToFeeCoefficientOverride = (await api.query.configuration.weightToFeeCoefficientOverride() as any).toBigInt().toString();
- minGasPriceOverride = (await api.query.configuration.minGasPriceOverride() as any).toBigInt().toString();
+ await usingPlaygrounds(async (helpers, _privateKey) => {
+ weightToFeeCoefficientOverride = (await helpers.getApi().query.configuration.weightToFeeCoefficientOverride() as any).toBigInt().toString();
+ minGasPriceOverride = (await helpers.getApi().query.configuration.minGasPriceOverride() as any).toBigInt().toString();
});
const constantsFile = path.resolve(dirname, '../../primitives/common/src/constants.rs');
let constants = (await readFile(constantsFile)).toString();
js-packages/scripts/src/fetchMetadata.tsdiffbeforeafterboth--- a/js-packages/scripts/src/fetchMetadata.ts
+++ b/js-packages/scripts/src/fetchMetadata.ts
@@ -25,7 +25,7 @@
}),
});
const json = await response.json();
- const output = join(srcDir, 'interfaces/metadata.json');
+ const output = join(srcDir, 'metadata.json');
console.log(`Received response, saving to ${output}`);
await writeFile(output, JSON.stringify(json));
exit(0);
js-packages/scripts/src/generateEnv.tsdiffbeforeafterboth--- a/js-packages/scripts/src/generateEnv.ts
+++ b/js-packages/scripts/src/generateEnv.ts
@@ -1,7 +1,7 @@
import {ApiPromise, WsProvider} from '@polkadot/api';
import {readFile} from 'fs/promises';
import {join} from 'path';
-import {makeNames} from './util';
+import {makeNames} from '@unique/tests/src/util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/scripts/src/generate_types/readyness.jsdiffbeforeafterboth--- a/js-packages/scripts/src/generate_types/readyness.js
+++ b/js-packages/scripts/src/generate_types/readyness.js
@@ -1,4 +1,4 @@
-import { ApiPromise, WsProvider } from '@polkadot/api';
+import {ApiPromise, WsProvider} from '@polkadot/api';
const connect = async () => {
const wsEndpoint = 'ws://127.0.0.1:9944';
@@ -9,26 +9,25 @@
await api.disconnect();
if(head < 1) throw Error('No block #1');
-}
-
-const sleep = time => {
- return new Promise(resolve => {
- setTimeout(() => resolve(), time);
- });
};
+const sleep = time => new Promise(resolve => {
+ setTimeout(() => resolve(), time);
+});
+
const main = async () => {
+ // eslint-disable-next-line no-constant-condition
while(true) {
try {
await connect();
break;
}
- catch(e) {
+ catch (e) {
await sleep(10000);
console.log(e);
}
}
-}
+};
main().then(() => process.exit(0)).catch(e => {
console.error(e);
js-packages/scripts/src/metadata.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/scripts/src/metadata.json
@@ -0,0 +1 @@
+{"jsonrpc":"2.0","result":"0x6d6574610eed0a000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173652106011450686173650001146576656e7450010445000118746f706963735d0501185665633c543e00005008306f70616c5f72756e74696d653052756e74696d654576656e740001981853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e000000485374617465547269654d6967726174696f6e04007801ac70616c6c65745f73746174655f747269655f6d6967726174696f6e3a3a4576656e743c52756e74696d653e0001003c50617261636861696e53797374656d04008401bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e00140044436f6c6c61746f7253656c656374696f6e04008c01a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0017001c53657373696f6e040090015470616c6c65745f73657373696f6e3a3a4576656e740018002042616c616e636573040094017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e001e00485472616e73616374696f6e5061796d656e7404009c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0021002054726561737572790400a0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e002200105375646f0400a4016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0023001c56657374696e670400b401706f726d6c5f76657374696e673a3a4576656e743c52756e74696d653e0025001c58546f6b656e730400c001706f726d6c5f78746f6b656e733a3a4576656e743c52756e74696d653e00260018546f6b656e7304000901016c6f726d6c5f746f6b656e733a3a4576656e743c52756e74696d653e002700204964656e7469747904001501017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e00280020507265696d61676504001901017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e0029002444656d6f637261637904001d01018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e002a001c436f756e63696c0400310101fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e002b0048546563686e6963616c436f6d6d69747465650400390101fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e002c0044436f756e63696c4d656d6265727368697004003d0101fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e002d0070546563686e6963616c436f6d6d69747465654d656d626572736869700400410101fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002e005046656c6c6f7773686970436f6c6c6563746976650400450101a070616c6c65745f72616e6b65645f636f6c6c6563746976653a3a4576656e743c52756e74696d653e002f004c46656c6c6f77736869705265666572656e646104005501018070616c6c65745f7265666572656e64613a3a4576656e743c52756e74696d653e003000245363686564756c65720400b905018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e0031002458636d7051756575650400bd0501a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0032002c506f6c6b61646f7458636d0400c105016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0033002843756d756c757358636d0400c905018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00340020446d7051756575650400cd0501a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00350034436f6e66696775726174696f6e0400d105019070616c6c65745f636f6e66696775726174696f6e3a3a4576656e743c52756e74696d653e003f0018436f6d6d6f6e0400d505017470616c6c65745f636f6d6d6f6e3a3a4576656e743c52756e74696d653e004200245374727563747572650400d905018070616c6c65745f7374727563747572653a3a4576656e743c52756e74696d653e0046003041707050726f6d6f74696f6e0400dd05019070616c6c65745f6170705f70726f6d6f74696f6e3a3a4576656e743c52756e74696d653e00490034466f726569676e4173736574730400e105019470616c6c65745f666f726569676e5f6173736574733a3a4576656e743c52756e74696d653e0050000c45564d0400e505016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e00640020457468657265756d0400e905015870616c6c65745f657468657265756d3a3a4576656e740065004845766d436f6e747261637448656c7065727304000d0601ac70616c6c65745f65766d5f636f6e74726163745f68656c706572733a3a4576656e743c52756e74696d653e0097003045766d4d6967726174696f6e04001106019070616c6c65745f65766d5f6d6967726174696f6e3a3a4576656e743c52756e74696d653e0099002c4d61696e74656e616e636504001506018870616c6c65745f6d61696e74656e616e63653a3a4576656e743c52756e74696d653e009a001c5574696c69747904001906015470616c6c65745f7574696c6974793a3a4576656e74009c0024546573745574696c7304001d06018470616c6c65745f746573745f7574696c733a3a4576656e743c52756e74696d653e00ff0000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574144576656e74040454000110204d696772617465640c010c746f7010010c7533320001146368696c6410010c75333200011c636f6d707574657c01404d6967726174696f6e436f6d707574650000083901476976656e206e756d626572206f66206028746f702c206368696c642960206b6579732077657265206d6967726174656420726573706563746976656c792c20776974682074686520676976656e2860636f6d70757465602e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104b4536f6d65206163636f756e7420676f7420736c61736865642062792074686520676976656e20616d6f756e742e544175746f4d6967726174696f6e46696e697368656400020484546865206175746f206d6967726174696f6e207461736b2066696e69736865642e1848616c7465640401146572726f728001204572726f723c543e000304ec4d6967726174696f6e20676f742068616c7465642064756520746f20616e206572726f72206f72206d6973732d636f6e66696775726174696f6e2e0470496e6e6572206576656e7473206f6620746869732070616c6c65742e7c0c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574404d6967726174696f6e436f6d70757465000108185369676e6564000000104175746f00010000800c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574144572726f720404540001183c4d61785369676e65644c696d697473000004804d6178207369676e6564206c696d697473206e6f74207265737065637465642e284b6579546f6f4c6f6e6700011cb441206b657920776173206c6f6e676572207468616e2074686520636f6e66696775726564206d6178696d756d2e00110154686973206d65616e73207468617420746865206d6967726174696f6e2068616c746564206174207468652063757272656e74205b6050726f6772657373605d20616e64010163616e20626520726573756d656420776974682061206c6172676572205b6063726174653a3a436f6e6669673a3a4d61784b65794c656e605d2076616c75652e21015265747279696e672077697468207468652073616d65205b6063726174653a3a436f6e6669673a3a4d61784b65794c656e605d2076616c75652077696c6c206e6f7420776f726b2e45015468652076616c75652073686f756c64206f6e6c7920626520696e6372656173656420746f2061766f696420612073746f72616765206d6967726174696f6e20666f72207468652063757272656e746c799073746f726564205b6063726174653a3a50726f67726573733a3a4c6173744b6579605d2e384e6f74456e6f75676846756e6473000204947375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e64732e284261645769746e65737300030468426164207769746e65737320646174612070726f76696465642e645369676e65644d6967726174696f6e4e6f74416c6c6f77656400040425015369676e6564206d6967726174696f6e206973206e6f7420616c6c6f776564206265636175736520746865206d6178696d756d206c696d6974206973206e6f7420736574207965742e304261644368696c64526f6f7400050460426164206368696c6420726f6f742070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e840c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f6861736888013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748804184f7074696f6e04045401040108104e6f6e6500000010536f6d6504000400000100008c0c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e7404045400011844496e76756c6e657261626c654164646564040130696e76756c6e657261626c65000130543a3a4163636f756e7449640000004c496e76756c6e657261626c6552656d6f766564040130696e76756c6e657261626c65000130543a3a4163636f756e7449640001003c4c6963656e73654f627461696e65640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0002003c4c6963656e736552656c65617365640801286163636f756e745f6964000130543a3a4163636f756e7449640001406465706f7369745f72657475726e656418013042616c616e63654f663c543e0003003843616e64696461746541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640004004043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e744964000500047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574940c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100009c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a40c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c74a801384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572b001504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c74a801384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a80418526573756c7408045401ac044501640108084f6b0400ac000000000c4572720400640000010000ac0000040000b004184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000b40c306f726d6c5f76657374696e67186d6f64756c65144576656e7404045400010c5056657374696e675363686564756c6541646465640c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400014076657374696e675f7363686564756c65b8015056657374696e675363686564756c654f663c543e0000046c4164646564206e65772076657374696e67207363686564756c652e1c436c61696d656408010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00010440436c61696d65642076657374696e672e5c56657374696e675363686564756c65735570646174656404010c77686f000130543a3a4163636f756e74496400020468557064617465642076657374696e67207363686564756c65732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b808306f726d6c5f76657374696e673c56657374696e675363686564756c65082c426c6f636b4e756d62657201101c42616c616e6365011800100114737461727410012c426c6f636b4e756d626572000118706572696f6410012c426c6f636b4e756d626572000130706572696f645f636f756e7410010c7533320001287065725f706572696f64bc011c42616c616e63650000bc0000061800c00c306f726d6c5f78746f6b656e73186d6f64756c65144576656e74040454000104585472616e736665727265644d756c746941737365747310011873656e646572000130543a3a4163636f756e744964000118617373657473c4012c4d756c746941737365747300010c666565cc01284d756c7469417373657400011064657374d401344d756c74694c6f636174696f6e000004885472616e7366657272656420604d756c74694173736574602077697468206665652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c4102c73746167696e675f78636d087633286d756c746961737365742c4d756c746941737365747300000400c8013c5665633c4d756c746941737365743e0000c8000002cc00cc102c73746167696e675f78636d087633286d756c74696173736574284d756c7469417373657400000801086964d0011c4173736574496400010c66756ef8012c46756e676962696c6974790000d0102c73746167696e675f78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400d401344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000d4102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72d801244a756e6374696f6e730000d8102c73746167696e675f78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400dc01204a756e6374696f6e0001000858320800dc01204a756e6374696f6e0000dc01204a756e6374696f6e0002000858330c00dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0003000858341000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0004000858351400dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0005000858361800dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0006000858371c00dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0007000858382000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e0000dc01204a756e6374696f6e00080000dc102c73746167696e675f78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400e0010c7533320000002c4163636f756e744964333208011c6e6574776f726be401444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726be401444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726be401444f7074696f6e3c4e6574776f726b49643e00010c6b6579ec01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400bc0110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964f00118426f6479496400011070617274f40120426f6479506172740008003c476c6f62616c436f6e73656e7375730400e801244e6574776f726b496400090000e00000061000e404184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e80000010000e8102c73746167696e675f78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d6265722c010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000ec000003140000000800f0102c73746167696e675f78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400e0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000f4102c73746167696e675f78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74e0010c753332000100204672616374696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c75333200040000f8102c73746167696e675f78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400bc0110753132380000002c4e6f6e46756e6769626c650400fc01344173736574496e7374616e636500010000fc102c73746167696e675f78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400bc01107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000101011c5b75383b20385d0003001c417272617931360400050101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d000500000101000003080000000800050100000310000000080009010c2c6f726d6c5f746f6b656e73186d6f64756c65144576656e740404540001441c456e646f7765640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f73740c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000108ec416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77c84578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e7366657210012c63757272656e63795f69640d010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2052657365727665640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000304e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e72657365727665640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656414012c63757272656e63795f69640d010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500011873746174757398013442616c616e6365537461747573000508f4536f6d652072657365727665642062616c616e63652077617320726570617472696174656420286d6f7665642066726f6d20726573657276656420746f44616e6f74686572206163636f756e74292e2842616c616e636553657410012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500060468412062616c616e6365207761732073657420627920726f6f742e40546f74616c49737375616e636553657408012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000704b854686520746f74616c2069737375616e6365206f6620616e2063757272656e637920686173206265656e207365742457697468647261776e0c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000804ec536f6d652062616c616e63657320776572652077697468647261776e2028652e672e2070617920666f72207472616e73616374696f6e20666565291c536c617368656410012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400012c667265655f616d6f756e74180128543a3a42616c616e636500013c72657365727665645f616d6f756e74180128543a3a42616c616e6365000904d4536f6d652062616c616e636573207765726520736c61736865642028652e672e2064756520746f206d69732d6265686176696f7229244465706f73697465640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a04984465706f736974656420736f6d652062616c616e636520696e746f20616e206163636f756e741c4c6f636b53657410011c6c6f636b5f6964010101384c6f636b4964656e74696669657200012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b0454536f6d652066756e647320617265206c6f636b65642c4c6f636b52656d6f7665640c011c6c6f636b5f6964010101384c6f636b4964656e74696669657200012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000c047c536f6d65206c6f636b65642066756e6473207765726520756e6c6f636b6564184c6f636b65640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d0474536f6d6520667265652062616c616e636520776173206c6f636b65642e20556e6c6f636b65640c012c63757272656e63795f69640d010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e0478536f6d65206c6f636b65642062616c616e6365207761732066726565642e1849737375656408012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000f002452657363696e64656408012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365001000047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d01085470616c6c65745f666f726569676e5f6173736574731c4173736574496400010838466f726569676e417373657449640400100138466f726569676e41737365744964000000344e6174697665417373657449640400110101384e617469766543757272656e6379000100001101085470616c6c65745f666f726569676e5f617373657473384e617469766543757272656e6379000108104865726500000018506172656e740001000015010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001342c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484964656e746974696573496e736572746564040118616d6f756e7410010c753332000304090141206e756d626572206f66206964656e74697469657320616e64206173736f63696174656420696e666f207765726520666f726369626c7920696e7365727465642e444964656e74697469657352656d6f766564040118616d6f756e7410010c753332000404150141206e756d626572206f66206964656e74697469657320616e6420616c6c206173736f63696174656420696e666f207765726520666f726369626c792072656d6f7665642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780006048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780007049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000804584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000904f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000a04090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000b08190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e545375624964656e746974696573496e736572746564040118616d6f756e7410010c753332000c04150141206e756d626572206f66206964656e746974696573207765726520666f726369626c7920757064617465642077697468206e6577207375622d6964656e7469746965732e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65741d010c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c6421010134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465250101644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e65722d0101344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e65722d0101344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e65722d0101344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e65722d0101344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c657421010c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f726974790002000025010c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f746529010110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e63650001000029010c4070616c6c65745f64656d6f637261637910766f746510566f746500000400080000002d010c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e6465780002000031010c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f74656435010110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c65743501000005000039010c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f74656435010110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c65743d010c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657441010c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657445010c6070616c6c65745f72616e6b65645f636f6c6c6563746976651870616c6c6574144576656e740804540004490001102c4d656d626572416464656404010c77686f000130543a3a4163636f756e7449640000047841206d656d626572206077686f6020686173206265656e2061646465642e2c52616e6b4368616e67656408010c77686f000130543a3a4163636f756e74496400011072616e6b4901011052616e6b000104f4546865206d656d626572206077686f6073652072616e6b20686173206265656e206368616e67656420746f2074686520676976656e206072616e6b602e344d656d62657252656d6f76656408010c77686f000130543a3a4163636f756e74496400011072616e6b4901011052616e6b0002041901546865206d656d626572206077686f60206f6620676976656e206072616e6b6020686173206265656e2072656d6f7665642066726f6d2074686520636f6c6c6563746976652e14566f74656410010c77686f000130543a3a4163636f756e744964000110706f6c6c100144506f6c6c496e6465784f663c542c20493e000110766f74654d010128566f74655265636f726400011474616c6c795101013454616c6c794f663c542c20493e0003085501546865206d656d626572206077686f602068617320766f74656420666f72207468652060706f6c6c6020776974682074686520676976656e2060766f746560206c656164696e6720746f20616e2075706461746564206074616c6c79602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574490100000504004d01086070616c6c65745f72616e6b65645f636f6c6c65637469766528566f74655265636f72640001080c4179650400100114566f7465730000000c4e61790400100114566f746573000100005101086070616c6c65745f72616e6b65645f636f6c6c6563746976651454616c6c790c045400044900044d00000c0124626172655f6179657310012c4d656d626572496e64657800011061796573100114566f7465730001106e617973100114566f746573000055010c4070616c6c65745f7265666572656e64611870616c6c6574144576656e74080454000449000140245375626d69747465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e0114747261636b4901013c547261636b49644f663c542c20493e04250154686520747261636b2028616e6420627920657874656e73696f6e2070726f706f73616c206469737061746368206f726967696e29206f662074686973207265666572656e64756d2e012070726f706f73616c5901014c426f756e64656443616c6c4f663c542c20493e04805468652070726f706f73616c20666f7220746865207265666572656e64756d2e00048041207265666572656e64756d20686173206265656e207375626d69747465642e544465636973696f6e4465706f736974506c616365640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e010494546865206465636973696f6e206465706f73697420686173206265656e20706c616365642e5c4465636973696f6e4465706f736974526566756e6465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e02049c546865206465636973696f6e206465706f73697420686173206265656e20726566756e6465642e384465706f736974536c617368656408010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e03047041206465706f73697420686173206265656e20736c6173686165642e3c4465636973696f6e53746172746564100114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e0114747261636b4901013c547261636b49644f663c542c20493e04250154686520747261636b2028616e6420627920657874656e73696f6e2070726f706f73616c206469737061746368206f726967696e29206f662074686973207265666572656e64756d2e012070726f706f73616c5901014c426f756e64656443616c6c4f663c542c20493e04805468652070726f706f73616c20666f7220746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b85468652063757272656e742074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0404bc41207265666572656e64756d20686173206d6f76656420696e746f20746865206465636964696e672070686173652e38436f6e6669726d53746172746564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e050038436f6e6669726d41626f72746564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e060024436f6e6669726d6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0704210141207265666572656e64756d2068617320656e6465642069747320636f6e6669726d6174696f6e20706861736520616e6420697320726561647920666f7220617070726f76616c2e20417070726f766564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e08040d0141207265666572656e64756d20686173206265656e20617070726f76656420616e64206974732070726f706f73616c20686173206265656e207363686564756c65642e2052656a6563746564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0904ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2054696d65644f7574080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0a04d841207265666572656e64756d20686173206265656e2074696d6564206f757420776974686f7574206265696e6720646563696465642e2443616e63656c6c6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0b048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e184b696c6c6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7951010120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0c047441207265666572656e64756d20686173206265656e206b696c6c65642e645375626d697373696f6e4465706f736974526566756e6465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e0d04a4546865207375626d697373696f6e206465706f73697420686173206265656e20726566756e6465642e2c4d65746164617461536574080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e049c4d6574616461746120666f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c6561726564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04ac4d6574616461746120666f722061207265666572656e64756d20686173206265656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574590110346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454015d01010c184c6567616379040110686173683001104861736800000018496e6c696e650400b5050134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e10010c753332000200005d0108306f70616c5f72756e74696d652c52756e74696d6543616c6c0001a01853797374656d0400610101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e000000485374617465547269654d6967726174696f6e0400710101dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374617465547269654d6967726174696f6e2c2052756e74696d653e0001003c50617261636861696e53797374656d0400890101d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0014003450617261636861696e496e666f0400c10101c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e00150044436f6c6c61746f7253656c656374696f6e0400c50101d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e0017001c53657373696f6e0400c90101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0018002042616c616e6365730400d90101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e001e002454696d657374616d700400e90101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0020002054726561737572790400ed0101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e002200105375646f0400f10101a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0023001c56657374696e670400f50101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e0025001c58546f6b656e730400fd0101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58546f6b656e732c2052756e74696d653e00260018546f6b656e7304004d0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e732c2052756e74696d653e002700204964656e746974790400510201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e00280020507265696d6167650400190301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0029002444656d6f637261637904001d0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e002a001c436f756e63696c04002d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e002b0048546563686e6963616c436f6d6d69747465650400310301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e002c0044436f756e63696c4d656d626572736869700400350301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c4d656d626572736869702c2052756e74696d653e002d0070546563686e6963616c436f6d6d69747465654d656d626572736869700400390301050273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465654d656d626572736869702c2052756e74696d653e002e005046656c6c6f7773686970436f6c6c65637469766504003d0301e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46656c6c6f7773686970436f6c6c6563746976652c2052756e74696d653e002f004c46656c6c6f77736869705265666572656e64610400410301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46656c6c6f77736869705265666572656e64612c2052756e74696d653e003000245363686564756c65720400710301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e0031002458636d70517565756504007d0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0032002c506f6c6b61646f7458636d0400810301c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e0033002843756d756c757358636d0400250401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e00340020446d7051756575650400290401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00350024496e666c6174696f6e04002d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e666c6174696f6e2c2052756e74696d653e003c0018556e697175650400310401ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e697175652c2052756e74696d653e003d0034436f6e66696775726174696f6e04000d0501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e66696775726174696f6e2c2052756e74696d653e003f00245374727563747572650400290501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374727563747572652c2052756e74696d653e0046003041707050726f6d6f74696f6e04002d0501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41707050726f6d6f74696f6e2c2052756e74696d653e00490034466f726569676e4173736574730400350501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f726569676e4173736574732c2052756e74696d653e0050000c45564d0400450501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e00640020457468657265756d0400610501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0065004845766d436f6e747261637448656c706572730400890501dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45766d436f6e747261637448656c706572732c2052756e74696d653e0097003045766d4d6967726174696f6e0400910501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45766d4d6967726174696f6e2c2052756e74696d653e0099002c4d61696e74656e616e63650400a50501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d61696e74656e616e63652c2052756e74696d653e009a001c5574696c6974790400a90501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e009c0024546573745574696c730400b10501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546573745574696c732c2052756e74696d653e00ff000061010c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f706167657304011470616765732c010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73650101345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b6579736d0101205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e65010000026901006901000004083434006d01000002340071010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65741043616c6c04045400011858636f6e74726f6c5f6175746f5f6d6967726174696f6e0401306d617962655f636f6e6669677501015c4f7074696f6e3c4d6967726174696f6e4c696d6974733e0000049c536565205b6050616c6c65743a3a636f6e74726f6c5f6175746f5f6d6967726174696f6e605d2e40636f6e74696e75655f6d6967726174650c01186c696d6974737901013c4d6967726174696f6e4c696d69747300013c7265616c5f73697a655f757070657210010c7533320001307769746e6573735f7461736b7d0101404d6967726174696f6e5461736b3c543e00010484536565205b6050616c6c65743a3a636f6e74696e75655f6d696772617465605d2e486d6967726174655f637573746f6d5f746f700801106b6579736d0101305665633c5665633c75383e3e0001307769746e6573735f73697a6510010c7533320002048c536565205b6050616c6c65743a3a6d6967726174655f637573746f6d5f746f70605d2e506d6967726174655f637573746f6d5f6368696c640c0110726f6f7434011c5665633c75383e0001286368696c645f6b6579736d0101305665633c5665633c75383e3e000128746f74616c5f73697a6510010c75333200030494536565205b6050616c6c65743a3a6d6967726174655f637573746f6d5f6368696c64605d2e547365745f7369676e65645f6d61785f6c696d6974730401186c696d6974737901013c4d6967726174696f6e4c696d69747300040498536565205b6050616c6c65743a3a7365745f7369676e65645f6d61785f6c696d697473605d2e48666f7263655f7365745f70726f677265737308013070726f67726573735f746f708101013450726f67726573734f663c543e00013870726f67726573735f6368696c648101013450726f67726573734f663c543e0005048c536565205b6050616c6c65743a3a666f7263655f7365745f70726f6772657373605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750104184f7074696f6e0404540179010108104e6f6e6500000010536f6d6504007901000001000079010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65743c4d6967726174696f6e4c696d697473000008011073697a6510010c7533320001106974656d10010c75333200007d010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574344d6967726174696f6e5461736b040454000014013070726f67726573735f746f708101013450726f67726573734f663c543e00013870726f67726573735f6368696c648101013450726f67726573734f663c543e00011073697a6510010c753332000124746f705f6974656d7310010c75333200012c6368696c645f6974656d7310010c753332000081010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65742050726f677265737304244d61784b65794c656e00010c1c546f53746172740000001c4c6173744b6579040085010164426f756e6465645665633c75382c204d61784b65794c656e3e00010020436f6d706c6574650002000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000089010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174618d01015450617261636861696e496e686572656e744461746100000490536565205b6050616c6c65743a3a7365745f76616c69646174696f6e5f64617461605d2e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d657373616765000104a4536565205b6050616c6c65743a3a7375646f5f73656e645f7570776172645f6d657373616765605d2e44617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e35010110626f6f6c00020488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000304a4536565205b6050616c6c65743a3a656e6163745f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d01089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174619101015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174659901015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573a101016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573a90101a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000091010c4c706f6c6b61646f745f7072696d6974697665730876355c50657273697374656456616c69646174696f6e446174610804480130044e01100010012c706172656e745f6865616495010120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6510010c753332000095010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040034011c5665633c75383e000099010c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465739d01014442547265655365743c5665633c75383e3e00009d010420425472656553657404045401340004006d01000000a101000002a50100a5010860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d6573736167650000a901042042547265654d617008044b01ad01045601b101000400b901000000ad010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000b101000002b50100b5010860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e0000b901000002bd0100bd0100000408ad01b10100c1010c3870617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5010c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c04045400011c406164645f696e76756c6e657261626c6504010c6e6577000130543a3a4163636f756e74496400000484536565205b6050616c6c65743a3a6164645f696e76756c6e657261626c65605d2e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400010490536565205b6050616c6c65743a3a72656d6f76655f696e76756c6e657261626c65605d2e2c6765745f6c6963656e736500020470536565205b6050616c6c65743a3a6765745f6c6963656e7365605d2e1c6f6e626f61726400030460536565205b6050616c6c65743a3a6f6e626f617264605d2e206f6666626f61726400040464536565205b6050616c6c65743a3a6f6666626f617264605d2e3c72656c656173655f6c6963656e736500050480536565205b6050616c6c65743a3a72656c656173655f6c6963656e7365605d2e54666f7263655f72656c656173655f6c6963656e736504010c77686f000130543a3a4163636f756e74496400060498536565205b6050616c6c65743a3a666f7263655f72656c656173655f6c6963656e7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9010c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973cd01011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd010c306f70616c5f72756e74696d653872756e74696d655f636f6d6d6f6e2c53657373696f6e4b657973000004011061757261d10101c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000d101104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c696300000400d501013c737232353531393a3a5075626c69630000d5010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000d9010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374dd0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bc0128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e587365745f62616c616e63655f646570726563617465640c010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565bc0128543a3a42616c616e63650001306f6c645f7265736572766564bc0128543a3a42616c616e63650001049c536565205b6050616c6c65743a3a7365745f62616c616e63655f64657072656361746564605d2e38666f7263655f7472616e736665720c0118736f75726365dd0101504163636f756e7449644c6f6f6b75704f663c543e00011064657374dd0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bc0128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374dd0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bc0128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374dd0101504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c69766535010110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686fe50101445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e207472616e7366657208011064657374dd0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bc0128543a3a42616c616e636500070464536565205b6050616c6c65743a3a7472616e73666572605d2e44666f7263655f7365745f62616c616e636508010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565bc0128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ac011408496404000001244163636f756e74496400000014496e6465780400e10101304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400ec01205b75383b2032305d00040000e101000006ac00e5010000020000e9010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed010c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565bc013c42616c616e63654f663c542c20493e00012c62656e6566696369617279dd0101504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964e0013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964e0013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e147370656e64080118616d6f756e74bc013c42616c616e63654f663c542c20493e00012c62656e6566696369617279dd0101504163636f756e7449644c6f6f6b75704f663c543e00030458536565205b6050616c6c65743a3a7370656e64605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964e0013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1010c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000454536565205b6050616c6c65743a3a7375646f605d2e547375646f5f756e636865636b65645f77656967687408011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400010498536565205b6050616c6c65743a3a7375646f5f756e636865636b65645f776569676874605d2e1c7365745f6b657904010c6e6577dd0101504163636f756e7449644c6f6f6b75704f663c543e00020460536565205b6050616c6c65743a3a7365745f6b6579605d2e1c7375646f5f617308010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030460536565205b6050616c6c65743a3a7375646f5f6173605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef5010c306f726d6c5f76657374696e67186d6f64756c651043616c6c04045400011014636c61696d00000458536565205b6050616c6c65743a3a636c61696d605d2e3c7665737465645f7472616e7366657208011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c65b8015056657374696e675363686564756c654f663c543e00010480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e607570646174655f76657374696e675f7363686564756c657308010c77686fdd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500014476657374696e675f7363686564756c6573f90101645665633c56657374696e675363686564756c654f663c543e3e000204a4536565205b6050616c6c65743a3a7570646174655f76657374696e675f7363686564756c6573605d2e24636c61696d5f666f7204011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500030468536565205b6050616c6c65743a3a636c61696d5f666f72605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef901000002b800fd010c306f726d6c5f78746f6b656e73186d6f64756c651043616c6c040454000118207472616e7366657210012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d697400000464536565205b6050616c6c65743a3a7472616e73666572605d2e4c7472616e736665725f6d756c746961737365740c0114617373657425020160426f783c56657273696f6e65644d756c746941737365743e000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d697400010490536565205b6050616c6c65743a3a7472616e736665725f6d756c74696173736574605d2e447472616e736665725f776974685f66656514012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500010c666565180128543a3a42616c616e6365000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d697400020488536565205b6050616c6c65743a3a7472616e736665725f776974685f666565605d2e707472616e736665725f6d756c746961737365745f776974685f666565100114617373657425020160426f783c56657273696f6e65644d756c746941737365743e00010c66656525020160426f783c56657273696f6e65644d756c746941737365743e000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d6974000304b4536565205b6050616c6c65743a3a7472616e736665725f6d756c746961737365745f776974685f666565605d2e607472616e736665725f6d756c746963757272656e6369657310012863757272656e63696573390201805665633c28543a3a43757272656e637949642c20543a3a42616c616e6365293e0001206665655f6974656d10010c753332000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d6974000404a4536565205b6050616c6c65743a3a7472616e736665725f6d756c746963757272656e63696573605d2e507472616e736665725f6d756c746961737365747310011861737365747341020164426f783c56657273696f6e65644d756c74694173736574733e0001206665655f6974656d10010c753332000110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69742102012c5765696768744c696d697400050494536565205b6050616c6c65743a3a7472616e736665725f6d756c7469617373657473605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0102082c73746167696e675f78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204000502014476323a3a4d756c74694c6f636174696f6e0001000856330400d4014476333a3a4d756c74694c6f636174696f6e000300000502102c73746167696e675f78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72090201244a756e6374696f6e7300000902102c73746167696e675f78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104000d0201204a756e6374696f6e00010008583208000d0201204a756e6374696f6e00000d0201204a756e6374696f6e0002000858330c000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00030008583410000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00040008583514000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00050008583618000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e0006000858371c000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00070008583820000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e00000d0201204a756e6374696f6e000800000d02102c73746167696e675f78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400e0010c7533320000002c4163636f756e744964333208011c6e6574776f726b110201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b110201244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726b110201244e6574776f726b496400010c6b6579ec01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400bc0110753132380005002847656e6572616c4b65790400150201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696419020118426f64794964000110706172741d020120426f6479506172740008000011020c2c73746167696e675f78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400150201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000015020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e000019020c2c73746167696e675f78636d08763218426f6479496400012810556e6974000000144e616d65640400150201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400e0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900001d020c2c73746167696e675f78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74e0010c753332000100204672616374696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6de0010c75333200011464656e6f6de0010c7533320004000021020c2c73746167696e675f78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400240118576569676874000100002502082c73746167696e675f78636d4c56657273696f6e65644d756c7469417373657400010808563204002902013876323a3a4d756c746941737365740001000856330400cc013876333a3a4d756c74694173736574000300002902102c73746167696e675f78636d087632286d756c74696173736574284d756c74694173736574000008010869642d02011c4173736574496400010c66756e3102012c46756e676962696c69747900002d02102c73746167696e675f78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400050201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100003102102c73746167696e675f78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400bc0110753132380000002c4e6f6e46756e6769626c650400350201344173736574496e7374616e6365000100003502102c73746167696e675f78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400bc01107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000101011c5b75383b20385d0003001c417272617931360400050101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e0006000039020000023d02003d02000004080d0118004102082c73746167696e675f78636d5056657273696f6e65644d756c746941737365747300010808563204004502013c76323a3a4d756c74694173736574730001000856330400c4013c76333a3a4d756c7469417373657473000300004502102c73746167696e675f78636d087632286d756c746961737365742c4d756c7469417373657473000004004902013c5665633c4d756c746941737365743e000049020000022902004d020c2c6f726d6c5f746f6b656e73186d6f64756c651043616c6c040454000114207472616e736665720c011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74bc0128543a3a42616c616e636500000464536565205b6050616c6c65743a3a7472616e73666572605d2e307472616e736665725f616c6c0c011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f69640d010134543a3a43757272656e637949640001286b6565705f616c69766535010110626f6f6c00010474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e4c7472616e736665725f6b6565705f616c6976650c011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74bc0128543a3a42616c616e636500020490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e38666f7263655f7472616e73666572100118736f75726365dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011064657374dd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f69640d010134543a3a43757272656e63794964000118616d6f756e74bc0128543a3a42616c616e63650003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e2c7365745f62616c616e636510010c77686fdd01018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f69640d010134543a3a43757272656e637949640001206e65775f66726565bc0128543a3a42616c616e63650001306e65775f7265736572766564bc0128543a3a42616c616e636500040470536565205b6050616c6c65743a3a7365745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51020c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000148346164645f72656769737472617204011c6163636f756e74dd0101504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a6164645f726567697374726172605d2e307365745f6964656e74697479040110696e666f550201a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00010474536565205b6050616c6c65743a3a7365745f6964656e74697479605d2e207365745f7375627304011073756273dd0201645665633c28543a3a4163636f756e7449642c2044617461293e00020464536565205b6050616c6c65743a3a7365745f73756273605d2e38636c6561725f6964656e746974790003047c536565205b6050616c6c65743a3a636c6561725f6964656e74697479605d2e44726571756573745f6a756467656d656e740801247265675f696e646578e00138526567697374726172496e64657800011c6d61785f666565bc013042616c616e63654f663c543e00040488536565205b6050616c6c65743a3a726571756573745f6a756467656d656e74605d2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005047c536565205b6050616c6c65743a3a63616e63656c5f72657175657374605d2e1c7365745f666565080114696e646578e00138526567697374726172496e64657800010c666565bc013042616c616e63654f663c543e00060460536565205b6050616c6c65743a3a7365745f666565605d2e387365745f6163636f756e745f6964080114696e646578e00138526567697374726172496e64657800010c6e6577dd0101504163636f756e7449644c6f6f6b75704f663c543e0007047c536565205b6050616c6c65743a3a7365745f6163636f756e745f6964605d2e287365745f6669656c6473080114696e646578e00138526567697374726172496e6465780001186669656c6473e50201384964656e746974794669656c64730008046c536565205b6050616c6c65743a3a7365745f6669656c6473605d2e4470726f766964655f6a756467656d656e741001247265675f696e646578e00138526567697374726172496e646578000118746172676574dd0101504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74ed02015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747930011c543a3a4861736800090488536565205b6050616c6c65743a3a70726f766964655f6a756467656d656e74605d2e346b696c6c5f6964656e74697479040118746172676574dd0101504163636f756e7449644c6f6f6b75704f663c543e000a0478536565205b6050616c6c65743a3a6b696c6c5f6964656e74697479605d2e1c6164645f73756208010c737562dd0101504163636f756e7449644c6f6f6b75704f663c543e000110646174616102011044617461000b0460536565205b6050616c6c65743a3a6164645f737562605d2e2872656e616d655f73756208010c737562dd0101504163636f756e7449644c6f6f6b75704f663c543e000110646174616102011044617461000c046c536565205b6050616c6c65743a3a72656e616d655f737562605d2e2872656d6f76655f73756204010c737562dd0101504163636f756e7449644c6f6f6b75704f663c543e000d046c536565205b6050616c6c65743a3a72656d6f76655f737562605d2e20717569745f737562000e0464536565205b6050616c6c65743a3a717569745f737562605d2e5c666f7263655f696e736572745f6964656e7469746965730401286964656e746974696573f10201985665633c28543a3a4163636f756e7449642c20526567697374726174696f6e4f663c543e293e000f04a0536565205b6050616c6c65743a3a666f7263655f696e736572745f6964656e746974696573605d2e5c666f7263655f72656d6f76655f6964656e7469746965730401286964656e746974696573e50101445665633c543a3a4163636f756e7449643e001004a0536565205b6050616c6c65743a3a666f7263655f72656d6f76655f6964656e746974696573605d2e38666f7263655f7365745f7375627304011073756273090301785665633c5375624163636f756e747342794163636f756e7449643c543e3e0011047c536565205b6050616c6c65743a3a666f7263655f7365745f73756273605d2e04704964656e746974792070616c6c6574206465636c61726174696f6e2e55020c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c59020190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617961020110446174610001146c6567616c610201104461746100010c776562610201104461746100011072696f746102011044617461000114656d61696c610201104461746100013c7067705f66696e6765727072696e74d90201404f7074696f6e3c5b75383b2032305d3e000114696d616765610201104461746100011c747769747465726102011044617461000059020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d02045300000400d50201185665633c543e00005d0200000408610261020061020c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e650000001052617730040065020000010010526177310400690200000200105261773204006d0200000300105261773304007102000004001052617734040044000005001052617735040075020000060010526177360400790200000700105261773704007d02000008001052617738040001010000090010526177390400810200000a001452617731300400850200000b001452617731310400890200000c0014526177313204008d0200000d001452617731330400910200000e001452617731340400950200000f001452617731350400990200001000145261773136040005010000110014526177313704009d02000012001452617731380400a102000013001452617731390400a502000014001452617732300400ec000015001452617732310400a902000016001452617732320400ad02000017001452617732330400b102000018001452617732340400b502000019001452617732350400b90200001a001452617732360400bd0200001b001452617732370400c10200001c001452617732380400c50200001d001452617732390400c90200001e001452617733300400cd0200001f001452617733310400d10200002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c53686154687265653235360400040000250000650200000300000000080069020000030100000008006d020000030200000008007102000003030000000800750200000305000000080079020000030600000008007d02000003070000000800810200000309000000080085020000030a000000080089020000030b00000008008d020000030c000000080091020000030d000000080095020000030e000000080099020000030f00000008009d02000003110000000800a102000003120000000800a502000003130000000800a902000003150000000800ad02000003160000000800b102000003170000000800b502000003180000000800b902000003190000000800bd020000031a0000000800c1020000031b0000000800c5020000031c0000000800c9020000031d0000000800cd020000031e0000000800d1020000031f0000000800d5020000025d0200d90204184f7074696f6e04045401ec0108104e6f6e6500000010536f6d650400ec0000010000dd02000002e10200e1020000040800610200e5020c3c70616c6c65745f6964656e7469747914747970657320426974466c61677304045401e9020004002c01344964656e746974794669656c640000e9020c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c5477697474657200800000ed020c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000f102000002f50200f5020000040800f90200f9020c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473fd0201fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f550201844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e0000fd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010103045300000400050301185665633c543e000001030000040810ed0200050300000201030009030000020d03000d0300000408001103001103000004081815030015030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e102045300000400dd0201185665633c543e000019030c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616c59010140426f756e64656443616c6c4f663c543e00011476616c7565bc013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616ce0012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578e0013c5265666572656e64756d496e646578000110766f7465250101644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616c59010140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c59010140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c59010140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100144426c6f636b4e756d626572466f723c543e00011464656c6179100144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f686173683001104832353600080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578e0013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746fdd0101504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e21030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574dd0101504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574dd0101504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465782503015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578e0012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e65722d0101344d657461646174614f776e65720001286d617962655f68617368290301504f7074696f6e3c507265696d616765486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000250304184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000290304184f7074696f6e04045401300108104e6f6e6500000010536f6d6504003000000100002d030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273e50101445665633c543a3a4163636f756e7449643e0001147072696d65b001504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c5d01017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64e0010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64e0012c4d656d626572436f756e7400012070726f706f73616c5d01017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64e0010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578e0013450726f706f73616c496e64657800011c617070726f766535010110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578e0013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64e0010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273e50101445665633c543a3a4163636f756e7449643e0001147072696d65b001504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c5d01017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64e0010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64e0012c4d656d626572436f756e7400012070726f706f73616c5d01017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64e0010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578e0013450726f706f73616c496e64657800011c617070726f766535010110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578e0013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64e0010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665dd0101504163636f756e7449644c6f6f6b75704f663c543e00010c616464dd0101504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273e50101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577dd0101504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665dd0101504163636f756e7449644c6f6f6b75704f663c543e00010c616464dd0101504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273e50101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577dd0101504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d030c6070616c6c65745f72616e6b65645f636f6c6c6563746976651870616c6c65741043616c6c080454000449000118286164645f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3870726f6d6f74655f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0001047c536565205b6050616c6c65743a3a70726f6d6f74655f6d656d626572605d2e3464656d6f74655f6d656d62657204010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e00020478536565205b6050616c6c65743a3a64656d6f74655f6d656d626572605d2e3472656d6f76655f6d656d62657208010c77686fdd0101504163636f756e7449644c6f6f6b75704f663c543e0001206d696e5f72616e6b4901011052616e6b00030478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e10766f7465080110706f6c6c100144506f6c6c496e6465784f663c542c20493e00010c61796535010110626f6f6c00040454536565205b6050616c6c65743a3a766f7465605d2e30636c65616e75705f706f6c6c080128706f6c6c5f696e646578100144506f6c6c496e6465784f663c542c20493e00010c6d617810010c75333200050474536565205b6050616c6c65743a3a636c65616e75705f706f6c6c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41030c4070616c6c65745f7265666572656e64611870616c6c65741043616c6c080454000449000124187375626d69740c013c70726f706f73616c5f6f726967696e4503015c426f783c50616c6c6574734f726967696e4f663c543e3e00012070726f706f73616c5901014c426f756e64656443616c6c4f663c542c20493e000140656e6163746d656e745f6d6f6d656e746d03017c446973706174636854696d653c426c6f636b4e756d626572466f723c543e3e0000045c536565205b6050616c6c65743a3a7375626d6974605d2e58706c6163655f6465636973696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e6465780001049c536565205b6050616c6c65743a3a706c6163655f6465636973696f6e5f6465706f736974605d2e5c726566756e645f6465636973696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e646578000204a0536565205b6050616c6c65743a3a726566756e645f6465636973696f6e5f6465706f736974605d2e1863616e63656c040114696e64657810013c5265666572656e64756d496e6465780003045c536565205b6050616c6c65743a3a63616e63656c605d2e106b696c6c040114696e64657810013c5265666572656e64756d496e64657800040454536565205b6050616c6c65743a3a6b696c6c605d2e406e756467655f7265666572656e64756d040114696e64657810013c5265666572656e64756d496e64657800050484536565205b6050616c6c65743a3a6e756467655f7265666572656e64756d605d2e486f6e655f66657765725f6465636964696e67040114747261636b4901013c547261636b49644f663c542c20493e0006048c536565205b6050616c6c65743a3a6f6e655f66657765725f6465636964696e67605d2e64726566756e645f7375626d697373696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e646578000704a8536565205b6050616c6c65743a3a726566756e645f7375626d697373696f6e5f6465706f736974605d2e307365745f6d65746164617461080114696e64657810013c5265666572656e64756d496e6465780001286d617962655f68617368290301504f7074696f6e3c507265696d616765486173683e00080474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e450308306f70616c5f72756e74696d65304f726967696e43616c6c65720001201873797374656d0400490301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04004d0301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e002b0048546563686e6963616c436f6d6d69747465650400510301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e002c001c4f726967696e7304005503016870616c6c65745f676f765f6f726967696e733a3a4f726967696e0063002c506f6c6b61646f7458636d04005903014870616c6c65745f78636d3a3a4f726967696e0033002843756d756c757358636d04005d03016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00340020457468657265756d04006103015c70616c6c65745f657468657265756d3a3a4f726967696e00650010566f69640400690301410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f69640007000049030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200004d03084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200005103084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000055030c4870616c6c65745f676f765f6f726967696e731870616c6c6574184f726967696e0001045446656c6c6f777368697050726f706f736974696f6e0000000059030c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400d401344d756c74694c6f636174696f6e00000020526573706f6e73650400d401344d756c74694c6f636174696f6e000100005d030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400ad010118506172614964000100006103083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e04006503011048313630000000006503083c7072696d69746976655f7479706573104831363000000400ec01205b75383b2032305d00006903081c73705f636f726510566f6964000100006d0310346672616d655f737570706f727418747261697473207363686564756c6530446973706174636854696d65042c426c6f636b4e756d62657201100108084174040010012c426c6f636b4e756d626572000000144166746572040010012c426c6f636b4e756d6265720001000071030c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963750301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963750301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963750301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963750301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750304184f7074696f6e0404540179030108104e6f6e6500000010536f6d650400790300000100007903000004081010007d030c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e6465782c013c4f766572776569676874496e6465780001307765696768745f6c696d69742401185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e5473757370656e645f78636d5f657865637574696f6e00010498536565205b6050616c6c65743a3a73757370656e645f78636d5f657865637574696f6e605d2e50726573756d655f78636d5f657865637574696f6e00020494536565205b6050616c6c65743a3a726573756d655f78636d5f657865637574696f6e605d2e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c753332000304a4536565205b6050616c6c65743a3a7570646174655f73757370656e645f7468726573686f6c64605d2e547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200040498536565205b6050616c6c65743a3a7570646174655f64726f705f7468726573686f6c64605d2e5c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c753332000504a0536565205b6050616c6c65743a3a7570646174655f726573756d655f7468726573686f6c64605d2e5c7570646174655f7468726573686f6c645f77656967687404010c6e6577240118576569676874000604a0536565205b6050616c6c65743a3a7570646174655f7468726573686f6c645f776569676874605d2e707570646174655f7765696768745f72657374726963745f646563617904010c6e6577240118576569676874000704b4536565205b6050616c6c65743a3a7570646174655f7765696768745f72657374726963745f6465636179605d2e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e6577240118576569676874000804c8536565205b6050616c6c65743a3a7570646174655f78636d705f6d61785f696e646976696475616c5f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81030c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e64080110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676585030154426f783c56657273696f6e656458636d3c28293e3e00000454536565205b6050616c6c65743a3a73656e64605d2e3c74656c65706f72745f617373657473100110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172790102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747341020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c75333200010480536565205b6050616c6c65743a3a74656c65706f72745f617373657473605d2e5c726573657276655f7472616e736665725f617373657473100110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172790102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747341020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c753332000204a0536565205b6050616c6c65743a3a726573657276655f7472616e736665725f617373657473605d2e1c6578656375746508011c6d657373616765050401c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687424011857656967687400030460536565205b6050616c6c65743a3a65786563757465605d2e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ed40148426f783c4d756c74694c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00040488536565205b6050616c6c65743a3a666f7263655f78636d5f76657273696f6e605d2e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e250301484f7074696f6e3c58636d56657273696f6e3e000504a8536565205b6050616c6c65743a3a666f7263655f64656661756c745f78636d5f76657273696f6e605d2e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e0102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000604bc536565205b6050616c6c65743a3a666f7263655f7375627363726962655f76657273696f6e5f6e6f74696679605d2e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e0102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000704c4536565205b6050616c6c65743a3a666f7263655f756e7375627363726962655f76657273696f6e5f6e6f74696679605d2e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172790102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747341020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69742102012c5765696768744c696d6974000804c0536565205b6050616c6c65743a3a6c696d697465645f726573657276655f7472616e736665725f617373657473605d2e5c6c696d697465645f74656c65706f72745f617373657473140110646573740102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172790102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747341020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69742102012c5765696768744c696d6974000904a0536565205b6050616c6c65743a3a6c696d697465645f74656c65706f72745f617373657473605d2e40666f7263655f73757370656e73696f6e04012473757370656e64656435010110626f6f6c000a0484536565205b6050616c6c65743a3a666f7263655f73757370656e73696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8503082c73746167696e675f78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204008903015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400bd03015076333a3a58636d3c52756e74696d6543616c6c3e0003000089030c2c73746167696e675f78636d0876320c58636d042c52756e74696d6543616c6c000004008d0301745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00008d0300000291030091030c2c73746167696e675f78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736595030120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734502012c4d756c746941737365747300012c62656e6566696369617279050201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734502012c4d756c746941737365747300011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065a50301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6ca9030168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572e0010c7533320001406d61785f6d6573736167655f73697a65e0010c7533320001306d61785f6361706163697479e0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74e0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72e0010c75333200011873656e646572e0010c753332000124726563697069656e74e0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040009020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374050201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473ad0301404d756c7469417373657446696c7465720001286d61785f617373657473e0010c75333200012c62656e6566696369617279050201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473ad0301404d756c7469417373657446696c7465720001286d61785f617373657473e0010c75333200011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e000e003445786368616e6765417373657408011067697665ad0301404d756c7469417373657446696c74657200011c726563656976654502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473ad0301404d756c7469417373657446696c74657200011c72657365727665050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473ad0301404d756c7469417373657446696c74657200011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374050201344d756c74694c6f636174696f6e000118617373657473ad0301404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d6974b903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204008903014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804008903014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734502012c4d756c74694173736574730001187469636b6574050201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000095030c2c73746167696e675f78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304004502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400990301504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000990304184f7074696f6e040454019d030108104e6f6e6500000010536f6d6504009d0300000100009d030000040810a10300a103102c73746167696e675f78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e73697665001400105472617004002c010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404002c01185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000a5030c2c73746167696e675f78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d00030000a9030c2c73746167696e675f78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000ad03102c73746167696e675f78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504004502012c4d756c74694173736574730000001057696c640400b103013857696c644d756c7469417373657400010000b103102c73746167696e675f78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869642d02011c4173736574496400010c66756eb503013c57696c6446756e676962696c69747900010000b503102c73746167696e675f78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000b9030c2c73746167696e675f78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c75363400010000bd030c2c73746167696e675f78636d0876330c58636d041043616c6c00000400c10301585665633c496e737472756374696f6e3c43616c6c3e3e0000c103000002c50300c5030c2c73746167696e675f78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400c4012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400c4012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400c4012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365c9030120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572f10301544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473c4012c4d756c746941737365747300012c62656e6566696369617279d401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473c4012c4d756c746941737365747300011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64a50301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6ca903014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572e0010c7533320001406d61785f6d6573736167655f73697a65e0010c7533320001306d61785f6361706163697479e0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74e0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72e0010c75333200011873656e646572e0010c753332000124726563697069656e74e0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400d80154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400f50301445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473f90301404d756c7469417373657446696c74657200012c62656e6566696369617279d401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473f90301404d756c7469417373657446696c74657200011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e000e003445786368616e676541737365740c011067697665f90301404d756c7469417373657446696c74657200011077616e74c4012c4d756c746941737365747300011c6d6178696d616c35010110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473f90301404d756c7469417373657446696c74657200011c72657365727665d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473f90301404d756c7469417373657446696c74657200011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666ff50301445175657279526573706f6e7365496e666f000118617373657473f90301404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573cc01284d756c746941737365740001307765696768745f6c696d69742102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400bd03012458636d3c43616c6c3e0015002c536574417070656e6469780400bd03012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473c4012c4d756c74694173736574730001187469636b6574d401344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400c4012c4d756c7469417373657473001c002c45787065637441737365740400c4012c4d756c7469417373657473001d00304578706563744f726967696e0400f10301544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400cd0301504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400e90301384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666ff50301445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578e0010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72e0010c75333200013c6d696e5f63726174655f6d696e6f72e0010c753332002200505265706f72745472616e736163745374617475730400f50301445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400dc01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726be801244e6574776f726b496400012c64657374696e6174696f6ed80154496e746572696f724d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e002600244c6f636b41737365740801146173736574cc01284d756c74694173736574000120756e6c6f636b6572d401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574cc01284d756c74694173736574000118746172676574d401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574cc01284d756c746941737365740001146f776e6572d401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574cc01284d756c746941737365740001186c6f636b6572d401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f776974686472617735010110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742102012c5765696768744c696d6974000130636865636b5f6f726967696ef10301544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000c9030c2c73746167696e675f78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400c4012c4d756c74694173736574730001003c457865637574696f6e526573756c740400cd0301504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f0400d9030198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400e90301384d617962654572726f72436f646500050000cd0304184f7074696f6e04045401d1030108104e6f6e6500000010536f6d650400d1030000010000d1030000040810d50300d503102c73746167696e675f78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e73697665001400105472617004002c010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002401185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000d9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd03045300000400e50301185665633c543e0000dd030c2c73746167696e675f78636d0876332850616c6c6574496e666f0000180114696e646578e0010c7533320001106e616d65e1030180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d65e1030180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72e0010c7533320001146d696e6f72e0010c7533320001147061746368e0010c7533320000e1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e503000002dd0300e9030c2c73746167696e675f78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f720400ed03018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f720400ed03018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e00020000ed030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f10304184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d40000010000f5030c2c73746167696e675f78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e00012071756572795f696428011c517565727949640001286d61785f7765696768742401185765696768740000f903102c73746167696e675f78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400c4012c4d756c74694173736574730000001057696c640400fd03013857696c644d756c7469417373657400010000fd03102c73746167696e675f78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964d0011c4173736574496400010c66756e0104013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400e0010c75333200020030416c6c4f66436f756e7465640c01086964d0011c4173736574496400010c66756e0104013c57696c6446756e676962696c697479000114636f756e74e0010c753332000300000104102c73746167696e675f78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100000504082c73746167696e675f78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204000904015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304001904015076333a3a58636d3c52756e74696d6543616c6c3e0003000009040c2c73746167696e675f78636d0876320c58636d042c52756e74696d6543616c6c000004000d0401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00000d0400000211040011040c2c73746167696e675f78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736595030120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734502012c4d756c746941737365747300012c62656e6566696369617279050201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734502012c4d756c746941737365747300011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065a50301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c15040168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572e0010c7533320001406d61785f6d6573736167655f73697a65e0010c7533320001306d61785f6361706163697479e0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74e0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72e0010c75333200011873656e646572e0010c753332000124726563697069656e74e0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040009020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374050201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473ad0301404d756c7469417373657446696c7465720001286d61785f617373657473e0010c75333200012c62656e6566696369617279050201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473ad0301404d756c7469417373657446696c7465720001286d61785f617373657473e0010c75333200011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e000e003445786368616e6765417373657408011067697665ad0301404d756c7469417373657446696c74657200011c726563656976654502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473ad0301404d756c7469417373657446696c74657200011c72657365727665050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473ad0301404d756c7469417373657446696c74657200011064657374050201344d756c74694c6f636174696f6e00010c78636d8903011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374050201344d756c74694c6f636174696f6e000118617373657473ad0301404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d6974b903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000904014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804000904014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734502012c4d756c74694173736574730001187469636b6574050201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000015040c2c73746167696e675f78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e000019040c2c73746167696e675f78636d0876330c58636d041043616c6c000004001d0401585665633c496e737472756374696f6e3c43616c6c3e3e00001d0400000221040021040c2c73746167696e675f78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400c4012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400c4012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400c4012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365c9030120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572f10301544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473c4012c4d756c746941737365747300012c62656e6566696369617279d401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473c4012c4d756c746941737365747300011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64a50301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c1504014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572e0010c7533320001406d61785f6d6573736167655f73697a65e0010c7533320001306d61785f6361706163697479e0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74e0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72e0010c75333200011873656e646572e0010c753332000124726563697069656e74e0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400d80154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400f50301445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473f90301404d756c7469417373657446696c74657200012c62656e6566696369617279d401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473f90301404d756c7469417373657446696c74657200011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e000e003445786368616e676541737365740c011067697665f90301404d756c7469417373657446696c74657200011077616e74c4012c4d756c746941737365747300011c6d6178696d616c35010110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473f90301404d756c7469417373657446696c74657200011c72657365727665d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473f90301404d756c7469417373657446696c74657200011064657374d401344d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666ff50301445175657279526573706f6e7365496e666f000118617373657473f90301404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573cc01284d756c746941737365740001307765696768745f6c696d69742102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001904012458636d3c43616c6c3e0015002c536574417070656e64697804001904012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473c4012c4d756c74694173736574730001187469636b6574d401344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400c4012c4d756c7469417373657473001c002c45787065637441737365740400c4012c4d756c7469417373657473001d00304578706563744f726967696e0400f10301544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400cd0301504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400e90301384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666ff50301445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578e0010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72e0010c75333200013c6d696e5f63726174655f6d696e6f72e0010c753332002200505265706f72745472616e736163745374617475730400f50301445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400dc01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726be801244e6574776f726b496400012c64657374696e6174696f6ed80154496e746572696f724d756c74694c6f636174696f6e00010c78636dbd03011c58636d3c28293e002600244c6f636b41737365740801146173736574cc01284d756c74694173736574000120756e6c6f636b6572d401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574cc01284d756c74694173736574000118746172676574d401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574cc01284d756c746941737365740001146f776e6572d401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574cc01284d756c746941737365740001186c6f636b6572d401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f776974686472617735010110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742102012c5765696768744c696d6974000130636865636b5f6f726967696ef10301544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000025040c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29040c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e6465782c013c4f766572776569676874496e6465780001307765696768745f6c696d69742401185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c4070616c6c65745f696e666c6174696f6e1870616c6c65741043616c6c0404540001043c73746172745f696e666c6174696f6e04016c696e666c6174696f6e5f73746172745f72656c61795f626c6f636b100144426c6f636b4e756d626572466f723c543e00000480536565205b6050616c6c65743a3a73746172745f696e666c6174696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31040c3470616c6c65745f756e697175651870616c6c65741043616c6c040454000180446372656174655f636f6c6c656374696f6e10013c636f6c6c656374696f6e5f6e616d65350401d4426f756e6465645665633c7531362c20436f6e73745533323c4d41585f434f4c4c454354494f4e5f4e414d455f4c454e4754483e3e000158636f6c6c656374696f6e5f6465736372697074696f6e3d0401f0426f756e6465645665633c7531362c20436f6e73745533323c4d41585f434f4c4c454354494f4e5f4445534352495054494f4e5f4c454e4754483e3e000130746f6b656e5f707265666978410401c4426f756e6465645665633c75382c20436f6e73745533323c4d41585f544f4b454e5f5052454649585f4c454e4754483e3e0001106d6f646545040138436f6c6c656374696f6e4d6f646500000488536565205b6050616c6c65743a3a6372656174655f636f6c6c656374696f6e605d2e506372656174655f636f6c6c656374696f6e5f6578040110646174614904019c437265617465436f6c6c656374696f6e446174613c543a3a43726f73734163636f756e7449643e00010494536565205b6050616c6c65743a3a6372656174655f636f6c6c656374696f6e5f6578605d2e4864657374726f795f636f6c6c656374696f6e040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640002048c536565205b6050616c6c65743a3a64657374726f795f636f6c6c656374696f6e605d2e446164645f746f5f616c6c6f775f6c697374080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c616464726573734d040144543a3a43726f73734163636f756e74496400030488536565205b6050616c6c65743a3a6164645f746f5f616c6c6f775f6c697374605d2e5872656d6f76655f66726f6d5f616c6c6f775f6c697374080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c616464726573734d040144543a3a43726f73734163636f756e7449640004049c536565205b6050616c6c65743a3a72656d6f76655f66726f6d5f616c6c6f775f6c697374605d2e5c6368616e67655f636f6c6c656374696f6e5f6f776e6572080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000504a0536565205b6050616c6c65743a3a6368616e67655f636f6c6c656374696f6e5f6f776e6572605d2e506164645f636f6c6c656374696f6e5f61646d696e080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001306e65775f61646d696e5f69644d040144543a3a43726f73734163636f756e74496400060494536565205b6050616c6c65743a3a6164645f636f6c6c656374696f6e5f61646d696e605d2e5c72656d6f76655f636f6c6c656374696f6e5f61646d696e080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001286163636f756e745f69644d040144543a3a43726f73734163636f756e744964000704a0536565205b6050616c6c65743a3a72656d6f76655f636f6c6c656374696f6e5f61646d696e605d2e587365745f636f6c6c656374696f6e5f73706f6e736f72080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400012c6e65775f73706f6e736f72000130543a3a4163636f756e7449640008049c536565205b6050616c6c65743a3a7365745f636f6c6c656374696f6e5f73706f6e736f72605d2e4c636f6e6669726d5f73706f6e736f7273686970040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400090490536565205b6050616c6c65743a3a636f6e6669726d5f73706f6e736f7273686970605d2e6472656d6f76655f636f6c6c656374696f6e5f73706f6e736f72040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964000a04a8536565205b6050616c6c65743a3a72656d6f76655f636f6c6c656374696f6e5f73706f6e736f72605d2e2c6372656174655f6974656d0c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001146f776e65724d040144543a3a43726f73734163636f756e74496400011064617461c10401384372656174654974656d44617461000b0470536565205b6050616c6c65743a3a6372656174655f6974656d605d2e546372656174655f6d756c7469706c655f6974656d730c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001146f776e65724d040144543a3a43726f73734163636f756e7449640001286974656d735f64617461d104014c5665633c4372656174654974656d446174613e000c0498536565205b6050616c6c65743a3a6372656174655f6d756c7469706c655f6974656d73605d2e647365745f636f6c6c656374696f6e5f70726f70657274696573080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400012870726f70657274696573b50401345665633c50726f70657274793e000d04a8536565205b6050616c6c65743a3a7365745f636f6c6c656374696f6e5f70726f70657274696573605d2e7064656c6574655f636f6c6c656374696f6e5f70726f70657274696573080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400013470726f70657274795f6b657973d50401405665633c50726f70657274794b65793e000e04b4536565205b6050616c6c65743a3a64656c6574655f636f6c6c656374696f6e5f70726f70657274696573605d2e507365745f746f6b656e5f70726f706572746965730c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964000120746f6b656e5f6964d904011c546f6b656e496400012870726f70657274696573b50401345665633c50726f70657274793e000f0494536565205b6050616c6c65743a3a7365745f746f6b656e5f70726f70657274696573605d2e5c64656c6574655f746f6b656e5f70726f706572746965730c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964000120746f6b656e5f6964d904011c546f6b656e496400013470726f70657274795f6b657973d50401405665633c50726f70657274794b65793e001004a0536565205b6050616c6c65743a3a64656c6574655f746f6b656e5f70726f70657274696573605d2e787365745f746f6b656e5f70726f70657274795f7065726d697373696f6e73080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400015070726f70657274795f7065726d697373696f6e73a50401685665633c50726f70657274794b65795065726d697373696f6e3e001104bc536565205b6050616c6c65743a3a7365745f746f6b656e5f70726f70657274795f7065726d697373696f6e73605d2e606372656174655f6d756c7469706c655f6974656d735f6578080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011064617461dd04018c4372656174654974656d4578446174613c543a3a43726f73734163636f756e7449643e001204a4536565205b6050616c6c65743a3a6372656174655f6d756c7469706c655f6974656d735f6578605d2e687365745f7472616e73666572735f656e61626c65645f666c6167080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011476616c756535010110626f6f6c001304ac536565205b6050616c6c65743a3a7365745f7472616e73666572735f656e61626c65645f666c6167605d2e246275726e5f6974656d0c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e496400011476616c75651801107531323800140468536565205b6050616c6c65743a3a6275726e5f6974656d605d2e246275726e5f66726f6d100134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011066726f6d4d040144543a3a43726f73734163636f756e74496400011c6974656d5f6964d904011c546f6b656e496400011476616c75651801107531323800150468536565205b6050616c6c65743a3a6275726e5f66726f6d605d2e207472616e73666572100124726563697069656e744d040144543a3a43726f73734163636f756e744964000134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e496400011476616c75651801107531323800160464536565205b6050616c6c65743a3a7472616e73666572605d2e1c617070726f766510011c7370656e6465724d040144543a3a43726f73734163636f756e744964000134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e4964000118616d6f756e741801107531323800170460536565205b6050616c6c65743a3a617070726f7665605d2e30617070726f76655f66726f6d14011066726f6d4d040144543a3a43726f73734163636f756e744964000108746f4d040144543a3a43726f73734163636f756e744964000134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e4964000118616d6f756e741801107531323800180474536565205b6050616c6c65743a3a617070726f76655f66726f6d605d2e347472616e736665725f66726f6d14011066726f6d4d040144543a3a43726f73734163636f756e744964000124726563697069656e744d040144543a3a43726f73734163636f756e744964000134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e496400011476616c75651801107531323800190478536565205b6050616c6c65743a3a7472616e736665725f66726f6d605d2e547365745f636f6c6c656374696f6e5f6c696d697473080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001246e65775f6c696d69745d040140436f6c6c656374696f6e4c696d697473001a0498536565205b6050616c6c65743a3a7365745f636f6c6c656374696f6e5f6c696d697473605d2e687365745f636f6c6c656374696f6e5f7065726d697373696f6e73080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001386e65775f7065726d697373696f6e71040154436f6c6c656374696f6e5065726d697373696f6e73001b04ac536565205b6050616c6c65743a3a7365745f636f6c6c656374696f6e5f7065726d697373696f6e73605d2e2c7265706172746974696f6e0c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964000120746f6b656e5f6964d904011c546f6b656e4964000118616d6f756e7418011075313238001c0470536565205b6050616c6c65743a3a7265706172746974696f6e605d2e547365745f616c6c6f77616e63655f666f725f616c6c0c0134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640001206f70657261746f724d040144543a3a43726f73734163636f756e74496400011c617070726f766535010110626f6f6c001d0498536565205b6050616c6c65743a3a7365745f616c6c6f77616e63655f666f725f616c6c605d2e5c666f7263655f7265706169725f636f6c6c656374696f6e040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964001e04a0536565205b6050616c6c65743a3a666f7263655f7265706169725f636f6c6c656374696f6e605d2e44666f7263655f7265706169725f6974656d080134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e496400011c6974656d5f6964d904011c546f6b656e4964001f0488536565205b6050616c6c65743a3a666f7263655f7265706169725f6974656d605d2e04d85479706520616c69617320746f2050616c6c65742c20746f206265207573656420627920636f6e7374727563745f72756e74696d652e35040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014901045300000400390401185665633c543e000039040000024901003d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014901045300000400390401185665633c543e000041040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00004504083c75705f646174615f7374727563747338436f6c6c656374696f6e4d6f646500010c0c4e46540000002046756e6769626c650400080134446563696d616c506f696e747300010028526546756e6769626c65000200004904083c75705f646174615f7374727563747350437265617465436f6c6c656374696f6e44617461043843726f73734163636f756e744964014d04003001106d6f646545040138436f6c6c656374696f6e4d6f6465000118616363657373510401484f7074696f6e3c4163636573734d6f64653e0001106e616d6535040138436f6c6c656374696f6e4e616d6500012c6465736372697074696f6e3d040154436f6c6c656374696f6e4465736372697074696f6e000130746f6b656e5f70726566697841040154436f6c6c656374696f6e546f6b656e5072656669780001186c696d697473590401604f7074696f6e3c436f6c6c656374696f6e4c696d6974733e00012c7065726d697373696f6e736d0401744f7074696f6e3c436f6c6c656374696f6e5065726d697373696f6e733e000168746f6b656e5f70726f70657274795f7065726d697373696f6e7395040188436f6c6c656374696f6e50726f706572746965735065726d697373696f6e7356656300012870726f70657274696573a904015c436f6c6c656374696f6e50726f7065727469657356656300012861646d696e5f6c697374b904014c5665633c43726f73734163636f756e7449643e00013c70656e64696e675f73706f6e736f72bd0401584f7074696f6e3c43726f73734163636f756e7449643e000114666c6167736902013c436f6c6c656374696f6e466c61677300004d040c2870616c6c65745f65766d1c6163636f756e745c426173696343726f73734163636f756e7449645265707204244163636f756e744964010001082453756273747261746504000001244163636f756e74496400000020457468657265756d0400650301104831363000010000510404184f7074696f6e0404540155040108104e6f6e6500000010536f6d650400550400000100005504083c75705f646174615f73747275637473284163636573734d6f6465000108184e6f726d616c00000024416c6c6f774c69737400010000590404184f7074696f6e040454015d040108104e6f6e6500000010536f6d6504005d0400000100005d04083c75705f646174615f7374727563747340436f6c6c656374696f6e4c696d69747300002401746163636f756e745f746f6b656e5f6f776e6572736869705f6c696d69742503012c4f7074696f6e3c7533323e00014c73706f6e736f7265645f646174615f73697a652503012c4f7074696f6e3c7533323e00016473706f6e736f7265645f646174615f726174655f6c696d69746104016c4f7074696f6e3c53706f6e736f72696e67526174654c696d69743e00012c746f6b656e5f6c696d69742503012c4f7074696f6e3c7533323e00016073706f6e736f725f7472616e736665725f74696d656f75742503012c4f7074696f6e3c7533323e00015c73706f6e736f725f617070726f76655f74696d656f75742503012c4f7074696f6e3c7533323e0001486f776e65725f63616e5f7472616e73666572690401304f7074696f6e3c626f6f6c3e0001446f776e65725f63616e5f64657374726f79690401304f7074696f6e3c626f6f6c3e0001447472616e73666572735f656e61626c6564690401304f7074696f6e3c626f6f6c3e0000610404184f7074696f6e0404540165040108104e6f6e6500000010536f6d650400650400000100006504083c75705f646174615f737472756374734c53706f6e736f72696e67526174654c696d69740001084853706f6e736f72696e6744697361626c656400000018426c6f636b73040010010c75333200010000690404184f7074696f6e0404540135010108104e6f6e6500000010536f6d650400350100000100006d0404184f7074696f6e0404540171040108104e6f6e6500000010536f6d650400710400000100007104083c75705f646174615f7374727563747354436f6c6c656374696f6e5065726d697373696f6e7300000c0118616363657373510401484f7074696f6e3c4163636573734d6f64653e0001246d696e745f6d6f6465690401304f7074696f6e3c626f6f6c3e00011c6e657374696e67750401684f7074696f6e3c4e657374696e675065726d697373696f6e733e0000750404184f7074696f6e0404540179040108104e6f6e6500000010536f6d650400790400000100007904083c75705f646174615f73747275637473484e657374696e675065726d697373696f6e7300000c012c746f6b656e5f6f776e657235010110626f6f6c000140636f6c6c656374696f6e5f61646d696e35010110626f6f6c000128726573747269637465647d0401684f7074696f6e3c4f776e6572526573747269637465645365743e00007d0404184f7074696f6e0404540181040108104e6f6e6500000010536f6d650400810400000100008104083c75705f646174615f73747275637473484f776e657252657374726963746564536574000004008504015c4f776e657252657374726963746564536574496e6e6572000085040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540189040453000004008d04012c42547265655365743c543e00008904083c75705f646174615f7374727563747330436f6c6c656374696f6e49640000040010010c75333200008d04042042547265655365740404540189040004009104000000910400000289040095040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019904045300000400a50401185665633c543e00009904083c75705f646174615f737472756374735450726f70657274794b65795065726d697373696f6e000008010c6b65799d04012c50726f70657274794b65790001287065726d697373696f6ea104014850726f70657274795065726d697373696f6e00009d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000a104083c75705f646174615f737472756374734850726f70657274795065726d697373696f6e00000c011c6d757461626c6535010110626f6f6c000140636f6c6c656374696f6e5f61646d696e35010110626f6f6c00012c746f6b656e5f6f776e657235010110626f6f6c0000a504000002990400a9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad04045300000400b50401185665633c543e0000ad04083c75705f646174615f737472756374732050726f7065727479000008010c6b65799d04012c50726f70657274794b657900011476616c7565b104013450726f706572747956616c75650000b1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b504000002ad0400b9040000024d0400bd0404184f7074696f6e040454014d040108104e6f6e6500000010536f6d6504004d040000010000c104083c75705f646174615f73747275637473384372656174654974656d4461746100010c0c4e46540400c50401344372656174654e6674446174610000002046756e6769626c650400c904014843726561746546756e6769626c654461746100010028526546756e6769626c650400cd040150437265617465526546756e6769626c654461746100020000c504083c75705f646174615f73747275637473344372656174654e667444617461000004012870726f70657274696573a904015c436f6c6c656374696f6e50726f706572746965735665630000c904083c75705f646174615f737472756374734843726561746546756e6769626c6544617461000004011476616c7565180110753132380000cd04083c75705f646174615f7374727563747350437265617465526546756e6769626c654461746100000801187069656365731801107531323800012870726f70657274696573a904015c436f6c6c656374696f6e50726f706572746965735665630000d104000002c10400d5040000029d0400d904083c75705f646174615f737472756374731c546f6b656e49640000040010010c7533320000dd04083c75705f646174615f73747275637473404372656174654974656d457844617461043843726f73734163636f756e744964014d0401100c4e46540400e104012d01426f756e6465645665633c4372656174654e66744578446174613c43726f73734163636f756e7449643e2c20436f6e73745533323c0a4d41585f4954454d535f5045525f42415443483e3e0000002046756e6769626c650400ed04011101426f756e64656442547265654d61703c43726f73734163636f756e7449642c20753132382c20436f6e73745533323c4d41585f4954454d535f5045525f42415443483e3e0001005c526566756e6769626c654d756c7469706c654974656d730400fd04016501426f756e6465645665633c437265617465526566756e6769626c65457853696e676c654f776e65723c43726f73734163636f756e7449643e2c20436f6e73745533323c0a4d41585f4954454d535f5045525f42415443483e3e00020060526566756e6769626c654d756c7469706c654f776e6572730400090501c0437265617465526566756e6769626c6545784d756c7469706c654f776e6572733c43726f73734163636f756e7449643e00030000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e504045300000400e90401185665633c543e0000e504083c75705f646174615f737472756374733c4372656174654e6674457844617461043843726f73734163636f756e744964014d040008012870726f70657274696573a904015c436f6c6c656374696f6e50726f706572746965735665630001146f776e65724d04013843726f73734163636f756e7449640000e904000002e50400ed040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b014d0404560118045300000400f104013842547265654d61703c4b2c20563e0000f104042042547265654d617008044b014d0404560118000400f504000000f504000002f90400f904000004084d041800fd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010105045300000400050501185665633c543e00000105083c75705f646174615f7374727563747374437265617465526566756e6769626c65457853696e676c654f776e6572043843726f73734163636f756e744964014d04000c0110757365724d04013843726f73734163636f756e7449640001187069656365731801107531323800012870726f70657274696573a904015c436f6c6c656374696f6e50726f70657274696573566563000005050000020105000905083c75705f646174615f7374727563747380437265617465526566756e6769626c6545784d756c7469706c654f776e657273043843726f73734163636f756e744964014d04000801147573657273ed04011101426f756e64656442547265654d61703c43726f73734163636f756e7449642c20753132382c20436f6e73745533323c4d41585f4954454d535f5045525f42415443483e3e00012870726f70657274696573a904015c436f6c6c656374696f6e50726f7065727469657356656300000d050c5070616c6c65745f636f6e66696775726174696f6e1870616c6c65741043616c6c040454000118987365745f7765696768745f746f5f6665655f636f656666696369656e745f6f76657272696465040114636f6566661105012c4f7074696f6e3c7536343e000004dc536565205b6050616c6c65743a3a7365745f7765696768745f746f5f6665655f636f656666696369656e745f6f76657272696465605d2e687365745f6d696e5f6761735f70726963655f6f76657272696465040114636f6566661105012c4f7074696f6e3c7536343e000104ac536565205b6050616c6c65743a3a7365745f6d696e5f6761735f70726963655f6f76657272696465605d2ea07365745f6170705f70726f6d6f74696f6e5f636f6e66696775726174696f6e5f6f76657272696465040134636f6e66696775726174696f6e150501b041707050726f6d6f74696f6e436f6e66696775726174696f6e3c426c6f636b4e756d626572466f723c543e3e000304e4536565205b6050616c6c65743a3a7365745f6170705f70726f6d6f74696f6e5f636f6e66696775726174696f6e5f6f76657272696465605d2ea07365745f636f6c6c61746f725f73656c656374696f6e5f646573697265645f636f6c6c61746f727304010c6d61782503012c4f7074696f6e3c7533323e000404e4536565205b6050616c6c65743a3a7365745f636f6c6c61746f725f73656c656374696f6e5f646573697265645f636f6c6c61746f7273605d2e8c7365745f636f6c6c61746f725f73656c656374696f6e5f6c6963656e73655f626f6e64040118616d6f756e74250501784f7074696f6e3c3c5420617320436f6e6669673e3a3a42616c616e63653e000504d0536565205b6050616c6c65743a3a7365745f636f6c6c61746f725f73656c656374696f6e5f6c6963656e73655f626f6e64605d2e947365745f636f6c6c61746f725f73656c656374696f6e5f6b69636b5f7468726573686f6c640401247468726573686f6c64250301644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000604d8536565205b6050616c6c65743a3a7365745f636f6c6c61746f725f73656c656374696f6e5f6b69636b5f7468726573686f6c64605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e110504184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100001505085070616c6c65745f636f6e66696775726174696f6e6441707050726f6d6f74696f6e436f6e66696775726174696f6e042c426c6f636b4e756d626572011000100158726563616c63756c6174696f6e5f696e74657276616c2503014c4f7074696f6e3c426c6f636b4e756d6265723e00014070656e64696e675f696e74657276616c2503014c4f7074696f6e3c426c6f636b4e756d6265723e00013c696e74657276616c5f696e636f6d651905013c4f7074696f6e3c50657262696c6c3e00016c6d61785f7374616b6572735f7065725f63616c63756c6174696f6e210501284f7074696f6e3c75383e0000190504184f7074696f6e040454011d050108104e6f6e6500000010536f6d6504001d0500000100001d050c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000210504184f7074696f6e04045401080108104e6f6e6500000010536f6d650400080000010000250504184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000029050c4070616c6c65745f7374727563747572651870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c5070616c6c65745f6170705f70726f6d6f74696f6e1870616c6c65741043616c6c040454000128447365745f61646d696e5f6164647265737304011461646d696e4d040144543a3a43726f73734163636f756e74496400000488536565205b6050616c6c65743a3a7365745f61646d696e5f61646472657373605d2e147374616b65040118616d6f756e7418013042616c616e63654f663c543e00010458536565205b6050616c6c65743a3a7374616b65605d2e2c756e7374616b655f616c6c00020470536565205b6050616c6c65743a3a756e7374616b655f616c6c605d2e3c756e7374616b655f7061727469616c040118616d6f756e7418013042616c616e63654f663c543e00080480536565205b6050616c6c65743a3a756e7374616b655f7061727469616c605d2e4873706f6e736f725f636f6c6c656374696f6e040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e49640003048c536565205b6050616c6c65743a3a73706f6e736f725f636f6c6c656374696f6e605d2e6873746f705f73706f6e736f72696e675f636f6c6c656374696f6e040134636f6c6c656374696f6e5f696489040130436f6c6c656374696f6e4964000404ac536565205b6050616c6c65743a3a73746f705f73706f6e736f72696e675f636f6c6c656374696f6e605d2e4073706f6e736f725f636f6e747261637404012c636f6e74726163745f6964650301104831363000050484536565205b6050616c6c65743a3a73706f6e736f725f636f6e7472616374605d2e6073746f705f73706f6e736f72696e675f636f6e747261637404012c636f6e74726163745f69646503011048313630000604a4536565205b6050616c6c65743a3a73746f705f73706f6e736f72696e675f636f6e7472616374605d2e387061796f75745f7374616b6572730401387374616b6572735f6e756d626572210501284f7074696f6e3c75383e0007047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e34666f7263655f756e7374616b6504013870656e64696e675f626c6f636b73310501585665633c426c6f636b4e756d626572466f723c543e3e00090478536565205b6050616c6c65743a3a666f7263655f756e7374616b65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3105000002100035050c5470616c6c65745f666f726569676e5f617373657473186d6f64756c651043616c6c0404540001085872656769737465725f666f726569676e5f61737365740c01146f776e6572000130543a3a4163636f756e7449640001206c6f636174696f6e0102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0001206d6574616461746139050180426f783c41737365744d657461646174613c42616c616e63654f663c543e3e3e0000049c536565205b6050616c6c65743a3a72656769737465725f666f726569676e5f6173736574605d2e507570646174655f666f726569676e5f61737365740c0140666f726569676e5f61737365745f6964100138466f726569676e417373657449640001206c6f636174696f6e0102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0001206d6574616461746139050180426f783c41737365744d657461646174613c42616c616e63654f663c543e3e3e00010494536565205b6050616c6c65743a3a7570646174655f666f726569676e5f6173736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39050c5470616c6c65745f666f726569676e5f617373657473186d6f64756c653441737365744d65746164617461041c42616c616e63650118001001106e616d653d05012441737365744e616d6500011873796d626f6c4105012c417373657453796d626f6c000120646563696d616c73080108753800013c6d696e696d616c5f62616c616e636518011c42616c616e636500003d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000041050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000045050c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c61646472657373650301104831363000011476616c756518013042616c616e63654f663c543e00000464536565205b6050616c6c65743a3a7769746864726177605d2e1063616c6c240118736f7572636565030110483136300001187461726765746503011048313630000114696e70757434011c5665633c75383e00011476616c756549050110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f67617349050110553235360001606d61785f7072696f726974795f6665655f7065725f676173510501304f7074696f6e3c553235363e0001146e6f6e6365510501304f7074696f6e3c553235363e00012c6163636573735f6c697374550501585665633c28483136302c205665633c483235363e293e00010454536565205b6050616c6c65743a3a63616c6c605d2e18637265617465200118736f757263656503011048313630000110696e697434011c5665633c75383e00011476616c756549050110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f67617349050110553235360001606d61785f7072696f726974795f6665655f7065725f676173510501304f7074696f6e3c553235363e0001146e6f6e6365510501304f7074696f6e3c553235363e00012c6163636573735f6c697374550501585665633c28483136302c205665633c483235363e293e0002045c536565205b6050616c6c65743a3a637265617465605d2e1c63726561746532240118736f757263656503011048313630000110696e697434011c5665633c75383e00011073616c743001104832353600011476616c756549050110553235360001246761735f6c696d69742c010c75363400013c6d61785f6665655f7065725f67617349050110553235360001606d61785f7072696f726974795f6665655f7065725f676173510501304f7074696f6e3c553235363e0001146e6f6e6365510501304f7074696f6e3c553235363e00012c6163636573735f6c697374550501585665633c28483136302c205665633c483235363e293e00030460536565205b6050616c6c65743a3a63726561746532605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4905083c7072696d69746976655f74797065731055323536000004004d0501205b7536343b20345d00004d05000003040000002c00510504184f7074696f6e0404540149050108104e6f6e6500000010536f6d65040049050000010000550500000259050059050000040865035d05005d05000002300061050c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e6505012c5472616e73616374696f6e00000464536565205b6050616c6c65743a3a7472616e73616374605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e65050c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400690501444c65676163795472616e73616374696f6e0000001c45495032393330040079050148454950323933305472616e73616374696f6e0001001c45495031353539040085050148454950313535395472616e73616374696f6e0002000069050c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e636549050110553235360001246761735f707269636549050110553235360001246761735f6c696d69744905011055323536000118616374696f6e6d0501445472616e73616374696f6e416374696f6e00011476616c75654905011055323536000114696e70757434011442797465730001247369676e6174757265710501505472616e73616374696f6e5369676e617475726500006d050c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04006503011048313630000000184372656174650001000071050c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476750501545472616e73616374696f6e5265636f76657279496400010472300110483235360001047330011048323536000075050c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f766572794964000004002c010c753634000079050c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f69642c010c7536340001146e6f6e636549050110553235360001246761735f707269636549050110553235360001246761735f6c696d69744905011055323536000118616374696f6e6d0501445472616e73616374696f6e416374696f6e00011476616c75654905011055323536000114696e707574340114427974657300012c6163636573735f6c6973747d0501284163636573734c6973740001306f64645f795f70617269747935010110626f6f6c0001047230011048323536000104733001104832353600007d0500000281050081050c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573736503011c4164647265737300013073746f726167655f6b6579735d0501245665633c483235363e000085050c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f69642c010c7536340001146e6f6e636549050110553235360001606d61785f7072696f726974795f6665655f7065725f676173490501105532353600013c6d61785f6665655f7065725f67617349050110553235360001246761735f6c696d69744905011055323536000118616374696f6e6d0501445472616e73616374696f6e416374696f6e00011476616c75654905011055323536000114696e707574340114427974657300012c6163636573735f6c6973747d0501284163636573734c6973740001306f64645f795f70617269747935010110626f6f6c00010472300110483235360001047330011048323536000089050c6c70616c6c65745f65766d5f636f6e74726163745f68656c706572731870616c6c65741043616c6c040454000104706d6967726174655f66726f6d5f73656c665f73706f6e736f72696e670401246164647265737365738d0501245665633c483136303e000004b4536565205b6050616c6c65743a3a6d6967726174655f66726f6d5f73656c665f73706f6e736f72696e67605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d0500000265030091050c5070616c6c65745f65766d5f6d6967726174696f6e1870616c6c65741043616c6c04045400011814626567696e04011c61646472657373650301104831363000000458536565205b6050616c6c65743a3a626567696e605d2e207365745f6461746108011c61646472657373650301104831363000011064617461950501445665633c28483235362c2048323536293e00010464536565205b6050616c6c65743a3a7365745f64617461605d2e1866696e69736808011c616464726573736503011048313630000110636f646534011c5665633c75383e0002045c536565205b6050616c6c65743a3a66696e697368605d2e3c696e736572745f6574685f6c6f67730401106c6f67739d0501485665633c657468657265756d3a3a4c6f673e00030480536565205b6050616c6c65743a3a696e736572745f6574685f6c6f6773605d2e34696e736572745f6576656e74730401186576656e74736d0101305665633c5665633c75383e3e00040478536565205b6050616c6c65743a3a696e736572745f6576656e7473605d2e4072656d6f76655f726d726b5f6461746100050484536565205b6050616c6c65743a3a72656d6f76655f726d726b5f64617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95050000029905009905000004083030009d05000002a10500a1050c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573736503011048313630000118746f706963735d0501245665633c483235363e0001106461746134011442797465730000a5050c4870616c6c65745f6d61696e74656e616e63651870616c6c65741043616c6c04045400010818656e61626c650000045c536565205b6050616c6c65743a3a656e61626c65605d2e1c64697361626c6500010460536565205b6050616c6c65743a3a64697361626c65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9050c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73ad05017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e6465784901010c75313600011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c73ad05017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e45030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c73ad05017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c5d01017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687424011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead050000025d0100b1050c4470616c6c65745f746573745f7574696c731870616c6c65741043616c6c04045400011818656e61626c6500000454536565206050616c6c65743a3a656e61626c65602e387365745f746573745f76616c756504011476616c756510010c75333200010474536565206050616c6c65743a3a7365745f746573745f76616c7565602e6c7365745f746573745f76616c75655f616e645f726f6c6c6261636b04011476616c756510010c753332000204a8536565206050616c6c65743a3a7365745f746573745f76616c75655f616e645f726f6c6c6261636b602e38696e635f746573745f76616c756500030474536565206050616c6c65743a3a696e635f746573745f76616c7565602e346a7573745f74616b655f66656500040470536565206050616c6c65743a3a6a7573745f74616b655f666565602e2462617463685f616c6c04011463616c6c73ad05017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050460536565206050616c6c65743a3a62617463685f616c6c602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b9050c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b790301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00010869648801404f7074696f6e3c5461736b4e616d653e000118726573756c74a801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b790301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00010869648801404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b790301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00010869648801404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b790301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00010869648801404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ebd050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c1001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001146572726f72d503012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f6861736804011c58636d48617368000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572ad01011850617261496400011c73656e745f617410014052656c6179426c6f636b4e756d626572000114696e6465782c013c4f766572776569676874496e6465780001207265717569726564240118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e6465782c013c4f766572776569676874496e646578000110757365642401185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1050c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d7074656404011c6f7574636f6d65c505015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ed401344d756c74694c6f636174696f6e00012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e00011c6d657373616765bd03011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f69642c011c51756572794964000120726573706f6e7365c9030120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f69642c011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f69642c011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687424011857656967687400014c6d61785f62756467657465645f77656967687424011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f69642c011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f69642c011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c5175657279496400014465787065637465645f6c6f636174696f6ef10301544f7074696f6e3c4d756c74694c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f69642c011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368300110483235360001186f726967696ed401344d756c74694c6f636174696f6e0001186173736574734102015056657273696f6e65644d756c7469417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374c4012c4d756c74694173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ed401344d756c74694c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001146572726f72d503012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6e0102015856657273696f6e65644d756c74694c6f636174696f6e00012071756572795f69642c011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ed401344d756c74694c6f636174696f6e00012071756572795f69642c011c5175657279496400014065787065637465645f71756572696572d401344d756c74694c6f636174696f6e0001506d617962655f61637475616c5f71756572696572f10301544f7074696f6e3c4d756c74694c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e000110636f7374c4012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e000110636f7374c4012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ed401344d756c74694c6f636174696f6e000110636f7374c4012c4d756c74694173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e67d401344d756c74694c6f636174696f6e00011066656573c4012c4d756c7469417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368300110483235360001186f726967696ed401344d756c74694c6f636174696f6e0001186173736574734102015056657273696f6e65644d756c7469417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e2061737365742074726170047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c505102c73746167696e675f78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040024011857656967687400000028496e636f6d706c65746508002401185765696768740000d50301144572726f72000100144572726f720400d50301144572726f7200020000c9050c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000c505011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cd050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401306d6573736167655f6861736804011c58636d4861736800000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011c6f7574636f6d65c505011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001406f7665727765696768745f696e6465782c013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e6465782c013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401306d6573736167655f6861736804011c58636d48617368000604d0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d657373616765732077617320726561636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d1050c5070616c6c65745f636f6e66696775726174696f6e1870616c6c6574144576656e7404045400010c4c4e657744657369726564436f6c6c61746f7273040144646573697265645f636f6c6c61746f72732503012c4f7074696f6e3c7533323e000000584e6577436f6c6c61746f724c6963656e7365426f6e64040124626f6e645f636f7374250501484f7074696f6e3c543a3a42616c616e63653e000100604e6577436f6c6c61746f724b69636b5468726573686f6c640401406c656e6774685f696e5f626c6f636b73250301644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5050c3470616c6c65745f636f6d6d6f6e1870616c6c6574144576656e7404045400015844436f6c6c656374696f6e437265617465640c0089040130436f6c6c656374696f6e496404dc476c6f62616c6c7920756e69717565206964656e746966696572206f66206e65776c79206372656174656420636f6c6c656374696f6e2e000801087538049c5b60436f6c6c656374696f6e4d6f6465605d20636f6e76657274656420696e746f205f75385f2e00000130543a3a4163636f756e7449640444436f6c6c656374696f6e206f776e65722e0004684e657720636f6c6c656374696f6e2077617320637265617465644c436f6c6c656374696f6e44657374726f796564040089040130436f6c6c656374696f6e496404a4476c6f62616c6c7920756e69717565206964656e746966696572206f6620636f6c6c656374696f6e2e0104704e657720636f6c6c656374696f6e207761732064657374726f7965642c4974656d43726561746564100089040130436f6c6c656374696f6e496404b04964206f662074686520636f6c6c656374696f6e207768657265206974656d2077617320637265617465642e00d904011c546f6b656e496404b04964206f6620616e206974656d2e20556e697175652077697468696e2074686520636f6c6c656374696f6e2e004d040144543a3a43726f73734163636f756e744964046c4f776e6572206f66206e65776c792063726561746564206974656d00180110753132380440416c77617973203120666f72204e46540204544e6577206974656d2077617320637265617465642e344974656d44657374726f796564100089040130436f6c6c656374696f6e496404b84964206f662074686520636f6c6c656374696f6e207768657265206974656d207761732064657374726f7965642e00d904011c546f6b656e496404644964656e746966696572206f66206275726e6564204e46542e004d040144543a3a43726f73734163636f756e744964049057686963682075736572206861732064657374726f7965642069747320746f6b656e732e001801107531323804c8416d6f756e74206f6620746f6b656e207069656365732064657374726f65642e20416c77617973203120666f72204e46542e03046c436f6c6c656374696f6e206974656d20776173206275726e65642e205472616e73666572140089040130436f6c6c656374696f6e496404a44964206f6620636f6c6c656374696f6e20746f207768696368206974656d2069732062656c6f6e672e00d904011c546f6b656e496404384964206f6620616e206974656d2e004d040144543a3a43726f73734163636f756e744964045c4f726967696e616c206f776e6572206f66206974656d2e004d040144543a3a43726f73734163636f756e74496404484e6577206f776e6572206f66206974656d2e001801107531323804d0416d6f756e74206f6620746f6b656e20706965636573207472616e7366657265642e20416c77617973203120666f72204e46542e0404504974656d20776173207472616e7366657272656420417070726f766564140089040130436f6c6c656374696f6e496404a44964206f6620636f6c6c656374696f6e20746f207768696368206974656d2069732062656c6f6e672e00d904011c546f6b656e496404384964206f6620616e206974656d2e004d040144543a3a43726f73734163636f756e744964045c4f726967696e616c206f776e6572206f66206974656d2e004d040144543a3a43726f73734163636f756e7449640498496420666f722077686963682074686520617070726f76616c20776173206772616e7465642e001801107531323804d0416d6f756e74206f6620746f6b656e20706965636573207472616e7366657265642e20416c77617973203120666f72204e46542e05041101416d6f756e7420706965636573206f6620746f6b656e206f776e6564206279206073656e646572602077617320617070726f76656420666f7220607370656e646572602e38417070726f766564466f72416c6c100089040130436f6c6c656374696f6e496404a44964206f6620636f6c6c656374696f6e20746f207768696368206974656d2069732062656c6f6e672e004d040144543a3a43726f73734163636f756e74496404484f776e6572206f6620612077616c6c65742e004d040144543a3a43726f73734163636f756e74496404d0496420666f72207768696368206f70657261746f722073746174757320776173206772616e746564206f72207265776f6b65642e0035010110626f6f6c04984973206f70657261746f7220737461747573206772616e746564206f72207265766f6b65643f0604050141206073656e6465726020617070726f766573206f7065726174696f6e73206f6e20616c6c206f776e656420746f6b656e7320666f7220607370656e646572602e54436f6c6c656374696f6e50726f7065727479536574080089040130436f6c6c656374696f6e496404c04964206f6620636f6c6c656374696f6e20746f2077686963682070726f706572747920686173206265656e207365742e009d04012c50726f70657274794b657904685468652070726f7065727479207468617420776173207365742e0704c054686520636f6c6c6574696f6e2070726f706572747920686173206265656e206164646564206f72206564697465642e64436f6c6c656374696f6e50726f706572747944656c65746564080089040130436f6c6c656374696f6e496404d04964206f6620636f6c6c656374696f6e20746f2077686963682070726f706572747920686173206265656e2064656c657465642e009d04012c50726f70657274794b657904785468652070726f70657274792074686174207761732064656c657465642e0804785468652070726f706572747920686173206265656e2064656c657465642e40546f6b656e50726f70657274795365740c0089040130436f6c6c656374696f6e496404f84964656e746966696572206f662074686520636f6c6c656374696f6e2077686f736520746f6b656e20686173207468652070726f7065727479207365742e00d904011c546f6b656e496404a454686520746f6b656e20666f72207768696368207468652070726f706572747920776173207365742e009d04012c50726f70657274794b657904685468652070726f7065727479207468617420776173207365742e0904b054686520746f6b656e2070726f706572747920686173206265656e206164646564206f72206564697465642e50546f6b656e50726f706572747944656c657465640c0089040130436f6c6c656374696f6e49640409014964656e746966696572206f662074686520636f6c6c656374696f6e2077686f736520746f6b656e20686173207468652070726f70657274792064656c657465642e00d904011c546f6b656e496404b454686520746f6b656e20666f72207768696368207468652070726f7065727479207761732064656c657465642e009d04012c50726f70657274794b657904785468652070726f70657274792074686174207761732064656c657465642e0a049054686520746f6b656e2070726f706572747920686173206265656e2064656c657465642e5450726f70657274795065726d697373696f6e536574080089040130436f6c6c656374696f6e496404ec4944206f6620636f6c6c656374696f6e20746f2077686963682070726f7065727479207065726d697373696f6e20686173206265656e207365742e009d04012c50726f70657274794b657904945468652070726f7065727479207065726d697373696f6e207468617420776173207365742e0b04ec54686520746f6b656e2070726f7065727479207065726d697373696f6e206f66206120636f6c6c656374696f6e20686173206265656e207365742e54416c6c6f774c697374416464726573734164646564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e004d040144543a3a43726f73734163636f756e744964047441646472657373206f6620746865206164646564206163636f756e742e0c0490416464726573732077617320616464656420746f2074686520616c6c6f77206c6973742e5c416c6c6f774c6973744164647265737352656d6f766564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e004d040144543a3a43726f73734163636f756e744964047c41646472657373206f66207468652072656d6f766564206163636f756e742e0d04a041646472657373207761732072656d6f7665642066726f6d2074686520616c6c6f77206c6973742e50436f6c6c656374696f6e41646d696e4164646564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e004d040144543a3a43726f73734163636f756e744964043841646d696e20616464726573732e0e046c436f6c6c656374696f6e2061646d696e207761732061646465642e58436f6c6c656374696f6e41646d696e52656d6f766564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e004d040144543a3a43726f73734163636f756e744964045852656d6f7665642061646d696e20616464726573732e0f0474436f6c6c656374696f6e2061646d696e207761732072656d6f7665642e48436f6c6c656374696f6e4c696d6974536574040089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e10046c436f6c6c656374696f6e206c696d6974732077657265207365742e58436f6c6c656374696f6e4f776e65724368616e676564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e00000130543a3a4163636f756e74496404484e6577206f776e657220616464726573732e110474436f6c6c656374696f6e206f776e656420776173206368616e6765642e5c436f6c6c656374696f6e5065726d697373696f6e536574040089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e120480436f6c6c656374696f6e207065726d697373696f6e732077657265207365742e50436f6c6c656374696f6e53706f6e736f72536574080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e00000130543a3a4163636f756e74496404504e65772073706f6e736f7220616464726573732e13046c436f6c6c656374696f6e2073706f6e736f7220776173207365742e5053706f6e736f7273686970436f6e6669726d6564080089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e00000130543a3a4163636f756e74496404504e65772073706f6e736f7220616464726573732e1404604e65772073706f6e736f722077617320636f6e6669726d2e60436f6c6c656374696f6e53706f6e736f7252656d6f766564040089040130436f6c6c656374696f6e496404784944206f662074686520616666656374656420636f6c6c656374696f6e2e15047c436f6c6c656374696f6e2073706f6e736f72207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d9050c4070616c6c65745f7374727563747572651870616c6c6574144576656e740404540001042045786563757465640400a801384469737061746368526573756c740000049445786563757465642063616c6c206f6e20626568616c66206f662074686520746f6b656e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd050c5070616c6c65745f6170705f70726f6d6f74696f6e1870616c6c6574144576656e74040454000110505374616b696e67526563616c63756c6174696f6e0c00000130543a3a4163636f756e7449640458416e20726563616c63756c61746564207374616b65720018013042616c616e63654f663c543e049042617365206f6e20776869636820696e7465726573742069732063616c63756c617465640018013042616c616e63654f663c543e0468416d6f756e74206f66206163637275656420696e74657265737400188c5374616b696e6720726563616c63756c6174696f6e2077617320706572666f726d6564002c2320417267756d656e74738c2a204163636f756e7449643a206163636f756e74206f6620746865207374616b65722e782a2042616c616e6365203a20726563616c63756c6174696f6e2062617365602a2042616c616e6365203a20746f74616c20696e636f6d65145374616b650800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000114545374616b696e672077617320706572666f726d6564002c2320417267756d656e7473882a204163636f756e7449643a206163636f756e74206f6620746865207374616b6572682a2042616c616e6365203a207374616b696e6720616d6f756e741c556e7374616b650800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0002145c556e7374616b696e672077617320706572666f726d6564002c2320417267756d656e7473882a204163636f756e7449643a206163636f756e74206f6620746865207374616b6572702a2042616c616e6365203a20756e7374616b696e6720616d6f756e742053657441646d696e0400000130543a3a4163636f756e744964000310445468652061646d696e2077617320736574002c2320417267756d656e7473a42a204163636f756e7449643a206163636f756e742061646472657373206f66207468652061646d696e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e1050c5470616c6c65745f666f726569676e5f617373657473186d6f64756c65144576656e7404045400011058466f726569676e4173736574526567697374657265640c012061737365745f6964100138466f726569676e4173736574496400013461737365745f61646472657373d401344d756c74694c6f636174696f6e0001206d657461646174613905016c41737365744d657461646174613c42616c616e63654f663c543e3e0000047454686520666f726569676e20617373657420726567697374657265642e4c466f726569676e4173736574557064617465640c012061737365745f6964100138466f726569676e4173736574496400013461737365745f61646472657373d401344d756c74694c6f636174696f6e0001206d657461646174613905016c41737365744d657461646174613c42616c616e63654f663c543e3e0001046854686520666f726569676e20617373657420757064617465642e3c41737365745265676973746572656408012061737365745f69640d01011c417373657449640001206d657461646174613905016c41737365744d657461646174613c42616c616e63654f663c543e3e0002045454686520617373657420726567697374657265642e3041737365745570646174656408012061737365745f69640d01011c417373657449640001206d657461646174613905016c41737365744d657461646174613c42616c616e63654f663c543e3e0003044854686520617373657420757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e5050c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f67a105010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573736503011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373650301104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573736503011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373650301104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e9050c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d6503011048313630000108746f65030110483136300001407472616e73616374696f6e5f686173683001104832353600012c657869745f726561736f6eed05012845786974526561736f6e00012865787472615f6461746134011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed050c2065766d5f636f7265146572726f722845786974526561736f6e0001101c537563636565640400f105012c4578697453756363656564000000144572726f720400f5050124457869744572726f72000100185265766572740400050601284578697452657665727400020014466174616c04000906012445786974466174616c00030000f1050c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e656400010020537569636964656400020000f5050c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400f90501184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f746865720400fd050144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e0000f9050c2065766d5f636f7265186f70636f6465184f70636f64650000040008010875380000fd05040c436f7704045401010600040001060000000106000005020005060c2065766d5f636f7265146572726f7228457869745265766572740001042052657665727465640000000009060c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c0400f5050124457869744572726f72000200144f746865720400fd050144436f773c277374617469632c207374723e000300000d060c6c70616c6c65745f65766d5f636f6e74726163745f68656c706572731870616c6c6574144576656e7404045400010c48436f6e747261637453706f6e736f725365740800650301104831363004b0436f6e74726163742061646472657373206f662074686520616666656374656420636f6c6c656374696f6e2e00000130543a3a4163636f756e74496404504e65772073706f6e736f7220616464726573732e000464436f6e74726163742073706f6e736f7220776173207365742e70436f6e747261637453706f6e736f7273686970436f6e6669726d65640800650301104831363004b0436f6e74726163742061646472657373206f662074686520616666656374656420636f6c6c656374696f6e2e00000130543a3a4163636f756e74496404504e65772073706f6e736f7220616464726573732e0104604e65772073706f6e736f722077617320636f6e6669726d2e58436f6e747261637453706f6e736f7252656d6f7665640400650301104831363004b0436f6e74726163742061646472657373206f662074686520616666656374656420636f6c6c656374696f6e2e02047c436f6c6c656374696f6e2073706f6e736f72207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657411060c5070616c6c65745f65766d5f6d6967726174696f6e1870616c6c6574144576656e7404045400010424546573744576656e74000004f054686973206576656e74206973207573656420696e2062656e63686d61726b696e6720616e642063616e206265207573656420666f72207465737473047c54686520604576656e746020656e756d206f6620746869732070616c6c657415060c4870616c6c65745f6d61696e74656e616e63651870616c6c6574144576656e74040454000108484d61696e74656e616e6365456e61626c65640000004c4d61696e74656e616e636544697361626c6564000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657419060c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65741d060c4470616c6c65745f746573745f7574696c731870616c6c6574144576656e7404045400010c2856616c756549735365740000003853686f756c64526f6c6c6261636b000100384261746368436f6d706c65746564000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574210608306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200002506000002790300290608306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ee0014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d650106016473705f72756e74696d653a3a52756e74696d65537472696e6700002d060c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373310601845065724469737061746368436c6173733c57656967687473506572436c6173733e000031060c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454013506000c01186e6f726d616c350601045400012c6f7065726174696f6e616c35060104540001246d616e6461746f72793506010454000035060c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963390601384f7074696f6e3c5765696768743e0001246d61785f746f74616c390601384f7074696f6e3c5765696768743e0001207265736572766564390601384f7074696f6e3c5765696768743e0000390604184f7074696f6e04045401240108104e6f6e6500000010536f6d6504002400000100003d060c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178410601545065724469737061746368436c6173733c7533323e000041060c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400004506082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400004906082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d650106013452756e74696d65537472696e67000124696d706c5f6e616d650106013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069734d06011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800004d06040c436f77040454015106000400510600000051060000025506005506000004080101100059060c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c65745d0600000261060061060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480130000c0138757365645f62616e647769647468650601345573656442616e647769647468000138706172615f686561645f68617368290301244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616c7906018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e000065060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e676906018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e00006906042042547265654d617008044b01ad010456016d0600040071060000006d060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c75333200007106000002750600750600000408ad016d0600790604184f7074696f6e040454017d060108104e6f6e6500000010536f6d6504007d0600000100007d060c4c706f6c6b61646f745f7072696d6974697665730876353855706772616465476f41686561640001081441626f72740000001c476f41686561640001000081060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480130000c0138757365645f62616e647769647468650601345573656442616e64776964746800013868726d705f77617465726d61726b250301804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616c7906018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000850604184f7074696f6e0404540189060108104e6f6e6500000010536f6d6504008906000001000089060c4c706f6c6b61646f745f7072696d69746976657308763548557067726164655265737472696374696f6e0001041c50726573656e74000000008d060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974799106018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c73950601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73950601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000091060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c75333200009506000002990600990600000408ad019d06009d060c4c706f6c6b61646f745f7072696d6974697665730876354c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164290301304f7074696f6e3c486173683e0000a1060c4c706f6c6b61646f745f7072696d697469766573087635644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d73a506018c73757065723a3a7673746167696e673a3a4173796e634261636b696e67506172616d730000a5060c4c706f6c6b61646f745f7072696d697469766573207673746167696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c7533320000a906089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c6179486173680000ad06042042547265654d617008044b01ad01045601a906000400b106000000b106000002b50600b50600000408ad01a90600b906000002bd0600bd060860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401ad0100080124726563697069656e74ad01010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e0000c106087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6e35010110626f6f6c0000c5060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400e50101185665633c543e0000cd060c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400013444546f6f4d616e7943616e646964617465730000044c546f6f206d616e792063616e646964617465731c556e6b6e6f776e00010434556e6b6e6f776e206572726f72285065726d697373696f6e000204405065726d697373696f6e20697373756554416c7265616479486f6c64696e674c6963656e7365000304945573657220616c726561647920686f6c6473206c6963656e736520746f20636f6c6c617465244e6f4c6963656e73650004049c5573657220646f6573206e6f7420686f6c642061206c6963656e736520746f20636f6c6c61746540416c726561647943616e6469646174650005046c5573657220697320616c726561647920612063616e646964617465304e6f7443616e6469646174650006045c55736572206973206e6f7420612063616e64696461746550546f6f4d616e79496e76756c6e657261626c657300070458546f6f206d616e7920696e76756c6e657261626c65734c546f6f466577496e76756c6e657261626c657300080454546f6f2066657720696e76756c6e657261626c65734c416c7265616479496e76756c6e657261626c650009047c5573657220697320616c726561647920616e20496e76756c6e657261626c653c4e6f74496e76756c6e657261626c65000a046c55736572206973206e6f7420616e20496e76756c6e657261626c655c4e6f4173736f63696174656456616c696461746f724964000b04984163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049445856616c696461746f724e6f7452656769737465726564000c048856616c696461746f72204944206973206e6f74207965742072656769737465726564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed106000002d50600d5060000040800cd0100d90600000408dd063400dd060c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d0000e1060c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ee5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d101045300000400e90601185665633c543e0000e906000002d10100ed06084873705f636f6e73656e7375735f736c6f747310536c6f74000004002c010c7536340000f10600000408ed061000f5060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401f906045300000400010701185665633c543e0000f9060c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964010101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73fd06011c526561736f6e730000fd060c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000107000002f9060005070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540109070453000004000d0701185665633c543e000009070c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720105011c42616c616e6365011800080108696405010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e636500000d0700000209070011070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011507045300000400210701185665633c543e000015070c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640119071c42616c616e63650118000801086964190701084964000118616d6f756e7418011c42616c616e63650000190708306f70616c5f72756e74696d654452756e74696d65486f6c64526561736f6e00010444436f6c6c61746f7253656c656374696f6e04001d07019470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a486f6c64526561736f6e001700001d070c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c657428486f6c64526561736f6e0001042c4c6963656e7365426f6e6400000000210700000215070025070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540129070453000004002d0701185665633c543e000029070c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640105011c42616c616e63650118000801086964050101084964000118616d6f756e7418011c42616c616e636500002d0700000229070031070c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35070c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800003907086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100003d07083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000041070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400310501185665633c543e000045070c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000490708346672616d655f737570706f72742050616c6c65744964000004000101011c5b75383b20385d00004d070c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e51070c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c657455070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b8045300000400f90101185665633c543e000059070c306f726d6c5f76657374696e67186d6f64756c65144572726f72040454000118445a65726f56657374696e67506572696f640000045856657374696e6720706572696f64206973207a65726f585a65726f56657374696e67506572696f64436f756e740001045c4e756d626572206f66207665737473206973207a65726f64496e73756666696369656e7442616c616e6365546f4c6f636b00020498496e73756666696369656e7420616d6f756e74206f662062616c616e636520746f206c6f636b5c546f6f4d616e7956657374696e675363686564756c6573000304b054686973206163636f756e74206861766520746f6f206d616e792076657374696e67207363686564756c657324416d6f756e744c6f770004049454686520766573746564207472616e7366657220616d6f756e7420697320746f6f206c6f776c4d617856657374696e675363686564756c65734578636565646564000504e44661696c6564206265636175736520746865206d6178696d756d2076657374696e67207363686564756c657320776173206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d070c306f726d6c5f78746f6b656e73186d6f64756c65144572726f7204045400014c4441737365744861734e6f5265736572766500000478417373657420686173206e6f2072657365727665206c6f636174696f6e2e544e6f7443726f7373436861696e5472616e73666572000104644e6f742063726f73732d636861696e207472616e736665722e2c496e76616c69644465737400020474496e76616c6964207472616e736665722064657374696e6174696f6e2e844e6f7443726f7373436861696e5472616e7366657261626c6543757272656e6379000304a443757272656e6379206973206e6f742063726f73732d636861696e207472616e7366657261626c652e48556e776569676861626c654d657373616765000404b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e4858636d457865637574696f6e4661696c65640005045458434d20657865637574696f6e206661696c65642e3843616e6e6f745265616e63686f72000608e8436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468654864657374696e6174696f6e20636861696e2e3c496e76616c6964416e636573747279000704c4436f756c64206e6f742067657420616e636573747279206f662061737365742072657365727665206c6f636174696f6e2e30496e76616c6964417373657400080468546865204d756c7469417373657420697320696e76616c69642e6044657374696e6174696f6e4e6f74496e7665727469626c65000904f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e2842616456657273696f6e000a08ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e7444697374696e637452657365727665466f724173736574416e64466565000b08fc57652074726965642073656e64696e672064697374696e637420617373657420616e6420666565206275742074686579206861766520646966666572656e743c7265736572766520636861696e732e1c5a65726f466565000c044054686520666565206973207a65726f2e285a65726f416d6f756e74000d0494546865207472616e73666572696e6720617373657420616d6f756e74206973207a65726f2e58546f6f4d616e794173736574734265696e6753656e74000e04d0546865206e756d626572206f662061737365747320746f2062652073656e74206973206f76657220746865206d6178696d756d2e544173736574496e6465784e6f6e4578697374656e74000f04ec5468652073706563696669656420696e64657820646f6573206e6f7420657869737420696e2061204d756c7469417373657473207374727563742e304665654e6f74456e6f75676800100448466565206973206e6f7420656e6f7567682e644e6f74537570706f727465644d756c74694c6f636174696f6e0011046c4e6f7420737570706f72746564204d756c74694c6f636174696f6e4c4d696e58636d4665654e6f74446566696e6564001204d44d696e58636d466565206e6f74207265676973746572656420666f72206365727461696e2072657365727665206c6f636174696f6e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610700000408000d010065070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540169070453000004006d0701185665633c543e00006907082c6f726d6c5f746f6b656e732c42616c616e63654c6f636b041c42616c616e63650118000801086964010101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500006d070000026907007107082c6f726d6c5f746f6b656e732c4163636f756e7444617461041c42616c616e63650118000c01106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000075070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540179070453000004007d0701185665633c543e00007907082c6f726d6c5f746f6b656e732c52657365727665446174610844526573657276654964656e74696669657201ac1c42616c616e63650118000801086964ac0144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e636500007d0700000279070081070c2c6f726d6c5f746f6b656e73186d6f64756c65144572726f720404540001203442616c616e6365546f6f4c6f77000004585468652062616c616e636520697320746f6f206c6f775c416d6f756e74496e746f42616c616e63654661696c65640001049c43616e6e6f7420636f6e7665727420416d6f756e7420696e746f2042616c616e63652074797065544c69717569646974795265737472696374696f6e73000204d04661696c65642062656361757365206c6971756964697479207265737472696374696f6e732064756520746f206c6f636b696e67404d61784c6f636b734578636565646564000304b44661696c6564206265636175736520746865206d6178696d756d206c6f636b7320776173206578636565646564244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e74484578697374656e7469616c4465706f736974000504e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000700048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8507000004081889070089070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400e50101185665633c543e00008d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019107045300000400990701185665633c543e0000910704184f7074696f6e0404540195070108104e6f6e6500000010536f6d6504009507000001000095070c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473e50201384964656e746974794669656c6473000099070000029107009d070c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479001004d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001104f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea107083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974a5070150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974a90701704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656e2503012c4f7074696f6e3c7533323e00010000a50700000408001800a90704184f7074696f6e04045401a5070108104e6f6e6500000010536f6d650400a5070000010000ad0700000408301000b1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5070c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd07045300000400c10701185665633c543e0000bd070000040c1059010000c107000002bd0700c50700000408c9071800c9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400e50101185665633c543e0000cd070c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0159011c42616c616e6365011801081c4f6e676f696e670400d10701c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f76656435010110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000d1070c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0159011c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c5901012050726f706f73616c0001247468726573686f6c6421010134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79d507013854616c6c793c42616c616e63653e0000d5070c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000d9070c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573dd0701f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73e907015044656c65676174696f6e733c42616c616e63653e0001147072696f72ed07017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e21030128436f6e76696374696f6e00012c64656c65676174696f6e73e907015044656c65676174696f6e733c42616c616e63653e0001147072696f72ed07017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e00010000dd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e107045300000400e50701185665633c543e0000e1070000040810250100e507000002e10700e9070c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000ed070c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000f107000004085901210100f5070000040810c90700f9070c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401300453000004005d0501185665633c543e00000108084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573e50101385665633c4163636f756e7449643e0001106e617973e50101385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000005080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401300453000004005d0501185665633c543e00000d080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400e50101185665633c543e000015080c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400e50101185665633c543e00001d080c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2108086070616c6c65745f72616e6b65645f636f6c6c656374697665304d656d6265725265636f7264000004011072616e6b4901011052616e6b000025080000040849010000290800000408490110002d080000040810000031080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000035080c6070616c6c65745f72616e6b65645f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012434416c72656164794d656d626572000004704163636f756e7420697320616c72656164792061206d656d6265722e244e6f744d656d626572000104604163636f756e74206973206e6f742061206d656d6265722e284e6f74506f6c6c696e67000204b854686520676976656e20706f6c6c20696e64657820697320756e6b6e6f776e206f722068617320636c6f7365642e1c4f6e676f696e670003048054686520676976656e20706f6c6c206973207374696c6c206f6e676f696e672e344e6f6e6552656d61696e696e67000404ac546865726520617265206e6f2066757274686572207265636f72647320746f2062652072656d6f7665642e28436f7272757074696f6e00050468556e6578706563746564206572726f7220696e2073746174652e2852616e6b546f6f4c6f7700060494546865206d656d62657227732072616e6b20697320746f6f206c6f7720746f20766f74652e38496e76616c69645769746e6573730007049854686520696e666f726d6174696f6e2070726f766964656420697320696e636f72726563742e304e6f5065726d697373696f6e000804f8546865206f726967696e206973206e6f742073756666696369656e746c792070726976696c6567656420746f20646f20746865206f7065726174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e39080c4070616c6c65745f7265666572656e6461147479706573385265666572656e64756d496e666f201c547261636b49640149013452756e74696d654f726967696e014503184d6f6d656e7401101043616c6c0159011c42616c616e636501181454616c6c79015101244163636f756e74496401003c5363686564756c654164647265737301790301181c4f6e676f696e6704003d08018d015265666572656e64756d5374617475733c547261636b49642c2052756e74696d654f726967696e2c204d6f6d656e742c2043616c6c2c2042616c616e63652c2054616c6c792c0a4163636f756e7449642c205363686564756c65416464726573732c3e00000020417070726f7665640c001001184d6f6d656e7400004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e00004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0001002052656a65637465640c001001184d6f6d656e7400004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e00004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0002002443616e63656c6c65640c001001184d6f6d656e7400004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e00004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0003002054696d65644f75740c001001184d6f6d656e7400004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e00004508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e000400184b696c6c656404001001184d6f6d656e74000500003d080c4070616c6c65745f7265666572656e6461147479706573405265666572656e64756d537461747573201c547261636b49640149013452756e74696d654f726967696e014503184d6f6d656e7401101043616c6c0159011c42616c616e636501181454616c6c79015101244163636f756e74496401003c5363686564756c6541646472657373017903002c0114747261636b4901011c547261636b49640001186f726967696e4503013452756e74696d654f726967696e00012070726f706f73616c5901011043616c6c000124656e6163746d656e746d030150446973706174636854696d653c4d6f6d656e743e0001247375626d69747465641001184d6f6d656e740001487375626d697373696f6e5f6465706f7369744108016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0001406465636973696f6e5f6465706f7369744508018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0001206465636964696e67490801784f7074696f6e3c4465636964696e675374617475733c4d6f6d656e743e3e00011474616c6c795101011454616c6c79000120696e5f717565756535010110626f6f6c000114616c61726d510801844f7074696f6e3c284d6f6d656e742c205363686564756c6541646472657373293e000041080c4070616c6c65745f7265666572656e64611474797065731c4465706f73697408244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e744964000118616d6f756e7418011c42616c616e63650000450804184f7074696f6e0404540141080108104e6f6e6500000010536f6d65040041080000010000490804184f7074696f6e040454014d080108104e6f6e6500000010536f6d6504004d0800000100004d080c4070616c6c65745f7265666572656e6461147479706573384465636964696e67537461747573042c426c6f636b4e756d62657201100008011473696e636510012c426c6f636b4e756d626572000128636f6e6669726d696e672503014c4f7074696f6e3c426c6f636b4e756d6265723e0000510804184f7074696f6e0404540155080108104e6f6e6500000010536f6d650400550800000100005508000004081079030059080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017903045300000400250601185665633c543e00005d08000002610800610800000408490165080065080c4070616c6c65745f7265666572656e646114747970657324547261636b496e666f081c42616c616e63650118184d6f6d656e740110002401106e616d65010601302627737461746963207374720001306d61785f6465636964696e6710010c7533320001406465636973696f6e5f6465706f73697418011c42616c616e6365000138707265706172655f706572696f641001184d6f6d656e7400013c6465636973696f6e5f706572696f641001184d6f6d656e74000138636f6e6669726d5f706572696f641001184d6f6d656e740001506d696e5f656e6163746d656e745f706572696f641001184d6f6d656e740001306d696e5f617070726f76616c69080114437572766500012c6d696e5f737570706f7274690801144375727665000069080c4070616c6c65745f7265666572656e646114747970657314437572766500010c404c696e65617244656372656173696e670c01186c656e6774681d05011c50657262696c6c000114666c6f6f721d05011c50657262696c6c0001106365696c1d05011c50657262696c6c000000445374657070656444656372656173696e67100114626567696e1d05011c50657262696c6c00010c656e641d05011c50657262696c6c000110737465701d05011c50657262696c6c000118706572696f641d05011c50657262696c6c000100285265636970726f63616c0c0118666163746f726d0801204669786564493634000120785f6f66667365746d0801204669786564493634000120795f6f66667365746d0801204669786564493634000200006d080c3473705f61726974686d657469632c66697865645f706f696e74204669786564493634000004007108010c693634000071080000050c0075080c4070616c6c65745f7265666572656e64611870616c6c6574144572726f72080454000449000134284e6f744f6e676f696e67000004685265666572656e64756d206973206e6f74206f6e676f696e672e284861734465706f736974000104b85265666572656e64756d2773206465636973696f6e206465706f73697420697320616c726561647920706169642e20426164547261636b0002049c54686520747261636b206964656e74696669657220676976656e2077617320696e76616c69642e1046756c6c000304310154686572652061726520616c726561647920612066756c6c20636f6d706c656d656e74206f66207265666572656e646120696e2070726f677265737320666f72207468697320747261636b2e285175657565456d70747900040480546865207175657565206f662074686520747261636b20697320656d7074792e344261645265666572656e64756d000504e4546865207265666572656e64756d20696e6465782070726f766964656420697320696e76616c696420696e207468697320636f6e746578742e2c4e6f7468696e67546f446f000604ac546865726520776173206e6f7468696e6720746f20646f20696e2074686520616476616e63656d656e742e1c4e6f547261636b000704a04e6f20747261636b2065786973747320666f72207468652070726f706f73616c206f726967696e2e28556e66696e69736865640008040101416e79206465706f7369742063616e6e6f7420626520726566756e64656420756e74696c20616674657220746865206465636973696f6e206973206f7665722e304e6f5065726d697373696f6e000904a8546865206465706f73697420726566756e646572206973206e6f7420746865206465706f7369746f722e244e6f4465706f736974000a04cc546865206465706f7369742063616e6e6f7420626520726566756e6465642073696e6365206e6f6e6520776173206d6164652e24426164537461747573000b04d0546865207265666572656e64756d2073746174757320697320696e76616c696420666f722074686973206f7065726174696f6e2e40507265696d6167654e6f744578697374000c047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d08045300000400850801185665633c543e00007d0804184f7074696f6e0404540181080108104e6f6e6500000010536f6d650400810800000100008108084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0159012c426c6f636b4e756d62657201103450616c6c6574734f726967696e014503244163636f756e7449640100001401206d617962655f69648801304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5901011043616c6c0001386d617962655f706572696f646963750301944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e4503013450616c6c6574734f726967696e000085080000027d080089080c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d080000029108009108086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572ad010118506172614964000114737461746595080130496e626f756e6453746174650001406d6573736167655f6d65746164617461990801a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00009508086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000099080000029d08009d080000040810a10800a1080c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000a50800000408ad011000a908000002ad0800ad08086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74ad0101185061726149640001147374617465b10801344f7574626f756e6453746174650001347369676e616c735f657869737435010110626f6f6c00012c66697273745f696e6465784901010c7531360001286c6173745f696e6465784901010c7531360000b108086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000b50800000408ad01490100b908086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742401185765696768740000bd080000040cad01103400c1080c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5080c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e6465720102015856657273696f6e65644d756c74694c6f636174696f6e00014c6d617962655f6d617463685f71756572696572c90801784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001306d617962655f6e6f74696679cd0801404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696e0102015856657273696f6e65644d756c74694c6f636174696f6e00012469735f61637469766535010110626f6f6c000100145265616479080120726573706f6e7365d508014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000c90804184f7074696f6e0404540101020108104e6f6e6500000010536f6d65040001020000010000cd0804184f7074696f6e04045401d1080108104e6f6e6500000010536f6d650400d1080000010000d10800000408080800d508082c73746167696e675f78636d4456657273696f6e6564526573706f6e736500010808563204009503013076323a3a526573706f6e73650002000856330400c903013076333a3a526573706f6e736500030000d9080000040810010200dd080000040c2c241000e1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e508045300000400e90801185665633c543e0000e5080000040801021000e908000002e50800ed080c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e74546172676574730400f108013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000f10804184f7074696f6e04045401340108104e6f6e6500000010536f6d650400340000010000f5080000040c1000f90800f908082c73746167696e675f78636d4056657273696f6e6564417373657449640001040856330400d0012c76333a3a4173736574496400030000fd080c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e74696669657201ac304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e65720102015856657273696f6e65644d756c74694c6f636174696f6e0001186c6f636b65720102015856657273696f6e65644d756c74694c6f636174696f6e000124636f6e73756d657273010901d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000001090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010509045300000400090901185665633c543e0000050900000408ac180009090000020509000d090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011109045300000400150901185665633c543e000011090000040818010200150900000211090019090c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d090c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2109086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400002509086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656410012c50616765436f756e746572000120656e645f7573656410012c50616765436f756e7465720001406f7665727765696768745f636f756e742c013c4f766572776569676874496e646578000029090000022d09002d090000040810340031090c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e350900000408890400003909000004088904d904003d090000040c8904d904000041090c3470616c6c65745f756e697175651870616c6c6574144572726f7204045400010c8c436f6c6c656374696f6e446563696d616c506f696e744c696d697445786365656465640000045101446563696d616c5f706f696e747320706172616d65746572206d757374206265206c6f776572207468616e205b6075705f646174615f737472756374733a3a4d41585f444543494d414c5f504f494e5453605d2e34456d707479417267756d656e74000104c84c656e677468206f66206974656d732070726f70657274696573206d7573742062652067726561746572207468616e20302ea85265706172746974696f6e43616c6c65644f6e4e6f6e526566756e6769626c65436f6c6c656374696f6e000204dc5265706572746974696f6e206973206f6e6c7920737570706f7274656420627920726566756e6769626c6520636f6c6c656374696f6e2e04a84572726f727320666f722074686520636f6d6d6f6e20556e69717565207472616e73616374696f6e732e45090c5070616c6c65745f636f6e66696775726174696f6e1870616c6c6574144572726f7204045400010464496e636f6e73697374656e74436f6e66696775726174696f6e000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4909083c75705f646174615f7374727563747328436f6c6c656374696f6e04244163636f756e7449640100002401146f776e65720001244163636f756e7449640001106d6f646545040138436f6c6c656374696f6e4d6f64650001106e616d6535040138436f6c6c656374696f6e4e616d6500012c6465736372697074696f6e3d040154436f6c6c656374696f6e4465736372697074696f6e000130746f6b656e5f70726566697841040154436f6c6c656374696f6e546f6b656e50726566697800012c73706f6e736f72736869704d09016c53706f6e736f727368697053746174653c4163636f756e7449643e0001186c696d6974735d040140436f6c6c656374696f6e4c696d69747300012c7065726d697373696f6e7371040154436f6c6c656374696f6e5065726d697373696f6e73000114666c6167736902013c436f6c6c656374696f6e466c61677300004d09083c75705f646174615f737472756374734053706f6e736f7273686970537461746504244163636f756e7449640100010c2044697361626c65640000002c556e636f6e6669726d656404000001244163636f756e74496400010024436f6e6669726d656404000001244163636f756e744964000200005109083c75705f646174615f737472756374732850726f7065727469657300000c010c6d61705509017050726f706572746965734d61703c50726f706572747956616c75653e000138636f6e73756d65645f737061636510010c7533320001245f726573657276656410010c75333200005509083c75705f646174615f737472756374733450726f706572746965734d6170041456616c756501b1040004005909011901426f756e64656442547265654d61703c50726f70657274794b65792c2056616c75652c20436f6e73745533323c4d41585f50524f504552544945535f5045525f4954454d3e3e000059090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b019d04045601b1040453000004005d09013842547265654d61703c4b2c20563e00005d09042042547265654d617008044b019d04045601b104000400610900000061090000026509006509000004089d04b104006909083c75705f646174615f737472756374733450726f706572746965734d6170041456616c756501a1040004006d09011901426f756e64656442547265654d61703c50726f70657274794b65792c2056616c75652c20436f6e73745533323c4d41585f50524f504552544945535f5045525f4954454d3e3e00006d090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b019d04045601a1040453000004007109013842547265654d61703c4b2c20563e00007109042042547265654d617008044b019d04045601a104000400750900000075090000027909007909000004089d04a104007d090000040889044d040081090000041485098904d90489098d09008509083c75705f646174615f737472756374733c436f6c6c656374696f6e537461747300000c011c6372656174656410010c75333200012464657374726f79656410010c753332000114616c69766510010c75333200008909083c75705f646174615f7374727563747328546f6b656e4368696c640000080114746f6b656ed904011c546f6b656e4964000128636f6c6c656374696f6e89040130436f6c6c656374696f6e496400008d09082c5068616e746f6d547970653c75705f646174615f73747275637473040454019109000400c10900000091090000040c95099909a109009509083c75705f646174615f7374727563747324546f6b656e44617461043843726f73734163636f756e744964014d04000c012870726f70657274696573b50401345665633c50726f70657274793e0001146f776e6572bd0401584f7074696f6e3c43726f73734163636f756e7449643e0001187069656365731801107531323800009909083c75705f646174615f7374727563747334527063436f6c6c656374696f6e04244163636f756e7449640100003001146f776e65720001244163636f756e7449640001106d6f646545040138436f6c6c656374696f6e4d6f64650001106e616d65390401205665633c7531363e00012c6465736372697074696f6e390401205665633c7531363e000130746f6b656e5f70726566697834011c5665633c75383e00012c73706f6e736f72736869704d09016c53706f6e736f727368697053746174653c4163636f756e7449643e0001186c696d6974735d040140436f6c6c656374696f6e4c696d69747300012c7065726d697373696f6e7371040154436f6c6c656374696f6e5065726d697373696f6e73000168746f6b656e5f70726f70657274795f7065726d697373696f6e73a50401685665633c50726f70657274794b65795065726d697373696f6e3e00012870726f70657274696573b50401345665633c50726f70657274793e000124726561645f6f6e6c7935010110626f6f6c000114666c6167739d090148527063436f6c6c656374696f6e466c61677300009d09083c75705f646174615f7374727563747348527063436f6c6c656374696f6e466c616773000008011c666f726569676e35010110626f6f6c0001386572633732316d6574616461746135010110626f6f6c0000a109084c75705f706f765f657374696d6174655f7270631c506f76496e666f000014012870726f6f665f73697a652c010c753634000148636f6d706163745f70726f6f665f73697a652c010c753634000154636f6d707265737365645f70726f6f665f73697a652c010c75363400011c726573756c7473a50901645665633c4170706c7945787472696e736963526573756c743e0001286b65795f76616c756573b90901445665633c547269654b657956616c75653e0000a509000002a90900a9090418526573756c7408045401a8044501ad090108084f6b0400a8000000000c4572720400ad090000010000ad090c2873705f72756e74696d65507472616e73616374696f6e5f76616c6964697479605472616e73616374696f6e56616c69646974794572726f720001081c496e76616c69640400b1090148496e76616c69645472616e73616374696f6e0000001c556e6b6e6f776e0400b5090148556e6b6e6f776e5472616e73616374696f6e00010000b1090c2873705f72756e74696d65507472616e73616374696f6e5f76616c696469747948496e76616c69645472616e73616374696f6e00012c1043616c6c0000001c5061796d656e7400010018467574757265000200145374616c650003002042616450726f6f6600040044416e6369656e744269727468426c6f636b0005004445786861757374735265736f757263657300060018437573746f6d04000801087538000700304261644d616e6461746f72790008004c4d616e6461746f727956616c69646174696f6e000900244261645369676e6572000a0000b5090c2873705f72756e74696d65507472616e73616374696f6e5f76616c696469747948556e6b6e6f776e5472616e73616374696f6e00010c3043616e6e6f744c6f6f6b75700000004c4e6f556e7369676e656456616c696461746f7200010018437573746f6d0400080108753800020000b909000002bd0900bd09084c75705f706f765f657374696d6174655f72706330547269654b657956616c7565000008010c6b657934011c5665633c75383e00011476616c756534011c5665633c75383e0000c10900000300000000910900c5090c3470616c6c65745f636f6d6d6f6e1870616c6c6574144572726f7204045400019848436f6c6c656374696f6e4e6f74466f756e640000047c5468697320636f6c6c656374696f6e20646f6573206e6f742065786973742e404d7573744265546f6b656e4f776e6572000104b853656e64657220706172616d6574657220616e64206974656d206f776e6572206d75737420626520657175616c2e304e6f5065726d697373696f6e0002047c4e6f207065726d697373696f6e20746f20706572666f726d20616374696f6e7443616e7444657374726f794e6f74456d707479436f6c6c656374696f6e000304b044657374726f79696e67206f6e6c7920656d70747920636f6c6c656374696f6e7320697320616c6c6f7765645c5075626c69634d696e74696e674e6f74416c6c6f7765640004047c436f6c6c656374696f6e206973206e6f7420696e206d696e74206d6f64652e54416464726573734e6f74496e416c6c6f776c6973740005047441646472657373206973206e6f7420696e20616c6c6f77206c6973742e6c436f6c6c656374696f6e4e616d654c696d69744578636565646564000604bc436f6c6c656374696f6e206e616d652063616e206e6f74206265206c6f6e676572207468616e20363320636861722e88436f6c6c656374696f6e4465736372697074696f6e4c696d69744578636565646564000704dc436f6c6c656374696f6e206465736372697074696f6e2063616e206e6f74206265206c6f6e676572207468616e2032353520636861722e88436f6c6c656374696f6e546f6b656e5072656669784c696d69744578636565646564000804b0546f6b656e207072656669782063616e206e6f74206265206c6f6e676572207468616e20313520636861722e74546f74616c436f6c6c656374696f6e734c696d6974457863656564656400090484546f74616c20636f6c6c656374696f6e7320626f756e642065786365656465642e70436f6c6c656374696f6e41646d696e436f756e744578636565646564000a04604578636565646564206d61782061646d696e20636f756e7474436f6c6c656374696f6e4c696d6974426f756e64734578636565646564000b04bc436f6c6c656374696f6e206c696d697420626f756e64732070657220636f6c6c656374696f6e206578636565646564784f776e65725065726d697373696f6e7343616e7442655265766572746564000c040d01547269656420746f20656e61626c65207065726d697373696f6e7320776869636820617265206f6e6c79207065726d697474656420746f2062652064697361626c6564485472616e736665724e6f74416c6c6f776564000d04cc436f6c6c656374696f6e2073657474696e6773206e6f7420616c6c6f77696e67206974656d73207472616e7366657272696e67644163636f756e74546f6b656e4c696d69744578636565646564000e04ac4163636f756e7420746f6b656e206c696d69742065786365656465642070657220636f6c6c656374696f6e70436f6c6c656374696f6e546f6b656e4c696d69744578636565646564000f047c436f6c6c656374696f6e20746f6b656e206c696d6974206578636565646564484d65746164617461466c616746726f7a656e001004504d6574616461746120666c61672066726f7a656e34546f6b656e4e6f74466f756e640011044c4974656d20646f6573206e6f7420657869737440546f6b656e56616c7565546f6f4c6f77001204684974656d2069732062616c616e6365206e6f7420656e6f7567684c417070726f76656456616c7565546f6f4c6f77001304a45265717565737465642076616c7565206973206d6f7265207468616e2074686520617070726f7665646043616e74417070726f76654d6f72655468616e4f776e656400140480547269656420746f20617070726f7665206d6f7265207468616e206f776e6564544164647265737349734e6f744574684d6972726f72001504bc4f6e6c79207370656e64696e672066726f6d20657468206d6972726f7220636f756c6420626520617070726f766564344164647265737349735a65726f001604b843616e2774207472616e7366657220746f6b656e7320746f20657468657265756d207a65726f206164647265737350556e737570706f727465644f7065726174696f6e00170478546865206f7065726174696f6e206973206e6f7420737570706f727465644c4e6f7453756666696369656e74466f756e64730018049c496e73756666696369656e742066756e647320746f20706572666f726d20616e20616374696f6e585573657249734e6f74416c6c6f776564546f4e657374001904985573657220646f6573206e6f74207361746973667920746865206e657374696e672072756c6588536f75726365436f6c6c656374696f6e49734e6f74416c6c6f776564546f4e657374001a0411014f6e6c7920746f6b656e732066726f6d20737065636966696320636f6c6c656374696f6e73206d6179206e65737420746f6b656e7320756e6465722074686973206f6e656c436f6c6c656374696f6e4669656c6453697a654578636565646564001b04e4547269656420746f2073746f7265206d6f72652064617461207468616e20616c6c6f77656420696e20636f6c6c656374696f6e206669656c64484e6f5370616365466f7250726f7065727479001c04b8547269656420746f2073746f7265206d6f72652070726f70657274792064617461207468616e20616c6c6f7765645050726f70657274794c696d697452656163686564001d04b8547269656420746f2073746f7265206d6f72652070726f7065727479206b657973207468616e20616c6c6f7765645050726f70657274794b65794973546f6f4c6f6e67001e046050726f7065727479206b657920697320746f6f206c6f6e6774496e76616c6964436861726163746572496e50726f70657274794b6579001f0415014f6e6c79204153434949206c6574746572732c206469676974732c20616e642073796d626f6c7320605f602c20602d602c20616e6420602e602061726520616c6c6f77656440456d70747950726f70657274794b657900200484456d7074792070726f7065727479206b6579732061726520666f7262696464656e50436f6c6c656374696f6e497345787465726e616c002104ec547269656420746f2061636365737320616e2065787465726e616c20636f6c6c656374696f6e207769746820616e20696e7465726e616c2041504950436f6c6c656374696f6e4973496e7465726e616c002204ec547269656420746f2061636365737320616e20696e7465726e616c20636f6c6c656374696f6e207769746820616e2065787465726e616c2041504958436f6e6669726d53706f6e736f72736869704661696c0023040d01546869732061646472657373206973206e6f74207365742061732073706f6e736f722c2075736520736574436f6c6c656374696f6e53706f6e736f722066697273742e605573657249734e6f74436f6c6c656374696f6e41646d696e002404845468652075736572206973206e6f7420616e2061646d696e6973747261746f722e5446756e6769626c654974656d73486176654e6f4964002504710146756e6769626c6520746f6b656e7320686f6c64206e6f2049442c20616e64207468652064656661756c742076616c7565206f6620546f6b656e496420666f7220612066756e6769626c6520636f6c6c656374696f6e20697320302e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9090000040c89044d044d0400cd090c3c70616c6c65745f66756e6769626c651870616c6c6574144572726f72040454000118c04e6f7446756e6769626c654461746155736564546f4d696e7446756e6769626c65436f6c6c656374696f6e546f6b656e000004ec4e6f742046756e6769626c65206974656d2064617461207573656420746f206d696e7420696e2046756e6769626c6520636f6c6c656374696f6e2e6446756e6769626c654974656d73446f6e74486176654461746100010490547269656420746f20736574206461746120666f722066756e6769626c65206974656d2e6046756e6769626c65446973616c6c6f77734e657374696e67000204a046756e6769626c6520746f6b656e20646f6573206e6f7420737570706f7274206e657374696e672e6c53657474696e6750726f706572746965734e6f74416c6c6f7765640003049c53657474696e67206974656d2070726f70657274696573206973206e6f7420616c6c6f7765642e8053657474696e67416c6c6f77616e6365466f72416c6c4e6f74416c6c6f776564000404a453657474696e6720616c6c6f77616e636520666f7220616c6c206973206e6f7420616c6c6f7765642e7046756e6769626c65546f6b656e73417265416c7761797356616c696400050445014f6e6c7920612066756e6769626c6520636f6c6c656374696f6e20636f756c6420626520706f737369626c792062726f6b656e3b20616e792066756e6769626c6520746f6b656e2069732076616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed109083c75705f646174615f737472756374732850726f7065727469657300000c010c6d61705509017050726f706572746965734d61703c50726f706572747956616c75653e000138636f6e73756d65645f737061636510010c7533320001245f726573657276656410010c7533320000d5090000040c89044d04d90400d9090000040c8904d9044d0400dd09000004108904d9044d044d0400e1090c4470616c6c65745f726566756e6769626c651870616c6c6574144572726f72040454000114c84e6f74526566756e6769626c654461746155736564546f4d696e7446756e6769626c65436f6c6c656374696f6e546f6b656e000004fc4e6f7420526566756e6769626c65206974656d2064617461207573656420746f206d696e7420696e20526566756e6769626c6520636f6c6c656374696f6e2e5457726f6e67526566756e6769626c655069656365730001047c4d6178696d756d20726566756e676962696c6974792065786365656465642e885265706172746974696f6e5768696c654e6f744f776e696e67416c6c5069656365730002042901526566756e6769626c6520746f6b656e2063616e2774206265207265706172746974696f6e656420627920757365722077686f2069736e2774206f776e7320616c6c207069656365732e68526566756e6769626c65446973616c6c6f77734e657374696e67000304a4526566756e6769626c6520746f6b656e2063616e2774206e657374206f7468657220746f6b656e732e6c53657474696e6750726f706572746965734e6f74416c6c6f7765640004049c53657474696e67206974656d2070726f70657274696573206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee509084870616c6c65745f6e6f6e66756e6769626c65204974656d44617461043843726f73734163636f756e744964014d04000401146f776e65724d04013843726f73734163636f756e7449640000e909000004108904d904ed099d0400ed09083c75705f646174615f737472756374733450726f706572747953636f7065000108104e6f6e6500000010526d726b00010000f1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f5090000040c8904d904390900f9090c4870616c6c65745f6e6f6e66756e6769626c651870616c6c6574144572726f7204045400010ccc4e6f744e6f6e66756e6769626c654461746155736564546f4d696e7446756e6769626c65436f6c6c656374696f6e546f6b656e00000405014e6f74204e6f6e66756e6769626c65206974656d2064617461207573656420746f206d696e7420696e204e6f6e66756e6769626c6520636f6c6c656374696f6e2e704e6f6e66756e6769626c654974656d73486176654e6f416d6f756e74000104605573656420616d6f756e74203e20312077697468204e46545c43616e744275726e4e6674576974684368696c6472656e00020480556e61626c6520746f206275726e204e46542077697468206368696c6472656e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd090c4070616c6c65745f7374727563747572651870616c6c6574144572726f72040454000114444f75726f626f726f73446574656374656400000421015768696c65206e657374696e672c20656e636f756e746572656420616e20616c726561647920636865636b6564206163636f756e742c20646574656374696e672061206c6f6f702e2844657074684c696d697400010445015768696c65206e657374696e672c207265616368656420746865206465707468206c696d6974206f66206e657374696e672c20657863656564696e67207468652070726f7669646564206275646765742e30427265616474684c696d69740002044d015768696c65206e657374696e672c2072656163686564207468652062726561647468206c696d6974206f66206e657374696e672c20657863656564696e67207468652070726f7669646564206275646765742e34546f6b656e4e6f74466f756e64000304d4436f756c646e27742066696e642074686520746f6b656e206f776e6572207468617420697320697473656c66206120746f6b656e2e7043616e744e657374546f6b656e556e646572436f6c6c656374696f6e0004043d01547269656420746f206e65737420746f6b656e20756e64657220636f6c6c656374696f6e20636f6e747261637420616464726573732c20696e7374656164206f6620746f6b656e2061646472657373048054686520604572726f726020656e756d206f6620746869732070616c6c65742e010a00000408001000050a00000408181000090a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a5070453000004000d0a01185665633c543e00000d0a000002a50700110a0c5070616c6c65745f6170705f70726f6d6f74696f6e1870616c6c6574144572726f7204045400011c2c41646d696e4e6f74536574000004b84572726f722064756520746f20616374696f6e20726571756972696e672061646d696e20746f206265207365742e304e6f5065726d697373696f6e0001048c4e6f207065726d697373696f6e20746f20706572666f726d20616e20616374696f6e2e484e6f7453756666696369656e7446756e6473000204a0496e73756666696369656e742066756e647320746f20706572666f726d20616e20616374696f6e2e5c50656e64696e67466f72426c6f636b4f766572666c6f7700030499014f6363757273207768656e20612070656e64696e6720756e7374616b652063616e6e6f7420626520616464656420696e207468697320626c6f636b2e2050454e44494e475f4c494d49545f5045525f424c4f434b60206c696d6974732065786365656465642e3453706f6e736f724e6f74536574000404cd01546865206572726f722069732064756520746f20746865206661637420746861742074686520636f6c6c656374696f6e2f636f6e7472616374206d75737420616c72656164792062652073706f6e736f72656420696e206f7264657220746f20706572666f726d2074686520616374696f6e2e64496e73756666696369656e745374616b656442616c616e6365000504b44572726f72732063617573656420627920696e73756666696369656e74207374616b65642062616c616e63652e48496e636f6e73697374656e6379537461746500060419014572726f72732063617573656420627920696e636f7272656374207374617465206f662061207374616b657220696e20636f6e74657874206f66207468652070616c6c65742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e150a0c5470616c6c65745f666f726569676e5f617373657473186d6f64756c65144572726f720404540001102c4261644c6f636174696f6e000008410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e504d756c74694c6f636174696f6e45786973746564000104544d756c74694c6f636174696f6e206578697374656440417373657449644e6f744578697374730002044841737365744964206e6f7420657869737473384173736574496445786973746564000304384173736574496420657869737473048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190a082870616c6c65745f65766d30436f64654d65746164617461000008011073697a652c010c753634000110686173683001104832353600001d0a0000040865033000210a0c2870616c6c65745f65766d1870616c6c6574144572726f7204045400012c2842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e24556e646566696e656400080440556e646566696e6564206572726f722e285265656e7472616e63790009043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000a04244549502d333630372c048054686520604572726f726020656e756d206f6620746869732070616c6c65742e250a000002290a00290a0000040c65052d0a3d0a002d0a081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368300110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d6503011048313630000108746f310a01304f7074696f6e3c483136303e000140636f6e74726163745f61646472657373310a01304f7074696f6e3c483136303e0001106c6f67739d0501205665633c4c6f673e0001286c6f67735f626c6f6f6d350a0114426c6f6f6d0000310a04184f7074696f6e0404540165030108104e6f6e6500000010536f6d65040065030000010000350a0820657468626c6f6f6d14426c6f6f6d00000400390a01405b75383b20424c4f4f4d5f53495a455d0000390a0000030001000008003d0a0c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400410a014445495036353852656365697074446174610000001c454950323933300400410a01484549503239333052656365697074446174610001001c454950313535390400410a014845495031353539526563656970744461746100020000410a0c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f67617349050110553235360001286c6f67735f626c6f6f6d350a0114426c6f6f6d0001106c6f67739d0501205665633c4c6f673e0000450a0c20657468657265756d14626c6f636b14426c6f636b040454016505000c0118686561646572490a01184865616465720001307472616e73616374696f6e73510a01185665633c543e0001186f6d6d657273550a012c5665633c4865616465723e0000490a0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683001104832353600012c6f6d6d6572735f686173683001104832353600012c62656e6566696369617279650301104831363000012873746174655f726f6f74300110483235360001447472616e73616374696f6e735f726f6f743001104832353600013472656365697074735f726f6f74300110483235360001286c6f67735f626c6f6f6d350a0114426c6f6f6d000128646966666963756c747949050110553235360001186e756d62657249050110553235360001246761735f6c696d697449050110553235360001206761735f75736564490501105532353600012474696d657374616d702c010c75363400012865787472615f6461746134011442797465730001206d69785f68617368300110483235360001146e6f6e63654d0a010c48363400004d0a0c38657468657265756d5f747970657310686173680c483634000004000101011c5b75383b20385d0000510a000002650500550a000002490a00590a0000023d0a005d0a0000022d0a00610a0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e650a0c6870616c6c65745f65766d5f636f6465725f7375627374726174651870616c6c6574144572726f72040454000108204f75744f66476173000000244f75744f6646756e6400010014850144697370617463684572726f72206973206f70617175652c20627574207765206e65656420746f20736f6d65686f77206578747261637420636f7272656374206572726f7220696e2063617365206f66204f75744f66476173206661696c7572659101536f207765206861766520746869732070616c6c65742c20776869636820646566696e6573204f75744f66476173206572726f722c20616e64206b6e65777320697473206f776e20696420746f20636865636b2069662044697370617463684572726f725c6973207468726f776e2062656361757365206f662069740061015468657365206572726f72732073686f756c646e277420656e6420696e2065787472696e73696320726573756c74732c2061732074686579206f6e6c79207573656420696e2065766d20657865637574696f6e2070617468690a083c75705f646174615f737472756374734053706f6e736f7273686970537461746504244163636f756e744964014d04010c2044697361626c65640000002c556e636f6e6669726d656404004d0401244163636f756e74496400010024436f6e6669726d656404004d0401244163636f756e744964000200006d0a086c70616c6c65745f65766d5f636f6e74726163745f68656c706572733c53706f6e736f72696e674d6f64655400010c2044697361626c65640000002c416c6c6f776c69737465640001002047656e65726f757300020000710a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01100456014905045300000400750a013842547265654d61703c4b2c20563e0000750a042042547265654d617008044b01100456014905000400790a000000790a0000027d0a007d0a0000040810490500810a000004086503650300850a0c6c70616c6c65745f65766d5f636f6e74726163745f68656c706572731870616c6c6574144572726f7204045400010c304e6f5065726d697373696f6e000004c054686973206d6574686f64206973206f6e6c792065786563757461626c6520627920636f6e7472616374206f776e6572404e6f50656e64696e6753706f6e736f72000104804e6f2070656e64696e672073706f6e736f7220666f7220636f6e74726163742e80546f6f4d616e794d6574686f64734861766553706f6e736f7265644c696d697400020419014e756d626572206f66206d6574686f647320746861742073706f6e736f726564206c696d697420697320646566696e656420666f722065786365656473206d6178696d756d2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e890a0c5070616c6c65745f65766d5f6d6967726174696f6e1870616c6c6574144572726f7204045400010c3c4163636f756e744e6f74456d7074790000048843616e206f6e6c79206d69677261746520746f20656d70747920616464726573732e544163636f756e7449734e6f744d6967726174696e6700010409014d6967726174696f6e206f662074686973206163636f756e74206973206e6f742079657420737461727465642c206f7220616c72656164792066696e69736865642e204261644576656e74000204704661696c656420746f206465636f6465206576656e74206279746573048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d0a0c4870616c6c65745f6d61696e74656e616e63651870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e910a0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e950a0c4470616c6c65745f746573745f7574696c731870616c6c6574144572726f72040454000108485465737450616c6c657444697361626c65640000003c54726967676572526f6c6c6261636b000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e990a0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301dd011043616c6c015d01245369676e6174757265019d0a14457874726101b50a000400e90a01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e00009d0a082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a10a0148656432353531393a3a5369676e61747572650000001c537232353531390400a90a0148737232353531393a3a5369676e61747572650001001445636473610400ad0a014065636473613a3a5369676e617475726500020000a10a0c1c73705f636f72651c65643235353139245369676e617475726500000400a50a01205b75383b2036345d0000a50a000003400000000800a90a0c1c73705f636f72651c73723235353139245369676e617475726500000400a50a01205b75383b2036345d0000ad0a0c1c73705f636f7265146563647361245369676e617475726500000400b10a01205b75383b2036355d0000b10a000003410000000800b50a00000428b90abd0ac10ac50acd0ad10ad50ad90add0ae50a00b90a10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000bd0a10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000c10a10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000c50a10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400c90a010c4572610000c90a102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000cd0a10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400e00120543a3a4e6f6e63650000d10a10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000d50a10306f70616c5f72756e74696d653872756e74696d655f636f6d6d6f6e2c6d61696e74656e616e636540436865636b4d61696e74656e616e636500000000d90a10306f70616c5f72756e74696d653872756e74696d655f636f6d6d6f6e206964656e746974795044697361626c654964656e7469747943616c6c7300000000dd0a088c70616c6c65745f74656d706c6174655f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045401e10a000400bc013042616c616e63654f663c543e0000e10a08306f70616c5f72756e74696d651c52756e74696d6500000000e50a083c70616c6c65745f657468657265756d6046616b655472616e73616374696f6e46696e616c697a657204045401e10a000000e90a102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301dd011043616c6c015d01245369676e6174757265019d0a14457874726101b50a00040034000000d41853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023025060400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000290604000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e74010035010400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e74010035010400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500002106040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01610101541830426c6f636b576569676874732d066d01025b1f5d00070088526a7402004001c2a0a91d000107d00918a44b0200d000010700e6bd4f570200f000010000c2a0a91d000107d0abacbe680200200101070088526a7402004001010700a2941a1d02005000c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774683d063000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687445064040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e49064103106f70616c106f70616c01000000cfbd9800000000003c4fdc4d29738b36d503000000144f3c7616f5c8a102000000df6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000582211f65bb14b8905000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d696202000000bc9d89904f5b923f0100000037c8bb1350a9a2a80400000032d67ae360cae94401000000e65b00e46cedd0aa0200000003000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669784901082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01590600485374617465547269654d6967726174696f6e01485374617465547269654d6967726174696f6e0c404d6967726174696f6e50726f6365737301007d013800000000000000000000000000001050204d6967726174696f6e2070726f67726573732e005d0120546869732073746f7265732074686520736e617073686f74206f6620746865206c617374206d69677261746564206b6579732e2049742063616e2062652073657420696e746f206d6f74696f6e20616e64206d6f7665d420666f727761726420627920616e79206f6620746865206d65616e732070726f766964656420627920746869732070616c6c65742e284175746f4c696d6974730100750104000cd420546865206c696d69747320746861742061726520696d706f736564206f6e206175746f6d61746963206d6967726174696f6e732e00d42049662073657420746f204e6f6e652c207468656e206e6f206175746f6d61746963206d6967726174696f6e2068617070656e732e605369676e65644d6967726174696f6e4d61784c696d6974730000790104000ce020546865206d6178696d756d206c696d697473207468617420746865207369676e6564206d6967726174696f6e20636f756c64207573652e00b4204966206e6f74207365742c206e6f207369676e6564207375626d697373696f6e20697320616c6c6f7765642e017101017804244d61784b65794c656e10100002000054b4204d6178696d616c206e756d626572206f6620627974657320746861742061206b65792063616e20686176652e00b0204652414d4520697473656c6620646f6573206e6f74206c696d697420746865206b6579206c656e6774682e01012054686520636f6e63726574652076616c7565206d757374207468657265666f726520646570656e64206f6e20796f75722073746f726167652075736167652e59012041205b606672616d655f737570706f72743a3a73746f726167653a3a53746f726167654e4d6170605d20666f72206578616d706c652063616e206861766520616e20617262697472617279206e756d626572206f664501206b65797320776869636820617265207468656e2068617368656420616e6420636f6e636174656e617465642c20726573756c74696e6720696e206172626974726172696c79206c6f6e67206b6579732e0041012055736520746865202a7374617465206d6967726174696f6e205250432a20746f20726574726965766520746865206c656e677468206f6620746865206c6f6e67657374206b657920696e20796f757201012073746f726167653a203c68747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f6973737565732f31313634323e00290120546865206d6967726174696f6e2077696c6c2068616c7420776974682061206048616c74656460206576656e7420696620746869732076616c756520697320746f6f20736d616c6c2e49012053696e6365207468657265206973206e6f207265616c2070656e616c74792066726f6d206f7665722d657374696d6174696e672c206974206973206164766973656420746f207573652061206c61726765802076616c75652e205468652064656661756c742069732035313220627974652e008020536f6d65206b6579206c656e6774687320666f72207265666572656e63653ad0202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c7565605d3a2033322062797465c8202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d6170605d3a2036342062797465e0202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f72616765446f75626c654d6170605d3a2039362062797465004820466f72206d6f726520696e666f207365653501203c68747470733a2f2f7777772e736861776e74616272697a692e636f6d2f7375627374726174652f7175657279696e672d7375627374726174652d73746f726167652d7669612d7270632f3e0180013c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e7401005d060400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e740000810604000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468655901206c617465737420746865206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010034040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000910104000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f646501003501040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100101000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100850604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f416865616401007906040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600009901040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e67537461746500008d0604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e0000a1060400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100a90680000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d716348656164730100ad06040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100b90604000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d6573736167657301006d0104000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301006d01040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a6564557067726164650000c106040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e01890101840001c506143450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100ad0110640000000001c1010000001528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e000000001644436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1034496e76756c6e657261626c65730100c9060400048c2054686520696e76756c6e657261626c652c20666978656420636f6c6c61746f72732e404c6963656e73654465706f7369744f66010104020018400000000000000000000000000000000004ac205468652028636f6d6d756e6974792920636f6c6c6174696f6e206c6963656e736520686f6c646572732e2843616e646964617465730100c906040004bc205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e01c501018c0001cd06171c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100e5010400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e67656401003501040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100d1060400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010031050400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500cd010400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405d90600040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01c90101900001e106181041757261011041757261082c417574686f7269746965730100e5060400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100ed062000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000191c41757261457874011c41757261457874082c417574686f7269746965730100e506040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f0000f10604000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e000000001a2042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f506040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402000507040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020011070400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020025070400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01d901019414484578697374656e7469616c4465706f73697418400000000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647310100a00000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657310100a00000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e0131071e2454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e2444696455706461746501003501040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01e9010004344d696e696d756d506572696f642c207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e0020485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100350740000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100390704000000019c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e002120547265617375727901205472656173757279103450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c7300010405103d070400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301004107040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01ed0101a01c3050726f706f73616c426f6e6445071050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000064a7b3b6e00d0000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d250544010000a0dec5adc9353600000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f64101019000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e450710000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c6574496449072070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e014d0722105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01f10101a400015107231c56657374696e67011c56657374696e67044056657374696e675363686564756c65730101040200550704000c842056657374696e67207363686564756c6573206f6620616e206163636f756e742e00e02056657374696e675363686564756c65733a206d6170204163636f756e744964203d3e205665633c56657374696e675363686564756c653e01f50101b404444d696e5665737465645472616e7366657218400000e8890423c78a000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e015907251c58546f6b656e730001fd0101c0083053656c664c6f636174696f6ed414010100bd2004542053656c6620636861696e206c6f636174696f6e2e344261736558636d57656967687424180284d717a10f104420426173652058434d207765696768742e00f8205468652061637475616c6c792077656967687420666f7220616e2058434d206d6573736167652069732060543a3a4261736558636d576569676874202b6c20543a3a576569676865723a3a77656967687428266d736729602e015d072618546f6b656e730118546f6b656e731034546f74616c49737375616e6365010104050d0118400000000000000000000000000000000004902054686520746f74616c2069737375616e6365206f66206120746f6b656e20747970652e144c6f636b73010108020561076507040008d820416e79206c6971756964697479206c6f636b73206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e204163636f756e7473010108020561077107c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b8205468652062616c616e6365206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e00fc204e4f54453a2049662074686520746f74616c2069732065766572207a65726f2c206465637265617365206163636f756e7420726566206163636f756e742e001901204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f7265282062616c616e6365732e205265736572766573010108020561077507040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e014d0201090108204d61784c6f636b73101032000000002c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01810727204964656e7469747901204964656e7469747910284964656e746974794f660001040500f90204000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200e1020400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850744000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d070400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e015102011501183042617369634465706f73697418400000e8890423c78a000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f7369741840008062175ed158000000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000c84e676dc11b00000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c6473101064000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e019d072820507265696d6167650120507265696d6167650824537461747573466f720001040630a1070400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406ad07b1070400000119030119010001b507292444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100b907040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510c50704000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040510cd0704000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500d907d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c010035010400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000f107040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630f50704000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104063035010400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f66000104022d0130040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e011d03011d01303c456e6163746d656e74506572696f6410101900000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f6410102c01000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f6410102c01000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f64101019000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000000000000000000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564350104000c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f6410103200000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f6410102c01000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01f9072a1c436f756e63696c011c436f756e63696c182450726f706f73616c730100fd07040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406305d01040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406300108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100e5010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e012d0301310104444d617850726f706f73616c57656967687424280700a0db215d0200000104250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e0105082b48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c7301000908040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406305d01040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406300108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100e5010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01310301390104444d617850726f706f73616c57656967687424280700a0db215d0200000104250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e010d082c44436f756e63696c4d656d626572736869700144436f756e63696c4d656d62657273686970081c4d656d6265727301001108040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e013503013d01000115082d70546563686e6963616c436f6d6d69747465654d656d626572736869700170546563686e6963616c436f6d6d69747465654d656d62657273686970081c4d656d6265727301001908040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01390301410100011d082e5046656c6c6f7773686970436f6c6c656374697665015046656c6c6f7773686970436f6c6c656374697665182c4d656d626572436f756e7401010405490110100000000008690120546865206e756d626572206f66206d656d6265727320696e2074686520636f6c6c6563746976652077686f2068617665206174206c65617374207468652072616e6b206163636f7264696e6720746f2074686520696e64657830206f6620746865207665632e1c4d656d62657273000104050021080400049c205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e244964546f496e646578000108050525081004000461012054686520696e646578206f6620656163682072616e6b732773206d656d62657220696e746f207468652067726f7570206f66206d656d626572732077686f2068617665206174206c6561737420746861742072616e6b2e24496e646578546f496400010805052908000400085d0120546865206d656d6265727320696e2074686520636f6c6c65637469766520627920696e6465782e20416c6c20696e646963657320696e207468652072616e67652060302e2e4d656d626572436f756e74602077696c6c65012072657475726e2060536f6d65602c20686f77657665722061206d656d626572277320696e646578206973206e6f742067756172616e7465656420746f2072656d61696e20756e6368616e676564206f7665722074696d652e18566f74696e6700010802052d084d01040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e34566f74696e67436c65616e757000010402103108040000013d03014501000135082f4c46656c6c6f77736869705265666572656e6461014c46656c6c6f77736869705265666572656e6461143c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e445265666572656e64756d496e666f466f7200010402103908040004b420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e28547261636b517565756501010405490159080400105d012054686520736f72746564206c697374206f66207265666572656e646120726561647920746f206265206465636964656420627574206e6f7420796574206265696e6720646563696465642c206f7264657265642062797c20636f6e76696374696f6e2d776569676874656420617070726f76616c732e00410120546869732073686f756c6420626520656d70747920696620604465636964696e67436f756e7460206973206c657373207468616e2060547261636b496e666f3a3a6d61785f6465636964696e67602e344465636964696e67436f756e7401010405490110100000000004c420546865206e756d626572206f66207265666572656e6461206265696e6720646563696465642063757272656e746c792e284d657461646174614f66000104021030040018050120546865206d6574616461746120697320612067656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720746865207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01410301550114445375626d697373696f6e4465706f7369741840e803000000000000000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e244d617851756575656410106400000004e4204d6178696d756d2073697a65206f6620746865207265666572656e64756d20717565756520666f7220612073696e676c6520747261636b2e44556e6465636964696e6754696d656f757410102c01000008550120546865206e756d626572206f6620626c6f636b73206166746572207375626d697373696f6e20746861742061207265666572656e64756d206d75737420626567696e206265696e6720646563696465642062792ee4204f6e63652074686973207061737365732c207468656e20616e796f6e65206d61792063616e63656c20746865207265666572656e64756d2e34416c61726d496e74657276616c1010010000000c5d01205175616e74697a6174696f6e206c6576656c20666f7220746865207265666572656e64756d2077616b657570207363686564756c65722e204120686967686572206e756d6265722077696c6c20726573756c7420696e5d012066657765722073746f726167652072656164732f777269746573206e656564656420666f7220736d616c6c657220766f746572732c2062757420616c736f20726573756c7420696e2064656c61797320746f207468655501206175746f6d61746963207265666572656e64756d20737461747573206368616e6765732e204578706c6963697420736572766963696e6720696e737472756374696f6e732061726520756e61666665637465642e18547261636b735d085501040a004c64656d6f63726163795f70726f706f73616c730a0000000000e8890423c78a0000000000000000190000002c01000032000000050000000000ca9a3b0065cd1d00ca9a3b0000ca9a3b000000000065cd1d04e020496e666f726d6174696f6e20636f6e6365726e696e672074686520646966666572656e74207265666572656e64756d20747261636b732e01750830245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051079080400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405047903040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01710301b90508344d6178696d756d57656967687424280700b864d9450200c00004290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e018908311c4f726967696e730000000000632458636d705175657565012458636d7051756575652844496e626f756e6458636d7053746174757301008d080400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205a50834040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d705374617475730100a9080400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205b50834040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402ad0134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100b90874020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f766572776569676874000104052cbd08040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401002c20000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100350104000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e017d0301bd050001c108322c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e74657201002c200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c51756572696573000104022cc5080400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040630101000000000106820546865206578697374696e672061737365742074726170732e007501204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e656420604d756c7469417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502d90810040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502d9082c040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502d908dd0804000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100e10804000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e0000ed080400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c050202f508fd08040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402000d09040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e64656401003501040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01810301c10500011909332843756d756c757358636d0001250401c90500011d093420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01002109280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010025094000000000000000000000000000000000044020546865207061676520696e6465782e1450616765730101040210290904000444205468652071756575652070616765732e284f766572776569676874000104022c2d090400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001290401cd05000131093524496e666c6174696f6e0124496e666c6174696f6e14645374617274696e6759656172546f74616c49737375616e636501001840000000000000000000000000000000000474207374617274696e67207965617220746f74616c2069737375616e636538426c6f636b496e666c6174696f6e01001840000000000000000000000000000000000401012043757272656e7420696e666c6174696f6e20666f722060496e666c6174696f6e426c6f636b496e74657276616c60206e756d626572206f6620626c6f636b73484e657874496e666c6174696f6e426c6f636b010010100000000004e4204e65787420746172676574202872656c61792920626c6f636b207768656e20696e666c6174696f6e2077696c6c206265206170706c696564584e657874526563616c63756c6174696f6e426c6f636b010010100000000004e4204e65787420746172676574202872656c61792920626c6f636b207768656e20696e666c6174696f6e20697320726563616c63756c61746564285374617274426c6f636b0100101000000000049c2052656c617920626c6f636b207768656e20696e666c6174696f6e206861732073746172746564012d04000458496e666c6174696f6e426c6f636b496e74657276616c101064000000043501204e756d626572206f6620626c6f636b7320746861742070617373206265747765656e2074726561737572792062616c616e636520757064617465732064756520746f20696e666c6174696f6e003c18556e697175650118556e697175652430436861696e56657273696f6e01002c2000000000000000000450205573656420666f72206d6967726174696f6e73404372656174654974656d4261736b657400010402350910040008cc2028436f6c6c656374696f6e2069642028636f6e74726f6c6c65643f32292c2077686f206372656174656420287265616c2929410120544f444f3a204f666620636861696e20776f726b65722073686f756c642072656d6f76652066726f6d2074686973206d6170207768656e20636f6c6c656374696f6e20676574732072656d6f766564444e66745472616e736665724261736b65740001080202390910040004d820436f6c6c656374696f6e2069642028636f6e74726f6c6c65643f32292c20746f6b656e2069642028636f6e74726f6c6c65643f32295846756e6769626c655472616e736665724261736b65740001080205350910040004c420436f6c6c656374696f6e2069642028636f6e74726f6c6c65643f32292c206f776e696e67207573657220287265616c2960526546756e6769626c655472616e736665724261736b657400010c0202053d0910040004d820436f6c6c656374696f6e2069642028636f6e74726f6c6c65643f32292c20746f6b656e2069642028636f6e74726f6c6c65643f32294c546f6b656e50726f70657274794261736b657400010802023909100400045901204c6173742073706f6e736f72696e67206f6620746f6b656e2070726f70657274792073657474696e67202f2f20746f646f3a646f63207265706872617365207468697320616e642074686520666f6c6c6f77696e67404e6674417070726f76654261736b65740001080202390910040004c0204c6173742073706f6e736f72696e67206f66204e465420617070726f76616c20696e206120636f6c6c656374696f6e5446756e6769626c65417070726f76654261736b65740001080205350910040004f0204c6173742073706f6e736f72696e67206f662066756e6769626c6520746f6b656e7320617070726f76616c20696e206120636f6c6c656374696f6e5c526566756e6769626c65417070726f76654261736b657400010c0202053d0910040004c0204c6173742073706f6e736f72696e67206f662052465420617070726f76616c20696e206120636f6c6c656374696f6e0131040034386e657374696e675f62756467657410100500000004fc2041206d6178696d756d206e756d626572206f66206c6576656c73206f6620646570746820696e2074686520746f6b656e206e657374696e6720747265652e686d61785f636f6c6c656374696f6e5f6e616d655f6c656e6774681010400000000494204d6178696d616c206c656e677468206f66206120636f6c6c656374696f6e206e616d652e846d61785f636f6c6c656374696f6e5f6465736372697074696f6e5f6c656e67746810100001000004b0204d6178696d616c206c656e677468206f66206120636f6c6c656374696f6e206465736372697074696f6e2e5c6d61785f746f6b656e5f7072656669785f6c656e6774681010100000000488204d6178696d616c206c656e677468206f66206120746f6b656e207072656669782e5c636f6c6c656374696f6e5f61646d696e735f6c696d6974101005000000047c204d6178696d756d2061646d696e732070657220636f6c6c656374696f6e2e5c6d61785f70726f70657274795f6b65795f6c656e6774681010000100000488204d6178696d616c206c656e677468206f6620612070726f7065727479206b65792e646d61785f70726f70657274795f76616c75655f6c656e6774681010008000000490204d6178696d616c206c656e677468206f6620612070726f70657274792076616c75652e5c6d61785f70726f706572746965735f7065725f6974656d10104000000004982041206d6178696d756d206e756d626572206f6620746f6b656e2070726f706572746965732e786d61785f636f6c6c656374696f6e5f70726f706572746965735f73697a65101000a0000004b0204d6178696d756d2073697a6520666f7220616c6c20636f6c6c656374696f6e2070726f706572746965732e646d61785f746f6b656e5f70726f706572746965735f73697a651010008000000498204d6178696d756d2073697a65206f6620616c6c20746f6b656e2070726f706572746965732e746e66745f64656661756c745f636f6c6c656374696f6e5f6c696d6974735d04840140420f000100080000010001ffffffff0105000000010500000001000101010104782044656661756c74204e465420636f6c6c656374696f6e206c696d69742e747266745f64656661756c745f636f6c6c656374696f6e5f6c696d6974735d04840140420f000100080000010001ffffffff0105000000010500000001000101010104782044656661756c742052465420636f6c6c656374696f6e206c696d69742e7066745f64656661756c745f636f6c6c656374696f6e5f6c696d6974735d04840140420f000100080000010001ffffffff0105000000010500000001000101010104742044656661756c7420465420636f6c6c656374696f6e206c696d69742e0141093d34436f6e66696775726174696f6e0134436f6e66696775726174696f6e1878576569676874546f466565436f656666696369656e744f7665727269646501002c20449004f701540801004c4d696e47617350726963654f7665727269646501002c20788dfa33b4010000008c41707050726f6d6f6d6f74696f6e436f6e66696775726174696f6e4f7665727269646501001505100000000000a4436f6c6c61746f7253656c656374696f6e44657369726564436f6c6c61746f72734f76657272696465010010100a0000000090436f6c6c61746f7253656c656374696f6e4c6963656e7365426f6e644f766572726964650100184000000040eaed7446d09c2c9f0c0000000098436f6c6c61746f7253656c656374696f6e4b69636b5468726573686f6c644f76657272696465010010102c01000000010d0501d105207444656661756c74576569676874546f466565436f656666696369656e742c20449004f701540801004844656661756c744d696e47617350726963652c20788dfa33b401000000584d617858636d416c6c6f7765644c6f636174696f6e73101010000000005441707050726f6d6f74696f6e4461696c79526174651d051020a10700003844617952656c6179426c6f636b73101040380000009044656661756c74436f6c6c61746f7253656c656374696f6e4d6178436f6c6c61746f727310100a000000008c44656661756c74436f6c6c61746f7253656c656374696f6e4c6963656e7365426f6e64184000000040eaed7446d09c2c9f0c000000009444656661756c74436f6c6c61746f7253656c656374696f6e4b69636b5468726573686f6c6410102c010000000145093f204368617267696e6700000000004018436f6d6d6f6e0118436f6d6d6f6e245843726561746564436f6c6c656374696f6e436f756e740100890410000000000469012053746f72616765206f662074686520636f756e74206f66206372656174656420636f6c6c656374696f6e732e20457373656e7469616c6c7920636f6e7461696e7320746865206c61737420636f6c6c656374696f6e2049442e6044657374726f796564436f6c6c656374696f6e436f756e7401008904100000000004b42053746f72616765206f662074686520636f756e74206f662064656c6574656420636f6c6c656374696f6e732e38436f6c6c656374696f6e427949640001040289044909040004702053746f72616765206f6620636f6c6c656374696f6e20696e666f2e50436f6c6c656374696f6e50726f7065727469657301010402890451092400000000000000000004882053746f72616765206f6620636f6c6c656374696f6e2070726f706572746965732e74436f6c6c656374696f6e50726f70657274795065726d697373696f6e730101040289046909040004dc2053746f72616765206f6620746f6b656e2070726f7065727479207065726d697373696f6e73206f66206120636f6c6c656374696f6e2e2c41646d696e416d6f756e7401010402890410100000000004b02053746f72616765206f662074686520616d6f756e74206f6620636f6c6c656374696f6e2061646d696e732e1c497341646d696e01010802027d0935010400046c204c697374206f6620636f6c6c656374696f6e2061646d696e732e24416c6c6f776c69737401010802027d0935010400047820416c6c6f776c697374656420636f6c6c656374696f6e2075736572732e4444756d6d7953746f7261676556616c7565000081090400040501204e6f74207573656420627920636f64652c20657869737473206f6e6c7920746f2070726f7669646520736f6d6520747970657320746f206d657461646174612e0001d5050c5c436f6c6c656374696f6e4372656174696f6e507269636518400000c84e676dc11b000000000000000004882053657420707269636520746f20637265617465206120636f6c6c656374696f6e2e3c436f6e7472616374416464726573736503506c4e9fe1ae37a41e93cee429e8e1881abdcbb54f041901204164647265737320756e6465722077686963682074686520436f6c6c656374696f6e48656c70657220636f6e747261637420776f756c6420626520617661696c61626c652e5c636f6c6c656374696f6e5f61646d696e735f6c696d6974101005000000047c204d6178696d756d2061646d696e732070657220636f6c6c656374696f6e2e01c509422046756e6769626c65012046756e6769626c650c2c546f74616c537570706c7901010405890418400000000000000000000000000000000004d420546f74616c20616d6f756e74206f662066756e6769626c6520746f6b656e7320696e73696465206120636f6c6c656374696f6e2e1c42616c616e636501010805027d0918400000000000000000000000000000000004e820416d6f756e74206f6620746f6b656e73206f776e656420627920616e206163636f756e7420696e73696465206120636f6c6c656374696f6e2e24416c6c6f77616e636501010c050002c9091840000000000000000000000000000000000405012053746f7261676520666f72206173736574732064656c65676174656420746f2061206c696d6974656420657874656e7420746f206f746865722075736572732e00000001cd094328526566756e6769626c650128526566756e6769626c652430546f6b656e734d696e74656401010405890410100000000004bc20546f74616c20616d6f756e74206f66206d696e74656420746f6b656e7320696e206120636f6c6c656374696f6e2e2c546f6b656e734275726e7401010405890410100000000004a020416d6f756e74206f6620746f6b656e73206275726e7420696e206120636f6c6c656374696f6e2e3c546f6b656e50726f7065727469657300010805053909d109040004cc20416d6f756e74206f6620706965636573206120726566756e6769626c6520746f6b656e2069732073706c697420696e746f2e2c546f74616c537570706c7901010805053909184000000000000000000000000000000000048420546f74616c20616d6f756e74206f662070696563657320666f7220746f6b656e144f776e656401010c050205d5093501040004ac205573656420746f20656e756d657261746520746f6b656e73206f776e6564206279206163636f756e742e384163636f756e7442616c616e636501010805027d0910100000000004450120416d6f756e74206f6620746f6b656e7320286e6f742070696563657329207061727469616c6c79206f776e656420627920616e206163636f756e742077697468696e206120636f6c6c656374696f6e2e1c42616c616e636501010c050502d90918400000000000000000000000000000000004a420416d6f756e74206f6620746f6b656e20706965636573206f776e6564206279206163636f756e742e24416c6c6f77616e636501011005050002dd0918400000000000000000000000000000000004e50120416c6c6f77616e636520736574206279206120746f6b656e206f776e657220666f7220616e6f74686572207573657220746f20706572666f726d206f6e65206f66206365727461696e207472616e73616374696f6e73206f6e2061206e756d626572206f6620706965636573206f66206120746f6b656e2e4c436f6c6c656374696f6e416c6c6f77616e636501010c050202c90935010400048d01205370656e6465722073657420627920612077616c6c6574206f776e6572207468617420636f756c6420706572666f726d206365727461696e207472616e73616374696f6e73206f6e20616c6c20746f6b656e7320696e207468652077616c6c65742e00000001e109442c4e6f6e66756e6769626c65012c4e6f6e66756e6769626c652830546f6b656e734d696e74656401010405890410100000000004bc20546f74616c20616d6f756e74206f66206d696e74656420746f6b656e7320696e206120636f6c6c656374696f6e2e2c546f6b656e734275726e7401010405890410100000000004a020416d6f756e74206f66206275726e7420746f6b656e7320696e206120636f6c6c656374696f6e2e24546f6b656e4461746100010805053909e509040004c020546f6b656e20646174612c207573656420746f207061727469616c6c79206465736372696265206120746f6b656e2e3c546f6b656e50726f7065727469657300010805053909d109040004f0204d6170206f66206b65792d76616c75652070616972732c2064657363726962696e6720746865206d65746164617461206f66206120746f6b656e2e48546f6b656e41757850726f7065727469657300011005050505e909f109040024d020437573746f6d2064617461206f66206120746f6b656e20746861742069732073657269616c697a656420746f2062797465732cb0207072696d6172696c7920726573657276656420666f72206f6e2d636861696e206f7065726174696f6e732cac206e6f726d616c6c79206f627363757265642066726f6d207468652065787465726e616c2075736572732e00c420417578696c696172792070726f706572746965732061726520736c696768746c7920646966666572656e742066726f6dd420757375616c205b60546f6b656e50726f70657274696573605d2064756520746f20616e20756e6c696d69746564206e756d626572d820616e642073657061726174656c792073746f72656420616e64207772697474656e2d746f206b65792d76616c75652070616972732e00482043757272656e746c7920756e757365642e144f776e656401010c050205d5093501040004ac205573656420746f20656e756d657261746520746f6b656e73206f776e6564206279206163636f756e742e34546f6b656e4368696c6472656e01010c050505f509350104000490205573656420746f20656e756d657261746520746f6b656e2773206368696c6472656e2e384163636f756e7442616c616e636501010805027d0910100000000004d820416d6f756e74206f6620746f6b656e73206f776e656420627920616e206163636f756e7420696e206120636f6c6c656374696f6e2e24416c6c6f77616e6365000108050539094d040400048d0120416c6c6f77616e636520736574206279206120746f6b656e206f776e657220666f7220616e6f74686572207573657220746f20706572666f726d206f6e65206f66206365727461696e207472616e73616374696f6e73206f6e206120746f6b656e2e4c436f6c6c656374696f6e416c6c6f77616e636501010c050202c90935010400049101204f70657261746f722073657420627920612077616c6c6574206f776e6572207468617420636f756c6420706572666f726d206365727461696e207472616e73616374696f6e73206f6e20616c6c20746f6b656e7320696e207468652077616c6c65742e00000001f90945245374727563747572650001290501d9050001fd09463041707050726f6d6f74696f6e013041707050726f6d6f74696f6e182c546f74616c5374616b6564010018400000000000000000000000000000000004802053746f7265732074686520746f74616c207374616b656420616d6f756e742e1441646d696e00000004000485012053746f72657320746865206061646d696e60206163636f756e742e20536f6d652065787472696e736963732063616e206f6e6c7920626520657865637574656420696620746865792077657265207369676e6564206279206061646d696e602e185374616b65640101080205010a050a5000000000000000000000000000000000000000001809012053746f7265732074686520616d6f756e74206f6620746f6b656e73207374616b6564206279206163636f756e7420696e2074686520626c6f636b6e756d6265722e0074202a202a2a4b6579312a2a202d205374616b6572206163636f756e742ee4202a202a2a4b6579322a2a202d2052656c617920626c6f636b206e756d626572207768656e20746865207374616b6520776173206d6164652ed4202a202a2a2842616c616e63652c20426c6f636b4e756d626572292a2a202d2042616c616e6365206f6620746865207374616b652e490120546865206e756d626572206f66207468652072656c617920626c6f636b20696e207768696368207765206d75737420706572666f726d2074686520696e74657265737420726563616c63756c6174696f6e405374616b65735065724163636f756e74010104020008040010c42053746f726573206e756d626572206f66207374616b65207265636f72647320666f7220616e20604163636f756e74602e0070202a202a2a4b65792a2a202d205374616b6572206163636f756e742e80202a202a2a56616c75652a2a202d20416d6f756e74206f66207374616b65732e3850656e64696e67556e7374616b650101040510090a040010a82050656e64696e6720756e7374616b65207265636f72647320666f7220616e20604163636f756e74602e0070202a202a2a4b65792a2a202d205374616b6572206163636f756e742e80202a202a2a56616c75652a2a202d20416d6f756e74206f66207374616b65732e6050726576696f757343616c63756c617465645265636f72640000010a0400082d012053746f7265732061206b657920666f72207265636f726420666f722077686963682074686520726576656e756520726563616c63756c6174696f6e2077617320706572666f726d65642eb90120496620604e6f6e65602c207468656e20726563616c63756c6174696f6e20686173206e6f7420796574206265656e20706572666f726d6564206f722063616c63756c6174696f6e732068617665206265656e20636f6d706c6574656420666f7220616c6c207374616b6572732e012d0501dd05182050616c6c657449644907206170707374616b65041901205468652061707027732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e7420616464726573732e40467265657a654964656e7469666965720501406170707374616b656170707374616b65049420467265657a65206964656e7469666965722075736564206279207468652070616c6c657454526563616c63756c6174696f6e496e74657276616c101040380000044420496e2072656c617920626c6f636b732e3c50656e64696e67496e74657276616c1010e0c40000045420496e2070617261636861696e20626c6f636b732e38496e74657276616c496e636f6d651d051020a107000429012052617465206f662072657475726e20666f7220696e74657276616c20696e20626c6f636b7320646566696e656420696e2060526563616c63756c6174696f6e496e74657276616c602e1c4e6f6d696e616c1840000064a7b3b6e00d0000000000000000047420446563696d616c7320666f7220746865206043757272656e6379602e01110a4934466f726569676e4173736574730134466f726569676e41737365747314484e657874466f726569676e4173736574496401001010000000000c8c204e65787420617661696c61626c6520466f726569676e20417373657449642049442e008c204e657874466f726569676e417373657449643a20466f726569676e4173736574496454466f726569676e41737365744c6f636174696f6e730001040510d404000c84205468652073746f726167657320666f72204d756c74694c6f636174696f6e732e000d0120466f726569676e41737365744c6f636174696f6e733a206d617020466f726569676e41737365744964203d3e204f7074696f6e3c4d756c74694c6f636174696f6e3e544c6f636174696f6e546f43757272656e637949647300010405d41004000c78205468652073746f726167657320666f722043757272656e63794964732e000d01204c6f636174696f6e546f43757272656e63794964733a206d6170204d756c74694c6f636174696f6e203d3e204f7074696f6e3c466f726569676e417373657449643e3841737365744d6574616461746173000104050d01390504000c84205468652073746f726167657320666f722041737365744d65746164617461732e00d82041737365744d65746164617461733a206d6170204173736574496473203d3e204f7074696f6e3c41737365744d657461646174613e30417373657442696e64696e6700010405108904040008dc205468652073746f726167657320666f722061737365747320746f2066756e6769626c6520636f6c6c656374696f6e2062696e64696e670001350501e1050001150a500c45564d010c45564d10304163636f756e74436f64657301010402650334040000504163636f756e74436f6465734d65746164617461000104026503190a0400003c4163636f756e7453746f726167657301010802021d0a30800000000000000000000000000000000000000000000000000000000000000000002c43757272656e744c6f677301009d05040008a0205772697474656e206f6e206c6f672c207265736574206166746572207472616e73616374696f6e942053686f756c6420626520656d707479206265747765656e207472616e73616374696f6e7301450501e5050001210a6420457468657265756d0120457468657265756d181c50656e64696e670100250a040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000450a04000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000590a0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e537461747573657300005d0a04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b48617368010104054905308000000000000000000000000000000000000000000000000000000000000000000034496e6a65637465644e6f6e63650100490580000000000000000000000000000000000000000000000000000000000000000004190120496e6a6563746564207472616e73616374696f6e732073686f756c64206861766520756e69717565206e6f6e63652c20686572652077652073746f72652063757272656e7401610501e9050001610a654445766d436f6465725375627374726174650000000001650a964845766d436f6e747261637448656c70657273014845766d436f6e747261637448656c7065727324144f776e6572010104036503650350000000000000000000000000000000000000000010682053746f7265206f776e657220666f7220636f6e74726163742e0078202a202a2a4b65792a2a202d20636f6e747261637420616464726573732e88202a202a2a56616c75652a2a202d206f776e657220666f7220636f6e74726163742e3853656c6653706f6e736f72696e6701010403650335010400049c20446570726563617465643a20746869732073746f7261676520697320646570726563617465642853706f6e736f72696e67010104056503690a040010982053746f726520666f7220636f6e74726163742073706f6e736f72736869702073746174652e0078202a202a2a4b65792a2a202d20636f6e747261637420616464726573732e84202a202a2a56616c75652a2a202d2073706f6e736f72736869702073746174652e3853706f6e736f72696e674d6f64650001040365036d0a04001c6c2053746f726520666f722073706f6e736f72696e67206d6f64652e00282023232320557361676591012050726566657220746f2064656c65746520636f6c6c656374696f6e2066726f6d2073746f72616765206966206d6f64652063686167656420746f205b6044697361626c6564605d2853706f6e736f72696e674d6f6465543a3a44697361626c6564292e0078202a202a2a4b65792a2a202d20636f6e747261637420616464726573732ed0202a202a2a56616c75652a2a202d205b6073706f6e736f72696e67206d6f6465605d2853706f6e736f72696e674d6f646554292e4c53706f6e736f72696e67526174654c696d69740101040365031010201c000010b42053746f7261676520666f722073706f6e736f72696e672072617465206c696d697420696e20626c6f636b732e0078202a202a2a4b65792a2a202d20636f6e747261637420616464726573732ea8202a202a2a56616c75652a2a202d20616d6f756e74206f662073706f6e736f72656420626c6f636b732e4853706f6e736f72696e674665654c696d6974010104036503710a040014882053746f7261676520666f72206c6173742073706f6e736f72656420626c6f636b2e007c202a202a2a4b6579312a2a202d20636f6e747261637420616464726573732e94202a202a2a4b6579322a2a202d2073706f6e736f726564207573657220616464726573732eac202a202a2a56616c75652a2a202d206c6173742073706f6e736f72656420626c6f636b206e756d6265722e3453706f6e736f724261736b65740001080303810a1004000040416c6c6f776c697374456e61626c6564010104036503350104001c69012053746f7265676520666f7220636f6e7472616374732077697468205b60416c6c6f776c6973746564605d2853706f6e736f72696e674d6f6465543a3a416c6c6f776c6973746564292073706f6e736f72696e67206d6f64652e002820232323205573616765bd012050726566657220746f2064656c65746520636f6c6c656374696f6e2066726f6d2073746f72616765206966206d6f64652063686167656420746f206e6f6e2060416c6c6f776c6973746564602c207468616e20736574202a2a56616c75652a2a20746f202a2a66616c73652a2a2e0078202a202a2a4b65792a2a202d20636f6e747261637420616464726573732e4501202a202a2a56616c75652a2a202d20697320636f6e747261637420696e205b60416c6c6f776c6973746564605d2853706f6e736f72696e674d6f6465543a3a416c6c6f776c697374656429206d6f64652e24416c6c6f776c6973740101080303810a3501040020c02053746f7261676520666f72207573657273207468617420616c6c6f77656420666f722073706f6e736f72736869702e00282023232320557361676539012050726566657220746f2064656c657465207265636f72642066726f6d2073746f726167652069662075736572206e6f206d6f726520616c6c6f77656420666f722073706f6e736f72736869702e007c202a202a2a4b6579312a2a202d20636f6e747261637420616464726573732ec0202a202a2a4b6579322a2a202d2075736572207468617420616c6c6f77656420666f722073706f6e736f72736869702ea4202a202a2a56616c75652a2a202d20616c6c6f77616e636520666f722073706f6e736f72736869702e018905010d06043c436f6e747261637441646472657373650350842899ecf380553e8a4de75bf534cdf6fbf6404904d820416464726573732c20756e646572207768696368206d6167696320636f6e74726163742077696c6c20626520617661696c61626c6501850a975445766d5472616e73616374696f6e5061796d656e740000000000983045766d4d6967726174696f6e013045766d4d6967726174696f6e04404d6967726174696f6e50656e64696e6701010405650335010400000191050111060001890a992c4d61696e74656e616e6365012c4d61696e74656e616e6365041c456e61626c65640100350104000001a50501150600018d0a9a3c42616c616e6365734164617074657200000000009b1c5574696c6974790001a905011906044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01910a9c24546573745574696c730124546573745574696c73081c456e61626c656401003501040000245465737456616c756501001010000000000001b105011d060001950aff990a042840436865636b5370656356657273696f6eb90a1038436865636b547856657273696f6ebd0a1030436865636b47656e65736973c10a3038436865636b4d6f7274616c697479c50a3028436865636b4e6f6e6365cd0aac2c436865636b576569676874d10aac40436865636b4d61696e74656e616e6365d50aac5044697361626c654964656e7469747943616c6c73d90aac604368617267655472616e73616374696f6e5061796d656e74dd0aac6046616b655472616e73616374696f6e46696e616c697a6572e50aace10a","id":"1"}
\ No newline at end of file
js-packages/scripts/src/transfer.nload.tsdiffbeforeafterboth--- a/js-packages/scripts/src/transfer.nload.ts
+++ b/js-packages/scripts/src/transfer.nload.ts
@@ -16,9 +16,9 @@
/* eslint-disable @typescript-eslint/no-floating-promises */
import os from 'os';
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds} from './util';
-import {UniqueHelper} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds} from '@unique/tests/src/util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
import * as notReallyCluster from 'cluster'; // https://github.com/nodejs/node/issues/42271#issuecomment-1063415346
const cluster = notReallyCluster as unknown as notReallyCluster.Cluster;
js-packages/scripts/tsconfig.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/scripts/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../tsconfig.packages.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "dist"
+ },
+ "references": [
+ { "path": "../types/tsconfig.json" },
+ { "path": "../playgrounds/tsconfig.json" },
+ { "path": "../tests/tsconfig.json" }
+ ]
+}
\ No newline at end of file
js-packages/tests/package.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/tests/package.json
@@ -0,0 +1,32 @@
+{
+ "author": "",
+ "license": "SEE LICENSE IN ../../../LICENSE",
+ "description": "Interfaces for interacting with contracts and contract ABIs",
+ "engines": {
+ "node": ">=16"
+ },
+ "name": "@unique/tests",
+ "type": "module",
+ "version": "1.0.0",
+ "main": "",
+ "dependencies": {
+ "rxjs": "^7.8.1",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@types/node": "^20.8.10",
+ "mocha": "^10.1.0",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.1.6"
+ },
+ "scripts": {
+ "setup": "ts-node --esm ./src/util/globalSetup.ts",
+ "setIdentities": "ts-node --esm ./src/util/identitySetter.ts",
+ "checkRelayIdentities": "ts-node --esm ./src/util/relayIdentitiesChecker.ts",
+ "frankenstein": "ts-node --esm ./src/util/frankenstein.ts",
+ "_test": "yarn setup && mocha --timeout 9999999 --loader=ts-node/esm.mjs",
+ "_testParallel": "yarn setup && mocha --timeout 9999999 --parallel --loader=ts-node/esm.mjs",
+ "test": "yarn _test './src/**/*.*test.ts'",
+ "load": "yarn _test './**/*.load.ts'"
+ }
+}
js-packages/tests/src/addCollectionAdmin.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/addCollectionAdmin.test.ts
+++ b/js-packages/tests/src/addCollectionAdmin.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () => {
let donor: IKeyringPair;
js-packages/tests/src/adminTransferAndBurn.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/adminTransferAndBurn.test.ts
+++ b/js-packages/tests/src/adminTransferAndBurn.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from './util/index.js';
describe('Integration Test: ownerCanTransfer allows admins to use only transferFrom/burnFrom:', () => {
let alice: IKeyringPair;
@@ -40,7 +40,7 @@
await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address});
const newTokenOwner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(newTokenOwner.Substrate).to.be.equal(charlie.address);
+ expect(newTokenOwner).to.be.deep.equal({Substrate: charlie.address});
});
itSub('admin burns other user\'s token', async ({helper}) => {
js-packages/tests/src/allowLists.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/allowLists.test.ts
+++ b/js-packages/tests/src/allowLists.test.ts
@@ -14,9 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from './util';
-import {ICollectionPermissions, NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from './util/index.js';
+import type {ICollectionPermissions} from '@unique/playgrounds/src/types.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test ext. Allow list tests', () => {
let alice: IKeyringPair;
@@ -177,7 +178,7 @@
await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});
await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(charlie.address);
+ expect(owner).to.be.deep.equal({Substrate: charlie.address});
});
itSub('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transferFrom.', async ({helper}) => {
@@ -190,7 +191,7 @@
await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(charlie.address);
+ expect(owner).to.be.deep.equal({Substrate: charlie.address});
});
itSub('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer', async ({helper}) => {
@@ -202,7 +203,7 @@
await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(charlie.address);
+ expect(owner).to.be.deep.equal({Substrate: charlie.address});
});
itSub('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transferFrom', async ({helper}) => {
@@ -215,7 +216,7 @@
await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(charlie.address);
+ expect(owner).to.be.deep.equal({Substrate: charlie.address});
});
});
js-packages/tests/src/apiConsts.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/apiConsts.test.ts
+++ b/js-packages/tests/src/apiConsts.test.ts
@@ -15,7 +15,7 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {ApiPromise} from '@polkadot/api';
-import {usingPlaygrounds, itSub, expect, COLLECTION_HELPER, CONTRACT_HELPER} from './util';
+import {usingPlaygrounds, itSub, expect, COLLECTION_HELPER, CONTRACT_HELPER} from './util/index.js';
const MAX_COLLECTION_DESCRIPTION_LENGTH = 256n;
js-packages/tests/src/approve.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/approve.test.ts
+++ b/js-packages/tests/src/approve.test.ts
@@ -14,15 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from './util';
-import {CrossAccountId} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from './util/index.js';
+import {CrossAccountId} from '@unique/playgrounds/src/unique.js';
[
- {method: 'approveToken', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account)},
- {method: 'approveTokenFromEth', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account).toEthereum()},
+ {method: 'approveToken', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account).toICrossAccountId()},
+ {method: 'approveTokenFromEth', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account).toEthereum().toICrossAccountId()},
].map(testCase => {
describe(`Integration Test ${testCase.method}(spender, collection_id, item_id, amount):`, () => {
let alice: IKeyringPair;
@@ -158,7 +158,7 @@
await (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(alice.address);
+ expect(owner).to.be.deep.equal({Substrate: alice.address});
});
itSub('Fungible up to an approved amount', async ({helper}) => {
@@ -201,7 +201,7 @@
await (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(alice.address);
+ expect(owner).to.be.deep.equal({Substrate: alice.address});
const transferTokenFromTx = () => helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
await expect(transferTokenFromTx()).to.be.rejectedWith('common.ApprovedValueTooLow');
});
@@ -559,12 +559,12 @@
await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: charlie.address}, {Substrate: dave.address});
const owner1 = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner1.Substrate).to.be.equal(dave.address);
+ expect(owner1).to.be.deep.equal({Substrate: dave.address});
await helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address});
await helper.nft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: dave.address}, {Substrate: alice.address});
const owner2 = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner2.Substrate).to.be.equal(alice.address);
+ expect(owner2).to.be.deep.equal({Substrate: alice.address});
});
itSub('Fungible up to an approved amount', async ({helper}) => {
js-packages/tests/src/burnItem.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/burnItem.test.ts
+++ b/js-packages/tests/src/burnItem.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from './util/index.js';
describe('integration test: ext. burnItem():', () => {
js-packages/tests/src/change-collection-owner.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/change-collection-owner.test.ts
+++ b/js-packages/tests/src/change-collection-owner.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/burnItemEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/burnItemEvent.test.ts
+++ b/js-packages/tests/src/check-event/burnItemEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Burn Item event ', () => {
js-packages/tests/src/check-event/createCollectionEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/createCollectionEvent.test.ts
+++ b/js-packages/tests/src/check-event/createCollectionEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Create collection event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/createItemEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/createItemEvent.test.ts
+++ b/js-packages/tests/src/check-event/createItemEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Create Item event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/createMultipleItemsEvent.test.ts
+++ b/js-packages/tests/src/check-event/createMultipleItemsEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Create Multiple Items Event event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/destroyCollectionEvent.test.ts
+++ b/js-packages/tests/src/check-event/destroyCollectionEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Destroy collection event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/transferEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/transferEvent.test.ts
+++ b/js-packages/tests/src/check-event/transferEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Transfer event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/check-event/transferFromEvent.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/check-event/transferFromEvent.test.ts
+++ b/js-packages/tests/src/check-event/transferFromEvent.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util';
-import {IEvent} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../util/index.js';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
describe('Transfer event ', () => {
let alice: IKeyringPair;
js-packages/tests/src/collator-selection/collatorSelection.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/collator-selection/collatorSelection.seqtest.ts
+++ b/js-packages/tests/src/collator-selection/collatorSelection.seqtest.ts
@@ -14,12 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util/index.js';
async function nodeAddress(name: string) {
// eslint-disable-next-line require-await
- return await usingPlaygrounds(async (helper, _) => {
+ return await usingPlaygrounds(async (helper) => {
const envNodeStash = `RELAY_UNIQUE_NODE_${name.toUpperCase()}_STASH`;
const nodeStash = process.env[envNodeStash];
@@ -91,7 +91,7 @@
let deltaNode: string;
before(async function() {
- await usingPlaygrounds(async (helper, privateKey) => {
+ await usingPlaygrounds(async (helper) => {
// todo:collator see again if blocks start to be finalized in dev mode
// Skip the collator block production in dev mode, since the blocks are sealed automatically.
if(await helper.arrange.isDevNode()) this.skip();
@@ -137,7 +137,7 @@
let crowd: IKeyringPair[];
before(async function() {
- await usingPlaygrounds(async (helper, privateKey) => {
+ await usingPlaygrounds(async (helper) => {
crowd = await helper.arrange.createCrowd(20, 100n, superuser);
// set session keys for everyone
@@ -219,7 +219,7 @@
let crowd: IKeyringPair[];
before(async function() {
- await usingPlaygrounds(async (helper, privateKey) => {
+ await usingPlaygrounds(async (helper) => {
crowd = await helper.arrange.createCrowd(20, 100n, superuser);
// set session keys for everyone
js-packages/tests/src/collator-selection/identity.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/collator-selection/identity.seqtest.ts
+++ b/js-packages/tests/src/collator-selection/identity.seqtest.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util';
-import {UniqueHelper} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
async function getIdentities(helper: UniqueHelper) {
const identities: [string, any][] = [];
js-packages/tests/src/confirmSponsorship.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/confirmSponsorship.test.ts
+++ b/js-packages/tests/src/confirmSponsorship.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
async function setSponsorHelper(collection: any, signer: IKeyringPair, sponsorAddress: string) {
await collection.setSponsor(signer, sponsorAddress);
js-packages/tests/src/connection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/connection.test.ts
+++ b/js-packages/tests/src/connection.test.ts
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itSub, expect, usingPlaygrounds} from './util';
+import {itSub, expect, usingPlaygrounds} from './util/index.js';
describe('Connection smoke test', () => {
itSub('Connection can be established', async ({helper}) => {
js-packages/tests/src/createCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/createCollection.test.ts
+++ b/js-packages/tests/src/createCollection.test.ts
@@ -14,10 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets} from './util';
-import {CollectionFlag, ICollectionCreationOptions, IProperty} from './util/playgrounds/types';
-import {UniqueHelper} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets} from './util/index.js';
+import {CollectionFlag} from '@unique/playgrounds/src/types.js';
+import type {ICollectionCreationOptions, IProperty} from '@unique/playgrounds/src/types.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
async function mintCollectionHelper(helper: UniqueHelper, signer: IKeyringPair, options: ICollectionCreationOptions, type?: 'nft' | 'fungible' | 'refungible') {
let collection;
js-packages/tests/src/createItem.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/createItem.test.ts
+++ b/js-packages/tests/src/createItem.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets} from './util';
-import {IProperty, ICrossAccountId} from './util/playgrounds/types';
-import {UniqueHelper} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets} from './util/index.js';
+import type {IProperty, ICrossAccountId} from '@unique/playgrounds/src/types.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
async function mintTokenHelper(helper: UniqueHelper, collection: any, signer: IKeyringPair, owner: ICrossAccountId, type: 'nft' | 'fungible' | 'refungible'='nft', properties?: IProperty[]) {
let token;
js-packages/tests/src/createMultipleItems.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/createMultipleItems.test.ts
+++ b/js-packages/tests/src/createMultipleItems.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, Pallets, itSub} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, Pallets, itSub} from './util/index.js';
describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
let alice: IKeyringPair;
@@ -44,7 +44,7 @@
const tokens = await helper.nft.mintMultipleTokensWithOneOwner(alice, collection.collectionId, {Substrate: alice.address}, args);
for(const [i, token] of tokens.entries()) {
const tokenData = await token.getData();
- expect(tokenData?.normalizedOwner.Substrate).to.be.deep.equal(helper.address.normalizeSubstrate(alice.address));
+ expect(tokenData?.normalizedOwner).to.be.deep.equal({Substrate: helper.address.normalizeSubstrate(alice.address)});
expect(tokenData?.properties[0].value).to.be.equal(args[i].properties[0].value);
}
});
@@ -112,7 +112,7 @@
const tokens = await helper.nft.mintMultipleTokensWithOneOwner(alice, collection.collectionId, {Substrate: alice.address}, args);
for(const [i, token] of tokens.entries()) {
const tokenData = await token.getData();
- expect(tokenData?.normalizedOwner.Substrate).to.be.deep.equal(helper.address.normalizeSubstrate(alice.address));
+ expect(tokenData?.normalizedOwner).to.be.deep.equal({Substrate: helper.address.normalizeSubstrate(alice.address)});
expect(tokenData?.properties[0].value).to.be.equal(args[i].properties[0].value);
}
});
@@ -134,7 +134,7 @@
const tokens = await helper.nft.mintMultipleTokensWithOneOwner(alice, collection.collectionId, {Substrate: alice.address}, args);
for(const [i, token] of tokens.entries()) {
const tokenData = await token.getData();
- expect(tokenData?.normalizedOwner.Substrate).to.be.deep.equal(helper.address.normalizeSubstrate(alice.address));
+ expect(tokenData?.normalizedOwner).to.be.deep.equal({Substrate: helper.address.normalizeSubstrate(alice.address)});
expect(tokenData?.properties[0].value).to.be.equal(args[i].properties[0].value);
}
});
@@ -156,7 +156,7 @@
const tokens = await helper.nft.mintMultipleTokensWithOneOwner(alice, collection.collectionId, {Substrate: alice.address}, args);
for(const [i, token] of tokens.entries()) {
const tokenData = await token.getData();
- expect(tokenData?.normalizedOwner.Substrate).to.be.equal(helper.address.normalizeSubstrate(alice.address));
+ expect(tokenData?.normalizedOwner).to.be.deep.equal({Substrate: helper.address.normalizeSubstrate(alice.address)});
expect(tokenData?.properties[0].value).to.be.equal(args[i].properties[0].value);
}
});
js-packages/tests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/createMultipleItemsEx.test.ts
+++ b/js-packages/tests/src/createMultipleItemsEx.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, Pallets, itSub} from './util';
-import {IProperty} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, Pallets, itSub} from './util/index.js';
+import type {IProperty} from '@unique/playgrounds/src/types.js';
describe('Integration Test: createMultipleItemsEx', () => {
let alice: IKeyringPair;
js-packages/tests/src/creditFeesToTreasury.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/creditFeesToTreasury.seqtest.ts
+++ b/js-packages/tests/src/creditFeesToTreasury.seqtest.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import './interfaces/augment-api-consts';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {ApiPromise} from '@polkadot/api';
-import {usingPlaygrounds, expect, itSub} from './util';
+import {usingPlaygrounds, expect, itSub} from './util/index.js';
+import type {u32} from '@polkadot/types-codec';
const TREASURY = '5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z';
const saneMinimumFee = 0.05;
@@ -29,7 +29,8 @@
/*eslint no-async-promise-executor: "off"*/
function skipInflationBlock(api: ApiPromise): Promise<void> {
const promise = new Promise<void>(async (resolve) => {
- const blockInterval = api.consts.inflation.inflationBlockInterval.toNumber();
+ const inflationBlockInterval = api.consts.inflation.inflationBlockInterval as u32;
+ const blockInterval = inflationBlockInterval.toNumber();
const unsubscribe = await api.rpc.chain.subscribeNewHeads(head => {
const currentBlock = head.number.toNumber();
if(currentBlock % blockInterval < blockInterval - 10) {
js-packages/tests/src/destroyCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/destroyCollection.test.ts
+++ b/js-packages/tests/src/destroyCollection.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, expect, usingPlaygrounds, Pallets} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, expect, usingPlaygrounds, Pallets} from './util/index.js';
describe('integration test: ext. destroyCollection():', () => {
let alice: IKeyringPair;
js-packages/tests/src/enableDisableTransfer.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/enableDisableTransfer.test.ts
+++ b/js-packages/tests/src/enableDisableTransfer.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
describe('Enable/Disable Transfers', () => {
let alice: IKeyringPair;
js-packages/tests/src/eth/allowlist.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/allowlist.test.ts
+++ b/js-packages/tests/src/eth/allowlist.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets} from '../util';
-import {itEth, usingEthPlaygrounds, expect, SponsoringMode} from './util';
-import {CreateCollectionData} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets} from '../util/index.js';
+import {itEth, usingEthPlaygrounds, expect, SponsoringMode} from './util/index.js';
+import {CreateCollectionData} from './util/playgrounds/types.js';
describe('EVM contract allowlist', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/base.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/base.test.ts
+++ b/js-packages/tests/src/eth/base.test.ts
@@ -14,8 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {EthUniqueHelper, itEth, usingEthPlaygrounds, expect} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
describe('Contract calls', () => {
js-packages/tests/src/eth/collectionAdmin.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/collectionAdmin.test.ts
+++ b/js-packages/tests/src/eth/collectionAdmin.test.ts
@@ -13,13 +13,13 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {expect} from 'chai';
-import {Pallets} from '../util';
-import {IEthCrossAccountId} from '../util/playgrounds/types';
-import {usingEthPlaygrounds, itEth} from './util';
-import {EthUniqueHelper} from './util/playgrounds/unique.dev';
-import {CreateCollectionData} from './util/playgrounds/types';
+import {Pallets} from '../util/index.js';
+import type {IEthCrossAccountId} from '@unique/playgrounds/src/types.js';
+import {usingEthPlaygrounds, itEth} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import {CreateCollectionData} from './util/playgrounds/types.js';
async function recordEthFee(helper: EthUniqueHelper, userAddress: string, call: () => Promise<any>) {
const before = await helper.balance.getSubstrate(helper.address.ethToSubstrate(userAddress));
js-packages/tests/src/eth/collectionHelperAddress.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/collectionHelperAddress.test.ts
+++ b/js-packages/tests/src/eth/collectionHelperAddress.test.ts
@@ -14,15 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itEth, usingEthPlaygrounds, expect} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {COLLECTION_HELPER, Pallets} from '../util';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {COLLECTION_HELPER, Pallets} from '../util/index.js';
describe('[eth]CollectionHelperAddress test: ERC20/ERC721 ', () => {
let donor: IKeyringPair;
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
js-packages/tests/src/eth/collectionLimits.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/collectionLimits.test.ts
+++ b/js-packages/tests/src/eth/collectionLimits.test.ts
@@ -1,7 +1,7 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {CollectionLimitField, CreateCollectionData} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {CollectionLimitField, CreateCollectionData} from './util/playgrounds/types.js';
describe('Can set collection limits', () => {
js-packages/tests/src/eth/collectionProperties.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/collectionProperties.test.ts
+++ b/js-packages/tests/src/eth/collectionProperties.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itEth, usingEthPlaygrounds, expect} from './util';
-import {Pallets} from '../util';
-import {IProperty, ITokenPropertyPermission} from '../util/playgrounds/types';
-import {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
+import {Pallets} from '../util/index.js';
+import type {IProperty, ITokenPropertyPermission} from '@unique/playgrounds/src/types.js';
+import type {IKeyringPair} from '@polkadot/types/types';
describe('EVM collection properties', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/collectionSponsoring.test.ts
+++ b/js-packages/tests/src/eth/collectionSponsoring.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../util/index';
-import {itEth, expect} from './util';
-import {CollectionLimitField, TokenPermissionField} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../util/index.js';
+import {itEth, expect} from './util/index.js';
+import {CollectionLimitField, TokenPermissionField} from './util/playgrounds/types.js';
describe('evm nft collection sponsoring', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/contractSponsoring.test.ts
+++ b/js-packages/tests/src/eth/contractSponsoring.test.ts
@@ -14,11 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {EthUniqueHelper} from './util/playgrounds/unique.dev';
-import {itEth, expect, SponsoringMode, usingEthPlaygrounds} from './util';
-import {usingPlaygrounds} from '../util';
-import {CompiledContract} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import {itEth, expect, SponsoringMode, usingEthPlaygrounds} from './util/index.js';
+import {usingPlaygrounds} from '../util/index.js';
+import type {CompiledContract} from './util/playgrounds/types.js';
describe('Sponsoring EVM contracts', () => {
let donor: IKeyringPair;
@@ -433,7 +433,7 @@
callerBalanceBefore = callerBalanceAfter;
};
- const gasPrice = BigInt(await helper.eth.getGasPrice());
+ const gasPrice = BigInt((await helper.eth.getGasPrice())!);
await flip(gasPrice);
await flip(gasPrice * 2n);
await flip(gasPrice * 21n / 10n);
js-packages/tests/src/eth/createCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createCollection.test.ts
+++ b/js-packages/tests/src/eth/createCollection.test.ts
@@ -14,12 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {evmToAddress} from '@polkadot/util-crypto';
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {CREATE_COLLECTION_DATA_DEFAULTS, CollectionLimitField, CollectionMode, CreateCollectionData, TokenPermissionField, emptyAddress} from './util/playgrounds/types';
-import {CollectionFlag, IEthCrossAccountId, TCollectionMode} from '../util/playgrounds/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {CREATE_COLLECTION_DATA_DEFAULTS, CollectionLimitField, CollectionMode, CreateCollectionData, TokenPermissionField, emptyAddress} from './util/playgrounds/types.js';
+import {CollectionFlag} from '@unique/playgrounds/src/types.js';
+import type {IEthCrossAccountId, TCollectionMode} from '@unique/playgrounds/src/types.js';
const DECIMALS = 18;
const CREATE_COLLECTION_DATA_DEFAULTS_ARRAY = [
js-packages/tests/src/eth/createFTCollection.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createFTCollection.seqtest.ts
+++ b/js-packages/tests/src/eth/createFTCollection.seqtest.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
const DECIMALS = 18;
js-packages/tests/src/eth/createFTCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createFTCollection.test.ts
+++ b/js-packages/tests/src/eth/createFTCollection.test.ts
@@ -14,11 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {evmToAddress} from '@polkadot/util-crypto';
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {CollectionLimitField} from './util/playgrounds/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {CollectionLimitField} from './util/playgrounds/types.js';
const DECIMALS = 18;
js-packages/tests/src/eth/createNFTCollection.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createNFTCollection.seqtest.ts
+++ b/js-packages/tests/src/eth/createNFTCollection.seqtest.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itEth, usingEthPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
describe('Create NFT collection from EVM', () => {
js-packages/tests/src/eth/createNFTCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createNFTCollection.test.ts
+++ b/js-packages/tests/src/eth/createNFTCollection.test.ts
@@ -15,10 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {evmToAddress} from '@polkadot/util-crypto';
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {CollectionLimitField} from './util/playgrounds/types';
-import {COLLECTION_HELPER} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {CollectionLimitField} from './util/playgrounds/types.js';
describe('Create NFT collection from EVM', () => {
js-packages/tests/src/eth/createRFTCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/createRFTCollection.test.ts
+++ b/js-packages/tests/src/eth/createRFTCollection.test.ts
@@ -15,10 +15,10 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {evmToAddress} from '@polkadot/util-crypto';
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {CollectionLimitField} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {CollectionLimitField} from './util/playgrounds/types.js';
describe('Create RFT collection from EVM', () => {
js-packages/tests/src/eth/crossTransfer.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/crossTransfer.test.ts
+++ b/js-packages/tests/src/eth/crossTransfer.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itEth, usingEthPlaygrounds} from './util';
-import {CrossAccountId} from '../util/playgrounds/unique';
-import {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds} from './util/index.js';
+import {CrossAccountId} from '@unique/playgrounds/src/unique.js';
+import type {IKeyringPair} from '@polkadot/types/types';
describe('Token transfer between substrate address and EVM address. Fungible', () => {
let donor: IKeyringPair;
@@ -32,15 +32,16 @@
});
itEth('The private key X create a substrate address. Alice sends a token to the corresponding EVM address, and X can send it to Bob in the substrate', async ({helper}) => {
- const bobCA = CrossAccountId.fromKeyring(bob);
- const charlieCA = CrossAccountId.fromKeyring(charlie);
+ const bobCA = CrossAccountId.fromKeyring(bob).toICrossAccountId();
+ const charlieCA = CrossAccountId.fromKeyring(charlie).toICrossAccountId();
+ const charlieCAEth = CrossAccountId.fromKeyring(charlie).toEthereum().toICrossAccountId();
const collection = await helper.ft.mintCollection(alice);
await collection.setLimits(alice, {ownerCanTransfer: true});
await collection.mint(alice, 200n);
- await collection.transfer(alice, charlieCA.toEthereum(), 200n);
- await collection.transferFrom(alice, charlieCA.toEthereum(), charlieCA, 50n);
+ await collection.transfer(alice, charlieCAEth, 200n);
+ await collection.transferFrom(alice, charlieCAEth, charlieCA, 50n);
await collection.transfer(charlie, bobCA, 50n);
});
@@ -56,8 +57,8 @@
await collection.mint(alice, 200n, {Ethereum: aliceProxy});
await contract.methods.transfer(bobProxy, 50).send({from: aliceProxy});
- await collection.transferFrom(alice, {Ethereum: bobProxy}, CrossAccountId.fromKeyring(bob), 50n);
- await collection.transfer(bob, CrossAccountId.fromKeyring(alice), 50n);
+ await collection.transferFrom(alice, {Ethereum: bobProxy}, CrossAccountId.fromKeyring(bob).toICrossAccountId(), 50n);
+ await collection.transfer(bob, CrossAccountId.fromKeyring(alice).toICrossAccountId(), 50n);
});
});
@@ -75,14 +76,14 @@
});
itEth('The private key X create a substrate address. Alice sends a token to the corresponding EVM address, and X can send it to Bob in the substrate', async ({helper}) => {
- const charlieEth = CrossAccountId.fromKeyring(charlie, 'Ethereum');
+ const charlieEth = CrossAccountId.fromKeyring(charlie, 'Ethereum').toICrossAccountId();
const collection = await helper.nft.mintCollection(alice);
await collection.setLimits(alice, {ownerCanTransfer: true});
const token = await collection.mintToken(alice);
await token.transfer(alice, charlieEth);
- await token.transferFrom(alice, charlieEth, CrossAccountId.fromKeyring(charlie));
- await token.transfer(charlie, CrossAccountId.fromKeyring(bob));
+ await token.transferFrom(alice, charlieEth, CrossAccountId.fromKeyring(charlie).toICrossAccountId());
+ await token.transfer(charlie, CrossAccountId.fromKeyring(bob).toICrossAccountId());
});
itEth('The private key X create a EVM address. Alice sends a token to the substrate address corresponding to this EVM address, and X can send it to Bob in the EVM', async ({helper}) => {
js-packages/tests/src/eth/destroyCollection.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/destroyCollection.test.ts
+++ b/js-packages/tests/src/eth/destroyCollection.test.ts
@@ -14,11 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {TCollectionMode} from '../util/playgrounds/types';
-import {CreateCollectionData} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {TCollectionMode} from '@unique/playgrounds/src/types.js';
+import {CreateCollectionData} from './util/playgrounds/types.js';
describe('Destroy Collection from EVM', function() {
let donor: IKeyringPair;
js-packages/tests/src/eth/ethFeesAreCorrect.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/ethFeesAreCorrect.test.ts
+++ b/js-packages/tests/src/eth/ethFeesAreCorrect.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://witww.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itEth, usingEthPlaygrounds, expect} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
describe('Eth fees are correct', () => {
let donor: IKeyringPair;
@@ -44,7 +44,7 @@
const contract = helper.ethNativeContract.collection(collectionAddress, 'nft', owner);
const balanceBeforeWeb3Transfer = await helper.balance.getEthereum(owner);
- await contract.methods.transfer(receiver, tokenA).send({from: owner, maxFeePerGas: (await helper.eth.getGasPrice()).toString()});
+ await contract.methods.transfer(receiver, tokenA).send({from: owner, maxFeePerGas: ((await helper.eth.getGasPrice())!).toString()});
const balanceAfterWeb3Transfer = await helper.balance.getEthereum(owner);
const web3Diff = balanceBeforeWeb3Transfer - balanceAfterWeb3Transfer;
js-packages/tests/src/eth/events.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/events.test.ts
+++ b/js-packages/tests/src/eth/events.test.ts
@@ -15,11 +15,13 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {expect} from 'chai';
-import {IKeyringPair} from '@polkadot/types/types';
-import {EthUniqueHelper, itEth, usingEthPlaygrounds} from './util';
-import {IEvent, TCollectionMode} from '../util/playgrounds/types';
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {CollectionLimitField, TokenPermissionField, NormalizedEvent, CreateCollectionData} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import type {IEvent, TCollectionMode} from '@unique/playgrounds/src/types.js';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {CollectionLimitField, TokenPermissionField, CreateCollectionData} from './util/playgrounds/types.js';
+import type {NormalizedEvent} from './util/playgrounds/types.js';
let donor: IKeyringPair;
@@ -498,9 +500,9 @@
const mode: TCollectionMode = 'rft';
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds((helper) => {
requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
- const _donor = await privateKey({url: import.meta.url});
+ return Promise.resolve();
});
});
js-packages/tests/src/eth/evmCoder.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/evmCoder.test.ts
+++ b/js-packages/tests/src/eth/evmCoder.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itEth, expect, usingEthPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, expect, usingEthPlaygrounds} from './util/index.js';
const getContractSource = (collectionAddress: string, contractAddress: string): string => `
// SPDX-License-Identifier: MIT
js-packages/tests/src/eth/fractionalizer/fractionalizer.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/fractionalizer/fractionalizer.test.ts
+++ b/js-packages/tests/src/eth/fractionalizer/fractionalizer.test.ts
@@ -17,14 +17,15 @@
import {readFile} from 'fs/promises';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {evmToAddress} from '@polkadot/util-crypto';
import {Contract} from 'web3-eth-contract';
-import {usingEthPlaygrounds, expect, itEth, EthUniqueHelper} from '../util';
-import {CompiledContract} from '../util/playgrounds/types';
-import {requirePalletsOrSkip, Pallets, makeNames} from '../../util';
+import {usingEthPlaygrounds, expect, itEth} from '../util/index.js';
+import {EthUniqueHelper} from '../util/playgrounds/unique.dev.js';
+import type {CompiledContract} from '../util/playgrounds/types.js';
+import {requirePalletsOrSkip, Pallets, makeNames} from '../../util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/tests/src/eth/fungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/fungible.test.ts
+++ b/js-packages/tests/src/eth/fungible.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
describe('Fungible: Plain calls', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/getCode.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/getCode.test.ts
+++ b/js-packages/tests/src/eth/getCode.test.ts
@@ -14,15 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {COLLECTION_HELPER, CONTRACT_HELPER} from '../util';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {COLLECTION_HELPER, CONTRACT_HELPER} from '../util/index.js';
describe('RPC eth_getCode', () => {
let donor: IKeyringPair;
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
js-packages/tests/src/eth/helpersSmoke.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/helpersSmoke.test.ts
+++ b/js-packages/tests/src/eth/helpersSmoke.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
describe('Helpers sanity check', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/marketplace-v2/marketplace.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/marketplace-v2/marketplace.test.ts
+++ b/js-packages/tests/src/eth/marketplace-v2/marketplace.test.ts
@@ -14,12 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import Web3 from 'web3';
+import type {IKeyringPair} from '@polkadot/types/types';
import {readFile} from 'fs/promises';
-import {EthUniqueHelper, SponsoringMode, itEth, usingEthPlaygrounds} from '../util';
-import {makeNames} from '../../util';
+import {SponsoringMode, itEth, usingEthPlaygrounds} from '../util/index.js';
+import {EthUniqueHelper} from '../util/playgrounds/unique.dev.js';
+import {makeNames} from '../../util/index.js';
import {expect} from 'chai';
-import Web3 from 'web3';
const {dirname} = makeNames(import.meta.url);
@@ -54,27 +55,27 @@
},
{
solPath: '@openzeppelin/contracts/utils/introspection/IERC165.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
},
{
solPath: '@openzeppelin/contracts/access/Ownable.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/access/Ownable.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/access/Ownable.sol`,
},
{
solPath: '@openzeppelin/contracts/utils/Context.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,
},
{
solPath: '@openzeppelin/contracts/security/ReentrancyGuard.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol`,
},
{
solPath: '@openzeppelin/contracts/utils/introspection/ERC165Checker.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol`,
},
{
solPath: '@openzeppelin/contracts/token/ERC721/IERC721.sol',
- fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
+ fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
},
{
solPath: '@unique-nft/solidity-interfaces/contracts/CollectionHelpers.sol',
@@ -98,11 +99,12 @@
);
}
- function substrateAddressToHex(sub: Uint8Array| string, web3: Web3) {
+ function substrateAddressToHex(sub: Uint8Array| string, web3: Web3.default) {
if(typeof sub === 'string')
return web3.utils.padLeft(web3.utils.toHex(web3.utils.toBN(sub)), 64);
else if(sub instanceof Uint8Array)
return web3.utils.padLeft(web3.utils.bytesToHex(Array.from(sub)), 64);
+ throw Error('Infallible');
}
itEth('Put + Buy [eth]', async ({helper}) => {
js-packages/tests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/marketplace/marketplace.test.ts
+++ b/js-packages/tests/src/eth/marketplace/marketplace.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {readFile} from 'fs/promises';
-import {itEth, usingEthPlaygrounds, expect, SponsoringMode} from '../util';
-import {makeNames} from '../../util';
+import {itEth, usingEthPlaygrounds, expect, SponsoringMode} from '../util/index.js';
+import {makeNames} from '../../util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/tests/src/eth/migration.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/migration.seqtest.ts
+++ b/js-packages/tests/src/eth/migration.seqtest.ts
@@ -14,11 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Struct} from '@polkadot/types';
-import {IEvent} from '../util/playgrounds/types';
+import type {IEvent} from '@unique/playgrounds/src/types.js';
+import type {InterfaceTypes} from '@polkadot/types/types/registry';
import {ApiPromise} from '@polkadot/api';
const encodeEvent = (api: ApiPromise, pallet: string, palletEvents: string, event: string, fields: any) => {
@@ -32,7 +33,8 @@
data.push(...new Struct(api.registry, {data: metaEvent}, {data: fields}).toU8a());
const typeName = api.registry.lookup.names.find(n => n.endsWith('RuntimeEvent'))!;
- return api.registry.createType(typeName, new Uint8Array(data)).toHex();
+ const obj = api.registry.createType(typeName, new Uint8Array(data)) as InterfaceTypes['RuntimeEvent'];
+ return obj.toHex();
};
describe('EVM Migrations', () => {
js-packages/tests/src/eth/nativeFungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/nativeFungible.test.ts
+++ b/js-packages/tests/src/eth/nativeFungible.test.ts
@@ -14,15 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {UniqueHelper} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
describe('NativeFungible: ERC20 calls', () => {
let donor: IKeyringPair;
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
@@ -128,7 +128,7 @@
let donor: IKeyringPair;
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
js-packages/tests/src/eth/nativeRpc/estimateGas.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/nativeRpc/estimateGas.test.ts
+++ b/js-packages/tests/src/eth/nativeRpc/estimateGas.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itEth, usingEthPlaygrounds} from '../util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {expect, itEth, usingEthPlaygrounds} from '../util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
describe('Ethereum native RPC calls', () => {
@@ -23,7 +23,7 @@
const NATIVE_TOKEN_ADDRESS = '0x17c4e6453cc49aaaaeaca894e6d9683e00000000';
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
js-packages/tests/src/eth/nesting/nest.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/nesting/nest.test.ts
+++ b/js-packages/tests/src/eth/nesting/nest.test.ts
@@ -1,7 +1,8 @@
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Contract} from 'web3-eth-contract';
-import {itEth, EthUniqueHelper, usingEthPlaygrounds, expect} from '../util';
+import {itEth, usingEthPlaygrounds, expect} from '../util/index.js';
+import {EthUniqueHelper} from '../util/playgrounds/unique.dev.js';
const createNestingCollection = async (
helper: EthUniqueHelper,
js-packages/tests/src/eth/nonFungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/nonFungible.test.ts
+++ b/js-packages/tests/src/eth/nonFungible.test.ts
@@ -14,11 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itEth, usingEthPlaygrounds, expect, EthUniqueHelper} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Contract} from 'web3-eth-contract';
-import {ITokenPropertyPermission} from '../util/playgrounds/types';
-import {CREATE_COLLECTION_DATA_DEFAULTS, CollectionMode, CreateCollectionData, TokenPermissionField} from './util/playgrounds/types';
+import type {ITokenPropertyPermission} from '@unique/playgrounds/src/types.js';
+import {CREATE_COLLECTION_DATA_DEFAULTS, TokenPermissionField} from './util/playgrounds/types.js';
describe('Check ERC721 token URI for NFT', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/payable.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/payable.test.ts
+++ b/js-packages/tests/src/eth/payable.test.ts
@@ -14,10 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
-import {itEth, expect, usingEthPlaygrounds, EthUniqueHelper} from './util';
-import {makeNames} from '../util';
+import {itEth, expect, usingEthPlaygrounds} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import {makeNames} from '../util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/tests/src/eth/precompile.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/precompile.test.ts
+++ b/js-packages/tests/src/eth/precompile.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
-import {expect, itEth, usingEthPlaygrounds} from './util';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
describe('Precompiles', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/proxy/fungibleProxy.test.ts
+++ b/js-packages/tests/src/eth/proxy/fungibleProxy.test.ts
@@ -16,9 +16,10 @@
import {expect} from 'chai';
import {readFile} from 'fs/promises';
-import {IKeyringPair} from '@polkadot/types/types';
-import {EthUniqueHelper, itEth, usingEthPlaygrounds} from '../util';
-import {makeNames} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds} from '../util/index.js';
+import {EthUniqueHelper} from '../util/playgrounds/unique.dev.js';
+import {makeNames} from '../../util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/tests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/proxy/nonFungibleProxy.test.ts
+++ b/js-packages/tests/src/eth/proxy/nonFungibleProxy.test.ts
@@ -15,9 +15,10 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {readFile} from 'fs/promises';
-import {IKeyringPair} from '@polkadot/types/types';
-import {EthUniqueHelper, itEth, usingEthPlaygrounds, expect} from '../util';
-import {makeNames} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds, expect} from '../util/index.js';
+import {EthUniqueHelper} from '../util/playgrounds/unique.dev.js';
+import {makeNames} from '../../util/index.js';
const {dirname} = makeNames(import.meta.url);
js-packages/tests/src/eth/proxyContract.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/proxyContract.test.ts
+++ b/js-packages/tests/src/eth/proxyContract.test.ts
@@ -14,9 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
-import {itEth, expect, usingEthPlaygrounds, EthUniqueHelper} from './util';
+import {itEth, expect, usingEthPlaygrounds} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
describe('EVM payable contracts', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/reFungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/reFungible.test.ts
+++ b/js-packages/tests/src/eth/reFungible.test.ts
@@ -14,11 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {ITokenPropertyPermission} from '../util/playgrounds/types';
-import {CREATE_COLLECTION_DATA_DEFAULTS, TokenPermissionField} from './util/playgrounds/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import type {ITokenPropertyPermission} from '@unique/playgrounds/src/types.js';
+import {CREATE_COLLECTION_DATA_DEFAULTS, TokenPermissionField} from './util/playgrounds/types.js';
describe('Refungible: Plain calls', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/reFungibleToken.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/reFungibleToken.test.ts
+++ b/js-packages/tests/src/eth/reFungibleToken.test.ts
@@ -14,9 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {Pallets, requirePalletsOrSkip} from '../util';
-import {EthUniqueHelper, expect, itEth, usingEthPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
+import {Pallets, requirePalletsOrSkip} from '../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Contract} from 'web3-eth-contract';
// FIXME: Need erc721 for ReFubgible.
js-packages/tests/src/eth/scheduling.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/scheduling.test.ts
+++ b/js-packages/tests/src/eth/scheduling.test.ts
@@ -15,14 +15,15 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {expect} from 'chai';
-import {EthUniqueHelper, itSchedEth} from './util';
-import {Pallets, usingPlaygrounds} from '../util';
+import {itSchedEth} from './util/index.js';
+import {EthUniqueHelper} from './util/playgrounds/unique.dev.js';
+import {Pallets, usingPlaygrounds} from '../util/index.js';
describe('Scheduing EVM smart contracts', () => {
before(async () => {
await usingPlaygrounds(async (helper) => {
- await helper.testUtils.enable();
+ await helper.testUtils.enable(Pallets.TestUtils);
});
});
js-packages/tests/src/eth/sponsoring.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/sponsoring.test.ts
+++ b/js-packages/tests/src/eth/sponsoring.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itEth, expect, SponsoringMode} from './util';
-import {usingPlaygrounds} from '../util/index';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, expect, SponsoringMode} from './util/index.js';
+import {usingPlaygrounds} from '../util/index.js';
describe('EVM sponsoring', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/tokenProperties.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/tokenProperties.test.ts
+++ b/js-packages/tests/src/eth/tokenProperties.test.ts
@@ -14,13 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {Contract} from 'web3-eth-contract';
-import {itEth, usingEthPlaygrounds, expect} from './util';
-import {ITokenPropertyPermission} from '../util/playgrounds/types';
-import {Pallets} from '../util';
-import {UniqueNFTCollection, UniqueNFToken, UniqueRFTCollection} from '../util/playgrounds/unique';
-import {CreateCollectionData, TokenPermissionField} from './util/playgrounds/types';
+import {itEth, usingEthPlaygrounds, expect} from './util/index.js';
+import type {ITokenPropertyPermission} from '@unique/playgrounds/src/types.js';
+import {Pallets} from '../util/index.js';
+import {UniqueNFTCollection, UniqueNFToken, UniqueRFTCollection} from '@unique/playgrounds/src/unique.js';
+import {CreateCollectionData, TokenPermissionField} from './util/playgrounds/types.js';
describe('EVM token properties', () => {
let donor: IKeyringPair;
js-packages/tests/src/eth/tokens/callMethodsERC20.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/tokens/callMethodsERC20.test.ts
+++ b/js-packages/tests/src/eth/tokens/callMethodsERC20.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {Pallets, requirePalletsOrSkip} from '../../util';
-import {expect, itEth, usingEthPlaygrounds} from '../util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {CreateCollectionData} from '../util/playgrounds/types';
+import {Pallets, requirePalletsOrSkip} from '../../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from '../util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {CreateCollectionData} from '../util/playgrounds/types.js';
[
{mode: 'ft' as const, requiredPallets: []},
js-packages/tests/src/eth/tokens/callMethodsERC721.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/tokens/callMethodsERC721.test.ts
+++ b/js-packages/tests/src/eth/tokens/callMethodsERC721.test.ts
@@ -14,17 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {Pallets} from '../../util';
-import {expect, itEth, usingEthPlaygrounds} from '../util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {CreateCollectionData} from '../util/playgrounds/types';
+import {Pallets} from '../../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from '../util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {CreateCollectionData} from '../util/playgrounds/types.js';
describe('ERC-721 call methods', () => {
let donor: IKeyringPair;
before(async function() {
- await usingEthPlaygrounds(async (helper, privateKey) => {
+ await usingEthPlaygrounds(async (_, privateKey) => {
donor = await privateKey({url: import.meta.url});
});
});
js-packages/tests/src/eth/tokens/minting.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/tokens/minting.test.ts
+++ b/js-packages/tests/src/eth/tokens/minting.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {Pallets} from '../../util';
-import {expect, itEth, usingEthPlaygrounds} from '../util';
-import {CreateCollectionData} from '../util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {Pallets} from '../../util/index.js';
+import {expect, itEth, usingEthPlaygrounds} from '../util/index.js';
+import {CreateCollectionData} from '../util/playgrounds/types.js';
describe('Minting tokens', () => {
js-packages/tests/src/eth/transferValue.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/transferValue.test.ts
+++ b/js-packages/tests/src/eth/transferValue.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itEth, usingEthPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds} from './util/index.js';
import {expect} from 'chai';
describe('Send value to contract', () => {
js-packages/tests/src/eth/util/index.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/util/index.ts
+++ b/js-packages/tests/src/eth/util/index.ts
@@ -2,20 +2,19 @@
// SPDX-License-Identifier: Apache-2.0
import * as path from 'path';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
-import config from '../../config';
-
-import {EthUniqueHelper} from './playgrounds/unique.dev';
-import {SilentLogger, SilentConsole} from '../../util/playgrounds/unique.dev';
-import {SchedKind, makeNames} from '../../util';
+import config from '../../config.js';
-export {EthUniqueHelper} from './playgrounds/unique.dev';
+import {EthUniqueHelper} from './playgrounds/unique.dev.js';
+import {SilentLogger, SilentConsole} from '@unique/playgrounds/src/unique.dev.js';
+import {makeNames} from '../../util/index.js';
+import type {SchedKind} from '../../util/index.js';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import chaiLike from 'chai-like';
-import {getTestSeed, MINIMUM_DONOR_FUND, requirePalletsOrSkip} from '../../util';
+import {getTestSeed, MINIMUM_DONOR_FUND, requirePalletsOrSkip} from '../../util/index.js';
chai.use(chaiAsPromised);
chai.use(chaiLike);
js-packages/tests/src/eth/util/playgrounds/types.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/util/playgrounds/types.ts
+++ b/js-packages/tests/src/eth/util/playgrounds/types.ts
@@ -1,4 +1,5 @@
-import {CollectionFlag, TCollectionMode} from '../../../util/playgrounds/types';
+import {CollectionFlag} from '@unique/playgrounds/src/types.js';
+import type {TCollectionMode} from '@unique/playgrounds/src/types.js';
export interface ContractImports {
solPath: string;
js-packages/tests/src/eth/util/playgrounds/unique.dev.tsdiffbeforeafterboth--- a/js-packages/tests/src/eth/util/playgrounds/unique.dev.ts
+++ b/js-packages/tests/src/eth/util/playgrounds/unique.dev.ts
@@ -14,11 +14,12 @@
import solc from 'solc';
import {evmToAddress} from '@polkadot/util-crypto';
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
-import {ArrangeGroup, DevUniqueHelper} from '../../../util/playgrounds/unique.dev';
+import {ArrangeGroup, DevUniqueHelper} from '@unique/playgrounds/src/unique.dev.js';
-import {ContractImports, CompiledContract, CrossAddress, NormalizedEvent, EthProperty, CollectionMode, CreateCollectionData} from './types';
+import type {ContractImports, CompiledContract, CrossAddress, NormalizedEvent, EthProperty} from './types.js';
+import {CollectionMode, CreateCollectionData} from './types.js';
// Native contracts ABI
import collectionHelpersAbi from '../../abi/collectionHelpers.json' assert {type: 'json'};
@@ -32,8 +33,7 @@
import refungibleTokenAbi from '../../abi/reFungibleToken.json' assert {type: 'json'};
import refungibleTokenDeprecatedAbi from '../../abi/reFungibleTokenDeprecated.json' assert {type: 'json'};
import contractHelpersAbi from '../../abi/contractHelpers.json' assert {type: 'json'};
-import {ICrossAccountId, TEthereumAccount} from '../../../util/playgrounds/types';
-import {TCollectionMode} from '../../../util/playgrounds/types';
+import type {ICrossAccountId, TEthereumAccount, TCollectionMode} from '@unique/playgrounds/src/types.js';
class EthGroupBase {
helper: EthUniqueHelper;
@@ -192,8 +192,10 @@
let flags = 0;
// convert CollectionFlags to number and join them in one number
- if(!data.flags || typeof data.flags == 'number') {
- flags = data.flags ?? 0;
+ if(!data.flags) {
+ flags = 0;
+ } else if(typeof data.flags == 'number') {
+ flags = data.flags;
} else {
for(let i = 0; i < data.flags.length; i++){
const flag = data.flags[i];
@@ -345,7 +347,7 @@
return this.createCollection(signer, new CreateCollectionData(name, description, tokenPrefix, 'rft')).send();
}
- createFungibleCollection(signer: string, name: string, decimals: number, description: string, tokenPrefix: string): Promise<{ collectionId: number, collectionAddress: string, events: NormalizedEvent[] }> {
+ createFungibleCollection(signer: string, name: string, _decimals: number, description: string, tokenPrefix: string): Promise<{ collectionId: number, collectionAddress: string, events: NormalizedEvent[] }> {
return this.createCollection(signer, new CreateCollectionData(name, description, tokenPrefix, 'ft')).send();
}
@@ -459,7 +461,7 @@
fromCollectionId(collectionId: number): string {
if(collectionId >= 0xffffffff || collectionId < 0) throw new Error('collectionId overflow');
- return Web3.utils.toChecksumAddress(`0x17c4e6453cc49aaaaeaca894e6d9683e${collectionId.toString(16).padStart(8, '0')}`);
+ return (Web3 as any).utils.toChecksumAddress(`0x17c4e6453cc49aaaaeaca894e6d9683e${collectionId.toString(16).padStart(8, '0')}`);
}
extractTokenId(address: string): { collectionId: number, tokenId: number } {
@@ -545,7 +547,7 @@
}
class EthArrangeGroup extends ArrangeGroup {
- helper: EthUniqueHelper;
+ declare helper: EthUniqueHelper;
constructor(helper: EthUniqueHelper) {
super(helper);
@@ -558,7 +560,7 @@
}
}
export class EthUniqueHelper extends DevUniqueHelper {
- web3: Web3 | null = null;
+ web3: Web3.default | null = null;
web3Provider: WebsocketProvider | null = null;
eth: EthGroup;
@@ -567,7 +569,7 @@
ethNativeContract: NativeContractGroup;
ethContract: ContractGroup;
ethProperty: EthPropertyGroup;
- arrange: EthArrangeGroup;
+ declare arrange: EthArrangeGroup;
constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: { [key: string]: any } = {}) {
options.helperBase = options.helperBase ?? EthUniqueHelper;
@@ -582,30 +584,30 @@
super.arrange = this.arrange;
}
- getWeb3(): Web3 {
+ getWeb3(): Web3.default {
if(this.web3 === null) throw Error('Web3 not connected');
return this.web3;
}
connectWeb3(wsEndpoint: string) {
if(this.web3 !== null) return;
- this.web3Provider = new Web3.providers.WebsocketProvider(wsEndpoint);
- this.web3 = new Web3(this.web3Provider);
+ this.web3Provider = new (Web3 as any).providers.WebsocketProvider(wsEndpoint);
+ this.web3 = new (Web3 as any)(this.web3Provider);
}
- async disconnect() {
+ override async disconnect() {
if(this.web3 === null) return;
this.web3Provider?.connection.close();
await super.disconnect();
}
- clearApi() {
+ override clearApi() {
super.clearApi();
this.web3 = null;
}
- clone(helperCls: EthUniqueHelperConstructor, options?: { [key: string]: any; }): EthUniqueHelper {
+ override clone(helperCls: EthUniqueHelperConstructor, options?: { [key: string]: any; }): EthUniqueHelper {
const newHelper = super.clone(helperCls, options) as EthUniqueHelper;
newHelper.web3 = this.web3;
newHelper.web3Provider = this.web3Provider;
js-packages/tests/src/fungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/fungible.test.ts
+++ b/js-packages/tests/src/fungible.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect, requirePalletsOrSkip, Pallets} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect, requirePalletsOrSkip, Pallets} from './util/index.js';
const U128_MAX = (1n << 128n) - 1n;
js-packages/tests/src/getPropertiesRpc.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/getPropertiesRpc.test.ts
+++ b/js-packages/tests/src/getPropertiesRpc.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {UniqueHelper, UniqueNFTCollection} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {UniqueHelper, UniqueNFTCollection} from '@unique/playgrounds/src/unique.js';
const collectionProps = [
{key: 'col-0', value: 'col-0-value'},
js-packages/tests/src/governance/council.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/council.test.ts
+++ b/js-packages/tests/src/governance/council.test.ts
@@ -1,8 +1,9 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
-import {Event} from '../util/playgrounds/unique.dev';
-import {ICounselors, initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, councilMotionDuration, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, initTechComm, clearFellowship, dummyProposal, dummyProposalCall, initFellowship, defaultEnactmentMoment, fellowshipPropositionOrigin} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
+import {Event} from '@unique/playgrounds/src/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, councilMotionDuration, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, initTechComm, clearFellowship, dummyProposal, dummyProposalCall, initFellowship, defaultEnactmentMoment, fellowshipPropositionOrigin} from './util.js';
+import type {ICounselors} from './util.js';
describeGov('Governance: Council tests', () => {
let donor: IKeyringPair;
js-packages/tests/src/governance/democracy.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/democracy.test.ts
+++ b/js-packages/tests/src/governance/democracy.test.ts
@@ -1,7 +1,7 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
-import {clearFellowship, democracyLaunchPeriod, democracyTrackMinRank, dummyProposalCall, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, fellowshipPreparePeriod, fellowshipPropositionOrigin, initFellowship, voteUnanimouslyInFellowship} from './util';
-import {Event} from '../util/playgrounds/unique.dev';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
+import {clearFellowship, democracyLaunchPeriod, democracyTrackMinRank, dummyProposalCall, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, fellowshipPreparePeriod, fellowshipPropositionOrigin, initFellowship, voteUnanimouslyInFellowship} from './util.js';
+import {Event} from '@unique/playgrounds/src/unique.dev.js';
describeGov('Governance: Democracy tests', () => {
let regularUser: IKeyringPair;
js-packages/tests/src/governance/fellowship.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/fellowship.test.ts
+++ b/js-packages/tests/src/governance/fellowship.test.ts
@@ -1,7 +1,8 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
-import {DevUniqueHelper, Event} from '../util/playgrounds/unique.dev';
-import {ICounselors, initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, ITechComms, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, voteUnanimouslyInFellowship, democracyTrackMinRank, fellowshipPreparePeriod, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, democracyTrackId, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
+import {DevUniqueHelper, Event} from '@unique/playgrounds/src/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, voteUnanimouslyInFellowship, democracyTrackMinRank, fellowshipPreparePeriod, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, democracyTrackId, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
+import type {ICounselors, ITechComms} from './util.js';
describeGov('Governance: Fellowship tests', () => {
let members: IKeyringPair[][];
js-packages/tests/src/governance/init.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/init.test.ts
+++ b/js-packages/tests/src/governance/init.test.ts
@@ -1,7 +1,8 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
-import {Event} from '../util/playgrounds/unique.dev';
-import {ICounselors, democracyLaunchPeriod, democracyVotingPeriod, ITechComms, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
+import {Event} from '@unique/playgrounds/src/unique.dev.js';
+import {democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util.js';
+import type {ICounselors, ITechComms} from './util.js';
describeGov('Governance: Initialization', () => {
let donor: IKeyringPair;
js-packages/tests/src/governance/technicalCommittee.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/technicalCommittee.test.ts
+++ b/js-packages/tests/src/governance/technicalCommittee.test.ts
@@ -1,7 +1,8 @@
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';
-import {Event} from '../util/playgrounds/unique.dev';
-import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, ITechComms, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
+import {Event} from '@unique/playgrounds/src/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
+import type {ITechComms} from './util.js';
describeGov('Governance: Technical Committee tests', () => {
let sudoer: IKeyringPair;
@@ -190,11 +191,11 @@
});
- itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async ({helper}) => {
+ itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async () => {
});
- itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async ({helper}) => {
+ itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async () => {
});
@@ -338,7 +339,7 @@
)).to.be.rejectedWith('BadOrigin');
});
- itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async ({helper}) => {
+ itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async () => {
});
js-packages/tests/src/governance/util.tsdiffbeforeafterboth--- a/js-packages/tests/src/governance/util.ts
+++ b/js-packages/tests/src/governance/util.ts
@@ -1,8 +1,9 @@
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {xxhashAsHex} from '@polkadot/util-crypto';
-import {usingPlaygrounds, expect} from '../util';
-import {UniqueHelper} from '../util/playgrounds/unique';
-import {DevUniqueHelper} from '../util/playgrounds/unique.dev';
+import type {u32} from '@polkadot/types-codec';
+import {usingPlaygrounds, expect} from '../util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
+import {DevUniqueHelper} from '@unique/playgrounds/src/unique.dev.js';
export const democracyLaunchPeriod = 35;
export const democracyVotingPeriod = 35;
@@ -173,7 +174,7 @@
export async function clearFellowshipReferenda(sudoer: IKeyringPair) {
await usingPlaygrounds(async (helper) => {
- const proposalsCount = (await helper.getApi().query.fellowshipReferenda.referendumCount());
+ const proposalsCount = (await helper.getApi().query.fellowshipReferenda.referendumCount()) as u32;
for(let i = 0; i < proposalsCount.toNumber(); i++) {
await helper.getSudo().fellowship.referenda.cancel(sudoer, i);
}
js-packages/tests/src/inflation.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/inflation.seqtest.ts
+++ b/js-packages/tests/src/inflation.seqtest.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from './util/index.js';
// todo:playgrounds requires sudo, look into on the later stage
describe('integration test: Inflation', () => {
js-packages/tests/src/limits.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/limits.test.ts
+++ b/js-packages/tests/src/limits.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util/index.js';
describe('Number of tokens per address (NFT)', () => {
let alice: IKeyringPair;
js-packages/tests/src/maintenance.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/maintenance.seqtest.ts
+++ b/js-packages/tests/src/maintenance.seqtest.ts
@@ -14,11 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {ApiPromise} from '@polkadot/api';
-import {expect, itSched, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util';
-import {itEth} from './eth/util';
-import {main as correctState} from './migrations/correctStateAfterMaintenance';
+import {expect, itSched, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util/index.js';
+import {itEth} from './eth/util/index.js';
+import {main as correctState} from './migrations/correctStateAfterMaintenance.js';
+import type {PalletBalancesIdAmount} from '@polkadot/types/lookup';
+import type {Vec} from '@polkadot/types-codec';
async function maintenanceEnabled(api: ApiPromise): Promise<boolean> {
return (await api.query.maintenance.enabled()).toJSON() as boolean;
@@ -319,7 +321,7 @@
expect((await api.query.appPromotion.pendingUnstake(1)).toJSON()).to.be.deep.equal([[superuser.address, '0x00000000000000056bc75e2d63100000']]);
expect((await api.query.appPromotion.pendingUnstake(2)).toJSON()).to.be.deep.equal([[superuser.address, '0x00000000000000056bc75e2d63100000']]);
- expect((await api.query.balances.freezes(superuser.address))
+ expect((await api.query.balances.freezes(superuser.address) as Vec<PalletBalancesIdAmount>)
.map(lock => ({id: lock.id.toUtf8(), amount: lock.amount.toBigInt()})))
.to.be.deep.equal([{id: 'appstakeappstake', amount: 200000000000000000000n}]);
await correctState();
js-packages/tests/src/migrations/942057-appPromotion/executeMigration.tsdiffbeforeafterboth--- a/js-packages/tests/src/migrations/942057-appPromotion/executeMigration.ts
+++ b/js-packages/tests/src/migrations/942057-appPromotion/executeMigration.ts
@@ -1,4 +1,4 @@
-import {migrateLockedToFreeze} from './lockedToFreeze';
+import {migrateLockedToFreeze} from './lockedToFreeze.js';
const WS_RPC = process.env.WS_RPC || 'wss://ws-opal.unique.network:443';
js-packages/tests/src/migrations/942057-appPromotion/index.tsdiffbeforeafterboth--- a/js-packages/tests/src/migrations/942057-appPromotion/index.ts
+++ b/js-packages/tests/src/migrations/942057-appPromotion/index.ts
@@ -1,6 +1,6 @@
-import {Migration} from '../../util/frankensteinMigrate';
-import {collectData} from './collectData';
-import {migrateLockedToFreeze} from './lockedToFreeze';
+import type {Migration} from '../../util/frankensteinMigrate.js';
+import {collectData} from './collectData.js';
+import {migrateLockedToFreeze} from './lockedToFreeze.js';
export const migration: Migration = {
async before() {
@@ -9,4 +9,4 @@
async after() {
await migrateLockedToFreeze();
},
-};
+};
\ No newline at end of file
js-packages/tests/src/migrations/942057-appPromotion/lockedToFreeze.tsdiffbeforeafterboth--- a/js-packages/tests/src/migrations/942057-appPromotion/lockedToFreeze.ts
+++ b/js-packages/tests/src/migrations/942057-appPromotion/lockedToFreeze.ts
@@ -1,10 +1,10 @@
// import { usingApi, privateKey, onlySign } from "./../../load/lib";
import * as fs from 'fs';
-import {usingPlaygrounds} from '../../util';
+import {usingPlaygrounds} from '../../util/index.js';
import path, {dirname} from 'path';
import {isInteger, parse} from 'lossless-json';
import {fileURLToPath} from 'url';
-import config from '../../config';
+import config from '../../config.js';
const WS_ENDPOINT = config.substrateUrl;
js-packages/tests/src/migrations/correctStateAfterMaintenance.tsdiffbeforeafterboth--- a/js-packages/tests/src/migrations/correctStateAfterMaintenance.ts
+++ b/js-packages/tests/src/migrations/correctStateAfterMaintenance.ts
@@ -1,7 +1,6 @@
-import config from '../config';
-import {usingPlaygrounds} from '../util';
-
-
+import config from '../config.js';
+import {usingPlaygrounds} from '../util/index.js';
+import type {u32} from '@polkadot/types-codec';
const WS_ENDPOINT = config.substrateUrl;
const DONOR_SEED = '//Alice';
@@ -20,11 +19,11 @@
const pendingBlocks = (
await api.query.appPromotion.pendingUnstake.entries()
).map(([k, _v]) =>
- k.args[0]);
+ (k.args[0] as u32).toNumber());
- const currentBlock = await api.query.system.number();
+ const currentBlock = (await api.query.system.number() as u32).toNumber();
- const filteredBlocks = pendingBlocks.filter((b) => currentBlock.gt(b));
+ const filteredBlocks = pendingBlocks.filter(b => currentBlock > b);
if(filteredBlocks.length != 0) {
console.log(`During maintenance mode, ${filteredBlocks.length} block(s) were not processed. Number(s): ${filteredBlocks}`);
@@ -45,12 +44,12 @@
await Promise.allSettled(promises.map((p) => p()));
- const failedBlocks: bigint[] = [];
+ const failedBlocks: number[] = [];
let isSuccess = true;
for(const b of filteredBlocks) {
if(((await api.query.appPromotion.pendingUnstake(b)).toJSON() as any[]).length != 0) {
- failedBlocks.push(b.toBigInt());
+ failedBlocks.push(b);
isSuccess = false;
}
}
js-packages/tests/src/migrations/runCheckState.tsdiffbeforeafterboth--- a/js-packages/tests/src/migrations/runCheckState.ts
+++ b/js-packages/tests/src/migrations/runCheckState.ts
@@ -1,4 +1,4 @@
-import {main} from './correctStateAfterMaintenance';
+import {main} from './correctStateAfterMaintenance.js';
main({
wsEndpoint: process.env.WS_RPC!,
js-packages/tests/src/nativeFungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nativeFungible.test.ts
+++ b/js-packages/tests/src/nativeFungible.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from './util/index.js';
describe('Native fungible', () => {
let root: IKeyringPair;
js-packages/tests/src/nesting/collectionProperties.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/collectionProperties.seqtest.ts
+++ b/js-packages/tests/src/nesting/collectionProperties.seqtest.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
describe('Integration Test: Collection Properties with sudo', () => {
let superuser: IKeyringPair;
js-packages/tests/src/nesting/collectionProperties.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/collectionProperties.test.ts
+++ b/js-packages/tests/src/nesting/collectionProperties.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
describe('Integration Test: Collection Properties', () => {
let alice: IKeyringPair;
js-packages/tests/src/nesting/graphs.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/graphs.test.ts
+++ b/js-packages/tests/src/nesting/graphs.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from '../util';
-import {UniqueHelper, UniqueNFTCollection, UniqueNFToken} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from '../util/index.js';
+import {UniqueHelper, UniqueNFTCollection, UniqueNFToken} from '@unique/playgrounds/src/unique.js';
/**
* ```dot
js-packages/tests/src/nesting/propertyPermissions.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/propertyPermissions.test.ts
+++ b/js-packages/tests/src/nesting/propertyPermissions.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect} from '../util';
-import {UniqueNFTCollection, UniqueRFTCollection} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect} from '../util/index.js';
+import {UniqueNFTCollection, UniqueRFTCollection} from '@unique/playgrounds/src/unique.js';
describe('Integration Test: Access Rights to Token Properties', () => {
let alice: IKeyringPair;
js-packages/tests/src/nesting/tokenProperties.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/tokenProperties.seqtest.ts
+++ b/js-packages/tests/src/nesting/tokenProperties.seqtest.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
describe('Integration Test: Token Properties with sudo', () => {
let superuser: IKeyringPair;
js-packages/tests/src/nesting/tokenProperties.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/tokenProperties.test.ts
+++ b/js-packages/tests/src/nesting/tokenProperties.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../util';
-import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../util/index.js';
+import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/src/unique.js';
describe('Integration Test: Token Properties', () => {
let alice: IKeyringPair; // collection owner
js-packages/tests/src/nesting/unnest.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nesting/unnest.test.ts
+++ b/js-packages/tests/src/nesting/unnest.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from '../util';
-import {UniqueFTCollection, UniqueNFToken, UniqueRFToken} from '../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from '../util/index.js';
+import {CrossAccountId, UniqueFTCollection, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/src/unique.js';
describe('Integration Test: Unnesting', () => {
let alice: IKeyringPair;
@@ -304,11 +304,11 @@
// Try to unnest
await expect(nestedToken.unnest(bob, targetToken, {Substrate: alice.address})).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
// Try to burn
await expect(nestedToken.burnFrom(bob, targetToken.nestingAccount())).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
});
// todo another test for creating excessive depth matryoshka with Ethereum?
js-packages/tests/src/nextSponsoring.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/nextSponsoring.test.ts
+++ b/js-packages/tests/src/nextSponsoring.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from './util/index.js';
const SPONSORING_TIMEOUT = 5;
js-packages/tests/src/pallet-presence.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/pallet-presence.test.ts
+++ b/js-packages/tests/src/pallet-presence.test.ts
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {itSub, usingPlaygrounds, expect} from './util';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
// Pallets that must always be present
const requiredPallets = [
js-packages/tests/src/performance.seq.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/performance.seq.test.ts
+++ b/js-packages/tests/src/performance.seq.test.ts
@@ -15,10 +15,10 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {ApiPromise} from '@polkadot/api';
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from './util';
-import {ICrossAccountId, IProperty} from './util/playgrounds/types';
-import {UniqueHelper} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from './util/index.js';
+import type {ICrossAccountId, IProperty} from '@unique/playgrounds/src/types.js';
+import {UniqueHelper} from '@unique/playgrounds/src/unique.js';
describe('Performace tests', () => {
let alice: IKeyringPair;
js-packages/tests/src/refungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/refungible.test.ts
+++ b/js-packages/tests/src/refungible.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from './util/index.js';
const MAX_REFUNGIBLE_PIECES = 1_000_000_000_000_000_000_000n;
js-packages/tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/removeCollectionAdmin.test.ts
+++ b/js-packages/tests/src/removeCollectionAdmin.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test removeCollectionAdmin(collection_id, account_id):', () => {
let alice: IKeyringPair;
js-packages/tests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/removeCollectionSponsor.test.ts
+++ b/js-packages/tests/src/removeCollectionSponsor.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('integration test: ext. removeCollectionSponsor():', () => {
let donor: IKeyringPair;
js-packages/tests/src/rpc.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/rpc.test.ts
+++ b/js-packages/tests/src/rpc.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect} from './util';
-import {CrossAccountId} from './util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect} from './util/index.js';
+import {ICrossAccountId} from '@unique/playgrounds/src/types.js';
describe('integration test: RPC methods', () => {
let donor: IKeyringPair;
@@ -55,9 +55,9 @@
// Set-up over
const owners = await helper.callRpc('api.rpc.unique.tokenOwners', [collection.collectionId, 0]);
- const ids = (owners.toJSON() as any[]).map(CrossAccountId.fromLowerCaseKeys);
+ const ids = owners.toHuman() as ICrossAccountId[];
- expect(ids).to.deep.include.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]);
+ expect(ids).to.have.deep.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]);
expect(owners.length == 10).to.be.true;
// Make sure only 10 results are returned with this RPC
js-packages/tests/src/scheduler.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/scheduler.seqtest.ts
+++ b/js-packages/tests/src/scheduler.seqtest.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {expect, itSched, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util';
-import {IKeyringPair} from '@polkadot/types/types';
-import {DevUniqueHelper, Event} from './util/playgrounds/unique.dev';
+import {expect, itSched, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util/index.js';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {DevUniqueHelper, Event} from '@unique/playgrounds/src/unique.dev.js';
describe('Scheduling token and balance transfers', () => {
let superuser: IKeyringPair;
@@ -32,7 +32,7 @@
const donor = await privateKey({url: import.meta.url});
[alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
- await helper.testUtils.enable();
+ await helper.testUtils.enable(Pallets.TestUtils);
});
});
@@ -571,7 +571,7 @@
const donor = await privateKey({url: import.meta.url});
[alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
- await helper.testUtils.enable();
+ await helper.testUtils.enable(Pallets.TestUtils);
});
});
js-packages/tests/src/setCollectionLimits.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/setCollectionLimits.test.ts
+++ b/js-packages/tests/src/setCollectionLimits.test.ts
@@ -15,9 +15,9 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
const accountTokenOwnershipLimit = 0;
const sponsoredDataSize = 0;
js-packages/tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/setCollectionSponsor.test.ts
+++ b/js-packages/tests/src/setCollectionSponsor.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect, Pallets} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect, Pallets} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('integration test: ext. setCollectionSponsor():', () => {
let alice: IKeyringPair;
js-packages/tests/src/setPermissions.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/setPermissions.test.ts
+++ b/js-packages/tests/src/setPermissions.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test: Set Permissions', () => {
let alice: IKeyringPair;
js-packages/tests/src/sub/appPromotion/appPromotion.seqtest.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/appPromotion/appPromotion.seqtest.ts
+++ b/js-packages/tests/src/sub/appPromotion/appPromotion.seqtest.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, Pallets, requirePalletsOrSkip} from '../../util';
-import {expect} from '../../eth/util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, Pallets, requirePalletsOrSkip} from '../../util/index.js';
+import {expect} from '../../eth/util/index.js';
let superuser: IKeyringPair;
let donor: IKeyringPair;
js-packages/tests/src/sub/appPromotion/appPromotion.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/appPromotion/appPromotion.test.ts
+++ b/js-packages/tests/src/sub/appPromotion/appPromotion.test.ts
@@ -14,12 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {
itSub, usingPlaygrounds, Pallets, requirePalletsOrSkip, LOCKING_PERIOD, UNLOCKING_PERIOD,
-} from '../../util';
-import {DevUniqueHelper} from '../../util/playgrounds/unique.dev';
-import {itEth, expect, SponsoringMode} from '../../eth/util';
+} from '../../util/index.js';
+import {DevUniqueHelper} from '@unique/playgrounds/src/unique.dev.js';
+import {itEth, expect, SponsoringMode} from '../../eth/util/index.js';
let donor: IKeyringPair;
let palletAdmin: IKeyringPair;
js-packages/tests/src/sub/nesting/admin.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/admin.test.ts
+++ b/js-packages/tests/src/sub/nesting/admin.test.ts
@@ -14,8 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from '../../util/index.js';
+import {CrossAccountId} from '@unique/playgrounds/src/unique.js';
describe('Nesting by collection admin', () => {
let alice: IKeyringPair;
@@ -51,9 +52,9 @@
// 1.2 From different collection:
const nestedTokenB = await collectionB.mintToken(bob, targetTokenA.nestingAccount());
expect(await nestedTokenA.getTopmostOwner()).to.be.deep.equal({Substrate: charlie.address});
- expect(await nestedTokenA.getOwner()).to.be.deep.equal(targetTokenA.nestingAccount().toLowerCase());
+ expect(await nestedTokenA.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetTokenA.nestingAccount()));
expect(await nestedTokenB.getTopmostOwner()).to.be.deep.equal({Substrate: charlie.address});
- expect(await nestedTokenB.getOwner()).to.be.deep.equal(targetTokenA.nestingAccount().toLowerCase());
+ expect(await nestedTokenB.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetTokenA.nestingAccount()));
// 2. Create a token to be nested and nest:
const newNestedTokenA = await collectionA.mintToken(bob);
@@ -63,7 +64,7 @@
// 2.2 From different collection:
await newNestedTokenB.nest(bob, targetTokenA);
expect(await newNestedTokenB.getTopmostOwner()).to.be.deep.equal({Substrate: charlie.address});
- expect(await newNestedTokenB.getOwner()).to.be.deep.equal(targetTokenA.nestingAccount().toLowerCase());
+ expect(await newNestedTokenB.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetTokenA.nestingAccount()));
});
});
@@ -75,12 +76,12 @@
// Admin can create an immediately nested token:
const nestedToken = await collection.mintToken(bob, targetToken.nestingAccount());
expect(await nestedToken.getTopmostOwner()).to.be.deep.equal({Substrate: charlie.address});
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
// Owner can create and and nest:
const newToken = await collection.mintToken(alice, {Substrate: charlie.address});
await newToken.nest(charlie, targetToken);
expect(await newToken.getTopmostOwner()).to.be.deep.equal({Substrate: charlie.address});
- expect(await newToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await newToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
});
});
js-packages/tests/src/sub/nesting/common.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/common.test.ts
+++ b/js-packages/tests/src/sub/nesting/common.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from '../../util';
-import {UniqueNFTCollection, UniqueRFTCollection} from '../../util/playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from '../../util/index.js';
+import {CrossAccountId, UniqueNFTCollection, UniqueRFTCollection} from '@unique/playgrounds/src/unique.js';
let alice: IKeyringPair;
let bob: IKeyringPair;
@@ -51,13 +51,13 @@
? await (collectionForNesting as UniqueNFTCollection).mintToken(bob, targetTokenBob.nestingAccount())
: await (collectionForNesting as UniqueRFTCollection).mintToken(bob, 10n, targetTokenBob.nestingAccount());
expect(await nestedToken1.getTopmostOwner()).to.be.deep.equal({Substrate: bob.address});
- expect(await nestedToken1.getOwner()).to.be.deep.equal(targetTokenBob.nestingAccount().toLowerCase());
+ expect(await nestedToken1.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetTokenBob.nestingAccount()));
// 2. Bob can mint and nest token:
const nestedToken2 = await collectionForNesting.mintToken(bob);
await nestedToken2.nest(bob, targetTokenBob);
expect(await nestedToken2.getTopmostOwner()).to.be.deep.equal({Substrate: bob.address});
- expect(await nestedToken2.getOwner()).to.be.deep.equal(targetTokenBob.nestingAccount().toLowerCase());
+ expect(await nestedToken2.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetTokenBob.nestingAccount()));
});
});
@@ -79,7 +79,7 @@
// 1. Alice can immediately create nested tokens:
await collectionForNesting.mint(bob, 100n, targetTokenBob.nestingAccount());
- expect(await collectionForNesting.getTop10Owners()).deep.eq([targetTokenBob.nestingAccount().toLowerCase()]);
+ expect(await collectionForNesting.getTop10Owners()).deep.eq([CrossAccountId.toLowerCase(targetTokenBob.nestingAccount())]);
expect(await collectionForNesting.getBalance(targetTokenBob.nestingAccount())).eq(100n);
// 2. Alice can mint and nest token:
@@ -128,10 +128,10 @@
const nestedNFT = await nftCollectionToBeNested.mintToken(alice, tokenA.nestingAccount());
const nestedRFT = await rftCollectionToBeNested.mintToken(alice, 100n, tokenA.nestingAccount());
- const _nestedFT = await ftCollectionToBeNested.mint(alice, 100n, tokenA.nestingAccount());
+ await ftCollectionToBeNested.mint(alice, 100n, tokenA.nestingAccount());
await nativeFtCollectionToBeNested.transfer(alice, tokenA.nestingAccount(), 100n);
- expect(await nestedNFT.getOwner()).to.be.deep.equal(tokenA.nestingAccount().toLowerCase());
- expect(await nestedRFT.getOwner()).to.be.deep.equal(tokenA.nestingAccount().toLowerCase());
+ expect(await nestedNFT.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(tokenA.nestingAccount()));
+ expect(await nestedRFT.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(tokenA.nestingAccount()));
expect(await ftCollectionToBeNested.getBalance(tokenA.nestingAccount())).to.equal(100n);
expect(await nativeFtCollectionToBeNested.getBalance(tokenA.nestingAccount())).to.equal(100n);
@@ -145,7 +145,7 @@
await nativeFtCollectionToBeNested.transferFrom(alice, tokenA.nestingAccount(), tokenB.nestingAccount(), 25n);
expect(await nestedNFT.getTopmostOwner()).to.be.deep.equal({Substrate: alice.address});
- expect(await nestedNFT.getOwner()).to.be.deep.equal(tokenB.nestingAccount().toLowerCase());
+ expect(await nestedNFT.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(tokenB.nestingAccount()));
expect(await nestedRFT.getBalance(tokenB.nestingAccount())).to.equal(25n);
expect(await nestedRFT.getBalance(tokenA.nestingAccount())).to.equal(75n);
js-packages/tests/src/sub/nesting/e2e.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/e2e.test.ts
+++ b/js-packages/tests/src/sub/nesting/e2e.test.ts
@@ -14,8 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from '../../util/index.js';
+import {CrossAccountId} from '@unique/playgrounds/src/unique.js';
describe('Composite nesting tests', () => {
let alice: IKeyringPair;
@@ -119,7 +120,7 @@
// Create an immediately nested token
const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
expect(await nestedToken.getTopmostOwner()).to.be.deep.equal({Substrate: alice.address});
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
// Create a token to be nested
const newToken = await collection.mintToken(alice);
@@ -127,14 +128,14 @@
// Nest
await newToken.nest(alice, targetToken);
expect(await newToken.getTopmostOwner()).to.be.deep.equal({Substrate: alice.address});
- expect(await newToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await newToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
// Move bundle to different user
await targetToken.transfer(alice, {Substrate: bob.address});
expect(await nestedToken.getTopmostOwner()).to.be.deep.equal({Substrate: bob.address});
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
expect(await newToken.getTopmostOwner()).to.be.deep.equal({Substrate: bob.address});
- expect(await newToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await newToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
// Unnest
await newToken.unnest(bob, targetToken, {Substrate: bob.address});
js-packages/tests/src/sub/nesting/nesting.negative.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/nesting.negative.test.ts
+++ b/js-packages/tests/src/sub/nesting/nesting.negative.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from '../../util';
-import {UniqueFTCollection, UniqueNFTCollection, UniqueNFToken, UniqueRFTCollection, UniqueRFToken} from '../../util/playgrounds/unique';
-import {itEth} from '../../eth/util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from '../../util/index.js';
+import {UniqueFTCollection, UniqueNFTCollection, UniqueNFToken, UniqueRFTCollection, UniqueRFToken} from '@unique/playgrounds/src/unique.js';
+import {itEth} from '../../eth/util/index.js';
let alice: IKeyringPair;
let bob: IKeyringPair;
@@ -182,7 +182,7 @@
// 2. Alice cannot mint and nest token:
const nft = await nftCollectionForNesting.mintToken(alice);
const rft = await rftCollectionForNesting.mintToken(alice, 100n);
- const _ft = await ftCollectionForNesting.mint(alice, 100n);
+ await ftCollectionForNesting.mint(alice, 100n);
await expect(nft.transfer(alice, testCase.token.nestingAccount())).to.be.rejectedWith(testCase.error);
await expect(rft.transfer(alice, testCase.token.nestingAccount())).to.be.rejectedWith(testCase.error);
await expect(ftCollectionForNesting.transfer(alice, testCase.token.nestingAccount(), 50n)).to.be.rejectedWith(testCase.error);
@@ -214,7 +214,7 @@
const nativeFtCollection = helper.ft.getCollectionObject(0);
const rftToken = await rftCollection.mintToken(alice);
- const _ftToken = await ftCollection.mint(alice, 100n);
+ await ftCollection.mint(alice, 100n);
const collectionForNesting = await helper.nft.mintCollection(alice);
js-packages/tests/src/sub/nesting/refungible.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/refungible.test.ts
+++ b/js-packages/tests/src/sub/nesting/refungible.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from '../../util/index.js';
describe('ReFungible-specific nesting tests', () => {
let alice: IKeyringPair;
js-packages/tests/src/sub/nesting/unnesting.negative.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/nesting/unnesting.negative.test.ts
+++ b/js-packages/tests/src/sub/nesting/unnesting.negative.test.ts
@@ -14,8 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from '../../util/index.js';
+import {CrossAccountId} from '@unique/playgrounds/src/unique.js';
describe('Negative Test: Unnesting', () => {
let alice: IKeyringPair;
@@ -48,7 +49,7 @@
expect(await targetToken.getChildren()).to.be.length(1);
expect(await nestedToken.getTopmostOwner()).to.be.deep.equal({Substrate: bob.address});
- expect(await nestedToken.getOwner()).to.be.deep.equal(targetToken.nestingAccount().toLowerCase());
+ expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
});
[
js-packages/tests/src/sub/refungible/burn.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/refungible/burn.test.ts
+++ b/js-packages/tests/src/sub/refungible/burn.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util/index.js';
describe('Refungible: burn', () => {
let donor: IKeyringPair;
js-packages/tests/src/sub/refungible/nesting.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/refungible/nesting.test.ts
+++ b/js-packages/tests/src/sub/refungible/nesting.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../../util/index.js';
describe('Refungible nesting', () => {
let alice: IKeyringPair;
js-packages/tests/src/sub/refungible/repartition.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/refungible/repartition.test.ts
+++ b/js-packages/tests/src/sub/refungible/repartition.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util/index.js';
describe('integration test: Refungible functionality:', () => {
let donor: IKeyringPair;
js-packages/tests/src/sub/refungible/transfer.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/sub/refungible/transfer.test.ts
+++ b/js-packages/tests/src/sub/refungible/transfer.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../../util/index.js';
describe('Refungible transfer tests', () => {
let donor: IKeyringPair;
js-packages/tests/src/transfer.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/transfer.test.ts
+++ b/js-packages/tests/src/transfer.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itEth, usingEthPlaygrounds} from './eth/util';
-import {itSub, Pallets, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itEth, usingEthPlaygrounds} from './eth/util/index.js';
+import {itSub, Pallets, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
let donor: IKeyringPair;
js-packages/tests/src/transferFrom.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/transferFrom.test.ts
+++ b/js-packages/tests/src/transferFrom.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect} from './util/index.js';
+import {NON_EXISTENT_COLLECTION_ID} from '@unique/playgrounds/src/types.js';
describe('Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {
let alice: IKeyringPair;
js-packages/tests/src/tx-version-presence.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/tx-version-presence.test.ts
+++ b/js-packages/tests/src/tx-version-presence.test.ts
@@ -15,7 +15,7 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
import {Metadata} from '@polkadot/types';
-import {itSub, usingPlaygrounds, expect} from './util';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
let metadata: Metadata;
js-packages/tests/src/util/authorizeEnactUpgrade.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/authorizeEnactUpgrade.ts
+++ b/js-packages/tests/src/util/authorizeEnactUpgrade.ts
@@ -1,6 +1,6 @@
import {readFile} from 'fs/promises';
import {u8aToHex} from '@polkadot/util';
-import {usingPlaygrounds} from '.';
+import {usingPlaygrounds} from './index.js';
import {blake2AsHex} from '@polkadot/util-crypto';
js-packages/tests/src/util/createHrmp.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/createHrmp.ts
+++ b/js-packages/tests/src/util/createHrmp.ts
@@ -1,5 +1,5 @@
-import {usingPlaygrounds} from '.';
-import config from '../config';
+import {usingPlaygrounds} from './index.js';
+import config from '../config.js';
const profile = process.argv[2];
if(!profile) throw new Error('missing profile/relay argument');
js-packages/tests/src/util/frankensteinMigrate.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/frankensteinMigrate.ts
+++ b/js-packages/tests/src/util/frankensteinMigrate.ts
@@ -1,4 +1,4 @@
-import {migration as locksToFreezesMigration} from '../migrations/942057-appPromotion';
+import {migration as locksToFreezesMigration} from '../migrations/942057-appPromotion/index.js';
export interface Migration {
before: () => Promise<void>,
after: () => Promise<void>,
js-packages/tests/src/util/globalSetup.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/globalSetup.ts
+++ b/js-packages/tests/src/util/globalSetup.ts
@@ -3,7 +3,7 @@
import {
usingPlaygrounds, Pallets, DONOR_FUNDING, MINIMUM_DONOR_FUND, LOCKING_PERIOD, UNLOCKING_PERIOD, makeNames,
-} from './index';
+} from './index.js';
import * as path from 'path';
import {promises as fs} from 'fs';
@@ -70,7 +70,7 @@
const batchSize = 300;
let balanceGrantedCounter = 0;
for(let b = 0; b < filenames.length; b += batchSize) {
- const tx = [];
+ const tx: Promise<boolean>[] = [];
let batchBalanceGrantedCounter = 0;
for(let i = 0; batchBalanceGrantedCounter < batchSize && b + i < filenames.length; i++) {
const f = filenames[b + i];
js-packages/tests/src/util/identitySetter.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/identitySetter.ts
+++ b/js-packages/tests/src/util/identitySetter.ts
@@ -8,9 +8,9 @@
// Example: `yarn setIdentities wss://polkadot-rpc.dwellir.com ws://localhost:9944 escape pattern miracle train sudden cart adapt embark wedding alien lamp mesh`
import {encodeAddress} from '@polkadot/keyring';
-import {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, Pallets} from './index';
-import {ChainHelperBase} from './playgrounds/unique';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, Pallets} from './index.js';
+import {ChainHelperBase} from '@unique/playgrounds/src/unique.js';
const relayUrl = process.argv[2] ?? 'ws://localhost:9844';
const paraUrl = process.argv[3] ?? 'ws://localhost:9944';
js-packages/tests/src/util/index.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/index.ts
+++ b/js-packages/tests/src/util/index.ts
@@ -3,15 +3,15 @@
import * as path from 'path';
import * as crypto from 'crypto';
-import {IKeyringPair} from '@polkadot/types/types/interfaces';
+import type {IKeyringPair} from '@polkadot/types/types/interfaces';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import chaiSubset from 'chai-subset';
import {Context} from 'mocha';
-import config from '../config';
-import {ChainHelperBase} from './playgrounds/unique';
-import {ILogger} from './playgrounds/types';
-import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper, DevShidenHelper, DevPolkadexHelper} from './playgrounds/unique.dev';
+import config from '../config.js';
+import {ChainHelperBase} from '@unique/playgrounds/src/unique.js';
+import type {ILogger} from '@unique/playgrounds/src/types.js';
+import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper, DevShidenHelper, DevPolkadexHelper} from '@unique/playgrounds/src/unique.dev.js';
import {dirname} from 'path';
import {fileURLToPath} from 'url';
js-packages/tests/src/util/relayIdentitiesChecker.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/relayIdentitiesChecker.ts
+++ b/js-packages/tests/src/util/relayIdentitiesChecker.ts
@@ -7,8 +7,8 @@
// Example: `yarn checkRelayIdentities wss://polkadot-rpc.dwellir.com wss://kusama-rpc.dwellir.com`
import {encodeAddress} from '@polkadot/keyring';
-import {usingPlaygrounds} from './index';
-import {getIdentities, getSubs, getSupers, constructSubInfo} from './identitySetter';
+import {usingPlaygrounds} from './index.js';
+import {getIdentities, getSubs, getSupers, constructSubInfo} from './identitySetter.js';
const relay1Url = process.argv[2] ?? 'ws://localhost:9844';
const relay2Url = process.argv[3] ?? 'ws://localhost:9844';
js-packages/tests/src/util/setCode.tsdiffbeforeafterboth--- a/js-packages/tests/src/util/setCode.ts
+++ b/js-packages/tests/src/util/setCode.ts
@@ -1,6 +1,6 @@
import {readFile} from 'fs/promises';
import {u8aToHex} from '@polkadot/util';
-import {usingPlaygrounds} from '.';
+import {usingPlaygrounds} from './index.js';
const codePath = process.argv[2];
if(!codePath) throw new Error('missing code path argument');
js-packages/tests/src/vesting.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/vesting.test.ts
+++ b/js-packages/tests/src/vesting.test.ts
@@ -14,8 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from './util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from './util/index.js';
describe('Vesting', () => {
let donor: IKeyringPair;
js-packages/tests/src/xcm/lowLevelXcmQuartz.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/xcm/lowLevelXcmQuartz.test.ts
+++ b/js-packages/tests/src/xcm/lowLevelXcmQuartz.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingMoonriverPlaygrounds, usingShidenPlaygrounds, usingRelayPlaygrounds} from '../util';
-import {QUARTZ_CHAIN, QTZ_DECIMALS, SHIDEN_DECIMALS, karuraUrl, moonriverUrl, shidenUrl, SAFE_XCM_VERSION, XcmTestHelper, TRANSFER_AMOUNT, SENDER_BUDGET, relayUrl} from './xcm.types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingMoonriverPlaygrounds, usingShidenPlaygrounds, usingRelayPlaygrounds} from '../util/index.js';
+import {QUARTZ_CHAIN, QTZ_DECIMALS, SHIDEN_DECIMALS, karuraUrl, moonriverUrl, shidenUrl, SAFE_XCM_VERSION, XcmTestHelper, TRANSFER_AMOUNT, SENDER_BUDGET, relayUrl} from './xcm.types.js';
import {hexToString} from '@polkadot/util';
const testHelper = new XcmTestHelper('quartz');
js-packages/tests/src/xcm/lowLevelXcmUnique.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/xcm/lowLevelXcmUnique.test.ts
+++ b/js-packages/tests/src/xcm/lowLevelXcmUnique.test.ts
@@ -14,12 +14,12 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import config from '../config';
-import {itSub, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingMoonbeamPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds, usingRelayPlaygrounds} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import config from '../config.js';
+import {itSub, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingMoonbeamPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds, usingRelayPlaygrounds} from '../util/index.js';
import {nToBigInt} from '@polkadot/util';
import {hexToString} from '@polkadot/util';
-import {ASTAR_DECIMALS, SAFE_XCM_VERSION, SENDER_BUDGET, UNIQUE_CHAIN, UNQ_DECIMALS, XcmTestHelper, acalaUrl, astarUrl, moonbeamUrl, polkadexUrl, relayUrl, uniqueAssetId} from './xcm.types';
+import {ASTAR_DECIMALS, SAFE_XCM_VERSION, SENDER_BUDGET, UNIQUE_CHAIN, UNQ_DECIMALS, XcmTestHelper, acalaUrl, astarUrl, moonbeamUrl, polkadexUrl, relayUrl, uniqueAssetId} from './xcm.types.js';
const testHelper = new XcmTestHelper('unique');
js-packages/tests/src/xcm/xcm.types.tsdiffbeforeafterboth--- a/js-packages/tests/src/xcm/xcm.types.ts
+++ b/js-packages/tests/src/xcm/xcm.types.ts
@@ -1,8 +1,8 @@
-import {IKeyringPair} from '@polkadot/types/types';
+import type {IKeyringPair} from '@polkadot/types/types';
import {hexToString} from '@polkadot/util';
-import {expect, usingAcalaPlaygrounds, usingAstarPlaygrounds, usingKaruraPlaygrounds, usingMoonbeamPlaygrounds, usingMoonriverPlaygrounds, usingPlaygrounds, usingPolkadexPlaygrounds, usingRelayPlaygrounds, usingShidenPlaygrounds} from '../util';
-import {DevUniqueHelper, Event} from '../util/playgrounds/unique.dev';
-import config from '../config';
+import {expect, usingAcalaPlaygrounds, usingAstarPlaygrounds, usingKaruraPlaygrounds, usingMoonbeamPlaygrounds, usingMoonriverPlaygrounds, usingPlaygrounds, usingPolkadexPlaygrounds, usingRelayPlaygrounds, usingShidenPlaygrounds} from '../util/index.js';
+import {DevUniqueHelper, Event} from '@unique/playgrounds/src/unique.dev.js';
+import config from '../config.js';
export const UNIQUE_CHAIN = +(process.env.RELAY_UNIQUE_ID || 2037);
export const STATEMINT_CHAIN = +(process.env.RELAY_STATEMINT_ID || 1000);
js-packages/tests/src/xcm/xcmOpal.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/xcm/xcmOpal.test.ts
+++ b/js-packages/tests/src/xcm/xcmOpal.test.ts
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import config from '../config';
-import {itSub, expect, describeXCM, usingPlaygrounds, usingWestmintPlaygrounds, usingRelayPlaygrounds} from '../util';
+import type {IKeyringPair} from '@polkadot/types/types';
+import config from '../config.js';
+import {itSub, expect, describeXCM, usingPlaygrounds, usingWestmintPlaygrounds, usingRelayPlaygrounds} from '../util/index.js';
const STATEMINE_CHAIN = +(process.env.RELAY_WESTMINT_ID || 1000);
const UNIQUE_CHAIN = +(process.env.RELAY_OPAL_ID || 2095);
js-packages/tests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth--- a/js-packages/tests/src/xcm/xcmQuartz.test.ts
+++ b/js-packages/tests/src/xcm/xcmQuartz.test.ts
@@ -14,10 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {IKeyringPair} from '@polkadot/types/types';
-import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingShidenPlaygrounds} from '../util';
-import {DevUniqueHelper, Event} from '../util/playgrounds/unique.dev';
-import {STATEMINE_CHAIN, QUARTZ_CHAIN, KARURA_CHAIN, MOONRIVER_CHAIN, SHIDEN_CHAIN, STATEMINE_DECIMALS, KARURA_DECIMALS, QTZ_DECIMALS, RELAY_DECIMALS, SHIDEN_DECIMALS, karuraUrl, moonriverUrl, relayUrl, shidenUrl, statemineUrl} from './xcm.types';
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingShidenPlaygrounds} from '../util/index.js';
+import {DevUniqueHelper, Event} from '@unique/playgrounds/src/unique.dev.js';
+import {STATEMINE_CHAIN, QUARTZ_CHAIN, KARURA_CHAIN, MOONRIVER_CHAIN, SHIDEN_CHAIN, STATEMINE_DECIMALS, KARURA_DECIMALS, QTZ_DECIMALS, RELAY_DECIMALS, SHIDEN_DECIMALS, karuraUrl, moonriverUrl, relayUrl, shidenUrl, statemineUrl} from './xcm.types.js';
import {hexToString} from '@polkadot/util';
js-packages/tests/src/xcm/xcmUnique.test.tsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {IKeyringPair} from '@polkadot/types/types';18import config from '../config';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util';20import {Event} from '../util/playgrounds/unique.dev';21import {hexToString, nToBigInt} from '@polkadot/util';22import {ACALA_CHAIN, ASTAR_CHAIN, MOONBEAM_CHAIN, POLKADEX_CHAIN, SAFE_XCM_VERSION, STATEMINT_CHAIN, UNIQUE_CHAIN, expectFailedToTransact, expectUntrustedReserveLocationFail, uniqueAssetId, uniqueVersionedMultilocation} from './xcm.types';232425const STATEMINT_PALLET_INSTANCE = 50;2627const relayUrl = config.relayUrl;28const statemintUrl = config.statemintUrl;29const acalaUrl = config.acalaUrl;30const moonbeamUrl = config.moonbeamUrl;31const astarUrl = config.astarUrl;32const polkadexUrl = config.polkadexUrl;3334const RELAY_DECIMALS = 12;35const STATEMINT_DECIMALS = 12;36const ACALA_DECIMALS = 12;37const ASTAR_DECIMALS = 18n;38const UNQ_DECIMALS = 18n;3940const TRANSFER_AMOUNT = 2000000000000000000000000n;4142const FUNDING_AMOUNT = 3_500_000_0000_000_000n;4344const TRANSFER_AMOUNT_RELAY = 50_000_000_000_000_000n;4546const USDT_ASSET_ID = 100;47const USDT_ASSET_METADATA_DECIMALS = 18;48const USDT_ASSET_METADATA_NAME = 'USDT';49const USDT_ASSET_METADATA_DESCRIPTION = 'USDT';50const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n;51const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n;5253describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => {54 let alice: IKeyringPair;55 let bob: IKeyringPair;5657 let balanceStmnBefore: bigint;58 let balanceStmnAfter: bigint;5960 let balanceUniqueBefore: bigint;61 let balanceUniqueAfter: bigint;62 let balanceUniqueFinal: bigint;6364 let balanceBobBefore: bigint;65 let balanceBobAfter: bigint;66 let balanceBobFinal: bigint;6768 let balanceBobRelayTokenBefore: bigint;69 let balanceBobRelayTokenAfter: bigint;707172 before(async () => {73 await usingPlaygrounds(async (helper, privateKey) => {74 alice = await privateKey('//Alice');75 bob = await privateKey('//Bob'); // sovereign account on Statemint funds donor7677 // Set the default version to wrap the first message to other chains.78 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);79 });8081 await usingRelayPlaygrounds(relayUrl, async (helper) => {82 // Fund accounts on Statemint83 await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, alice.addressRaw, FUNDING_AMOUNT);84 await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, bob.addressRaw, FUNDING_AMOUNT);85 });8687 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {88 const sovereignFundingAmount = 3_500_000_000n;8990 await helper.assets.create(91 alice,92 USDT_ASSET_ID,93 alice.address,94 USDT_ASSET_METADATA_MINIMAL_BALANCE,95 );96 await helper.assets.setMetadata(97 alice,98 USDT_ASSET_ID,99 USDT_ASSET_METADATA_NAME,100 USDT_ASSET_METADATA_DESCRIPTION,101 USDT_ASSET_METADATA_DECIMALS,102 );103 await helper.assets.mint(104 alice,105 USDT_ASSET_ID,106 alice.address,107 USDT_ASSET_AMOUNT,108 );109110 // funding parachain sovereing account on Statemint.111 // The sovereign account should be created before any action112 // (the assets pallet on Statemint check if the sovereign account exists)113 const parachainSovereingAccount = helper.address.paraSiblingSovereignAccount(UNIQUE_CHAIN);114 await helper.balance.transferToSubstrate(bob, parachainSovereingAccount, sovereignFundingAmount);115 });116117118 await usingPlaygrounds(async (helper) => {119 const location = {120 V2: {121 parents: 1,122 interior: {X3: [123 {124 Parachain: STATEMINT_CHAIN,125 },126 {127 PalletInstance: STATEMINT_PALLET_INSTANCE,128 },129 {130 GeneralIndex: USDT_ASSET_ID,131 },132 ]},133 },134 };135136 const metadata =137 {138 name: USDT_ASSET_ID,139 symbol: USDT_ASSET_METADATA_NAME,140 decimals: USDT_ASSET_METADATA_DECIMALS,141 minimalBalance: USDT_ASSET_METADATA_MINIMAL_BALANCE,142 };143 await helper.getSudo().foreignAssets.register(alice, alice.address, location, metadata);144 balanceUniqueBefore = await helper.balance.getSubstrate(alice.address);145 });146147148 // Providing the relay currency to the unique sender account149 // (fee for USDT XCM are paid in relay tokens)150 await usingRelayPlaygrounds(relayUrl, async (helper) => {151 const destination = {152 V2: {153 parents: 0,154 interior: {X1: {155 Parachain: UNIQUE_CHAIN,156 },157 },158 }};159160 const beneficiary = {161 V2: {162 parents: 0,163 interior: {X1: {164 AccountId32: {165 network: 'Any',166 id: alice.addressRaw,167 },168 }},169 },170 };171172 const assets = {173 V2: [174 {175 id: {176 Concrete: {177 parents: 0,178 interior: 'Here',179 },180 },181 fun: {182 Fungible: TRANSFER_AMOUNT_RELAY,183 },184 },185 ],186 };187188 const feeAssetItem = 0;189190 await helper.xcm.limitedReserveTransferAssets(alice, destination, beneficiary, assets, feeAssetItem, 'Unlimited');191 });192193 });194195 itSub('Should connect and send USDT from Statemint to Unique', async ({helper}) => {196 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {197 const dest = {198 V2: {199 parents: 1,200 interior: {X1: {201 Parachain: UNIQUE_CHAIN,202 },203 },204 }};205206 const beneficiary = {207 V2: {208 parents: 0,209 interior: {X1: {210 AccountId32: {211 network: 'Any',212 id: alice.addressRaw,213 },214 }},215 },216 };217218 const assets = {219 V2: [220 {221 id: {222 Concrete: {223 parents: 0,224 interior: {225 X2: [226 {227 PalletInstance: STATEMINT_PALLET_INSTANCE,228 },229 {230 GeneralIndex: USDT_ASSET_ID,231 },232 ]},233 },234 },235 fun: {236 Fungible: TRANSFER_AMOUNT,237 },238 },239 ],240 };241242 const feeAssetItem = 0;243244 balanceStmnBefore = await helper.balance.getSubstrate(alice.address);245 await helper.xcm.limitedReserveTransferAssets(alice, dest, beneficiary, assets, feeAssetItem, 'Unlimited');246247 balanceStmnAfter = await helper.balance.getSubstrate(alice.address);248249 // common good parachain take commission in it native token250 console.log(251 '[Statemint -> Unique] transaction fees on Statemint: %s WND',252 helper.util.bigIntToDecimals(balanceStmnBefore - balanceStmnAfter, STATEMINT_DECIMALS),253 );254 expect(balanceStmnBefore > balanceStmnAfter).to.be.true;255256 });257258259 // ensure that asset has been delivered260 await helper.wait.newBlocks(3);261262 // expext collection id will be with id 1263 const free = await helper.ft.getBalance(1, {Substrate: alice.address});264265 balanceUniqueAfter = await helper.balance.getSubstrate(alice.address);266267 console.log(268 '[Statemint -> Unique] transaction fees on Unique: %s USDT',269 helper.util.bigIntToDecimals(TRANSFER_AMOUNT - free, USDT_ASSET_METADATA_DECIMALS),270 );271 console.log(272 '[Statemint -> Unique] transaction fees on Unique: %s UNQ',273 helper.util.bigIntToDecimals(balanceUniqueAfter - balanceUniqueBefore),274 );275 // commission has not paid in USDT token276 expect(free).to.be.equal(TRANSFER_AMOUNT);277 // ... and parachain native token278 expect(balanceUniqueAfter == balanceUniqueBefore).to.be.true;279 });280281 itSub('Should connect and send USDT from Unique to Statemint back', async ({helper}) => {282 const destination = {283 V2: {284 parents: 1,285 interior: {X2: [286 {287 Parachain: STATEMINT_CHAIN,288 },289 {290 AccountId32: {291 network: 'Any',292 id: alice.addressRaw,293 },294 },295 ]},296 },297 };298299 const relayFee = 400_000_000_000_000n;300 const currencies: [any, bigint][] = [301 [302 {303 ForeignAssetId: 0,304 },305 TRANSFER_AMOUNT,306 ],307 [308 {309 NativeAssetId: 'Parent',310 },311 relayFee,312 ],313 ];314315 const feeItem = 1;316317 await helper.xTokens.transferMulticurrencies(alice, currencies, feeItem, destination, 'Unlimited');318319 // the commission has been paid in parachain native token320 balanceUniqueFinal = await helper.balance.getSubstrate(alice.address);321 console.log('[Unique -> Statemint] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(balanceUniqueAfter - balanceUniqueFinal));322 expect(balanceUniqueAfter > balanceUniqueFinal).to.be.true;323324 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {325 await helper.wait.newBlocks(3);326327 // The USDT token never paid fees. Its amount not changed from begin value.328 // Also check that xcm transfer has been succeeded329 expect((await helper.assets.account(USDT_ASSET_ID, alice.address))! == USDT_ASSET_AMOUNT).to.be.true;330 });331 });332333 itSub('Should connect and send Relay token to Unique', async ({helper}) => {334 balanceBobBefore = await helper.balance.getSubstrate(bob.address);335 balanceBobRelayTokenBefore = await helper.tokens.accounts(bob.address, {NativeAssetId: 'Parent'});336337 await usingRelayPlaygrounds(relayUrl, async (helper) => {338 const destination = {339 V2: {340 parents: 0,341 interior: {X1: {342 Parachain: UNIQUE_CHAIN,343 },344 },345 }};346347 const beneficiary = {348 V2: {349 parents: 0,350 interior: {X1: {351 AccountId32: {352 network: 'Any',353 id: bob.addressRaw,354 },355 }},356 },357 };358359 const assets = {360 V2: [361 {362 id: {363 Concrete: {364 parents: 0,365 interior: 'Here',366 },367 },368 fun: {369 Fungible: TRANSFER_AMOUNT_RELAY,370 },371 },372 ],373 };374375 const feeAssetItem = 0;376377 await helper.xcm.limitedReserveTransferAssets(bob, destination, beneficiary, assets, feeAssetItem, 'Unlimited');378 });379380 await helper.wait.newBlocks(3);381382 balanceBobAfter = await helper.balance.getSubstrate(bob.address);383 balanceBobRelayTokenAfter = await helper.tokens.accounts(bob.address, {NativeAssetId: 'Parent'});384385 const wndFeeOnUnique = balanceBobRelayTokenAfter - TRANSFER_AMOUNT_RELAY - balanceBobRelayTokenBefore;386 const wndDiffOnUnique = balanceBobRelayTokenAfter - balanceBobRelayTokenBefore;387 console.log(388 '[Relay (Westend) -> Unique] transaction fees: %s UNQ',389 helper.util.bigIntToDecimals(balanceBobAfter - balanceBobBefore),390 );391 console.log(392 '[Relay (Westend) -> Unique] transaction fees: %s WND',393 helper.util.bigIntToDecimals(wndFeeOnUnique, STATEMINT_DECIMALS),394 );395 console.log('[Relay (Westend) -> Unique] actually delivered: %s WND', wndDiffOnUnique);396 expect(wndFeeOnUnique == 0n, 'No incoming WND fees should be taken').to.be.true;397 expect(balanceBobBefore == balanceBobAfter, 'No incoming UNQ fees should be taken').to.be.true;398 });399400 itSub('Should connect and send Relay token back', async ({helper}) => {401 let relayTokenBalanceBefore: bigint;402 let relayTokenBalanceAfter: bigint;403 await usingRelayPlaygrounds(relayUrl, async (helper) => {404 relayTokenBalanceBefore = await helper.balance.getSubstrate(bob.address);405 });406407 const destination = {408 V2: {409 parents: 1,410 interior: {411 X1:{412 AccountId32: {413 network: 'Any',414 id: bob.addressRaw,415 },416 },417 },418 },419 };420421 const currencies: any = [422 [423 {424 NativeAssetId: 'Parent',425 },426 TRANSFER_AMOUNT_RELAY,427 ],428 ];429430 const feeItem = 0;431432 await helper.xTokens.transferMulticurrencies(bob, currencies, feeItem, destination, 'Unlimited');433434 balanceBobFinal = await helper.balance.getSubstrate(bob.address);435 console.log('[Unique -> Relay (Westend)] transaction fees: %s UNQ', helper.util.bigIntToDecimals(balanceBobAfter - balanceBobFinal));436437 await usingRelayPlaygrounds(relayUrl, async (helper) => {438 await helper.wait.newBlocks(10);439 relayTokenBalanceAfter = await helper.balance.getSubstrate(bob.address);440441 const diff = relayTokenBalanceAfter - relayTokenBalanceBefore;442 console.log('[Unique -> Relay (Westend)] actually delivered: %s WND', helper.util.bigIntToDecimals(diff, RELAY_DECIMALS));443 expect(diff > 0, 'Relay tokens was not delivered back').to.be.true;444 });445 });446});447448describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => {449 let alice: IKeyringPair;450 let randomAccount: IKeyringPair;451452 let balanceUniqueTokenInit: bigint;453 let balanceUniqueTokenMiddle: bigint;454 let balanceUniqueTokenFinal: bigint;455 let balanceAcalaTokenInit: bigint;456 let balanceAcalaTokenMiddle: bigint;457 let balanceAcalaTokenFinal: bigint;458 let balanceUniqueForeignTokenInit: bigint;459 let balanceUniqueForeignTokenMiddle: bigint;460 let balanceUniqueForeignTokenFinal: bigint;461462 // computed by a test transfer from prod Unique to prod Acala.463 // 2 UNQ sent https://unique.subscan.io/xcm_message/polkadot-bad0b68847e2398af25d482e9ee6f9c1f9ec2a48464 // 1.898970000000000000 UNQ received (you can check Acala's chain state in the corresponding block)465 const expectedAcalaIncomeFee = 2000000000000000000n - 1898970000000000000n;466 const acalaEps = 8n * 10n ** 16n;467468 let acalaBackwardTransferAmount: bigint;469470 before(async () => {471 await usingPlaygrounds(async (helper, privateKey) => {472 alice = await privateKey('//Alice');473 [randomAccount] = await helper.arrange.createAccounts([0n], alice);474475 // Set the default version to wrap the first message to other chains.476 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);477 });478479 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {480 const destination = {481 V2: {482 parents: 1,483 interior: {484 X1: {485 Parachain: UNIQUE_CHAIN,486 },487 },488 },489 };490491 const metadata = {492 name: 'Unique Network',493 symbol: 'UNQ',494 decimals: 18,495 minimalBalance: 1250000000000000000n,496 };497 const assets = (await (helper.callRpc('api.query.assetRegistry.assetMetadatas.entries'))).map(([_k, v] : [any, any]) =>498 hexToString(v.toJSON()['symbol'])) as string[];499500 if(!assets.includes('UNQ')) {501 await helper.getSudo().assetRegistry.registerForeignAsset(alice, destination, metadata);502 } else {503 console.log('UNQ token already registered on Acala assetRegistry pallet');504 }505 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10000000000000n);506 balanceAcalaTokenInit = await helper.balance.getSubstrate(randomAccount.address);507 balanceUniqueForeignTokenInit = await helper.tokens.accounts(randomAccount.address, {ForeignAsset: 0});508 });509510 await usingPlaygrounds(async (helper) => {511 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10n * TRANSFER_AMOUNT);512 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccount.address);513 });514 });515516 itSub('Should connect and send UNQ to Acala', async ({helper}) => {517518 const destination = {519 V2: {520 parents: 1,521 interior: {522 X1: {523 Parachain: ACALA_CHAIN,524 },525 },526 },527 };528529 const beneficiary = {530 V2: {531 parents: 0,532 interior: {533 X1: {534 AccountId32: {535 network: 'Any',536 id: randomAccount.addressRaw,537 },538 },539 },540 },541 };542543 const assets = {544 V2: [545 {546 id: {547 Concrete: {548 parents: 0,549 interior: 'Here',550 },551 },552 fun: {553 Fungible: TRANSFER_AMOUNT,554 },555 },556 ],557 };558559 const feeAssetItem = 0;560561 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');562 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);563564 const unqFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;565 console.log('[Unique -> Acala] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));566 expect(unqFees > 0n, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;567568 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {569 await helper.wait.newBlocks(3);570571 balanceUniqueForeignTokenMiddle = await helper.tokens.accounts(randomAccount.address, {ForeignAsset: 0});572 balanceAcalaTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);573574 const acaFees = balanceAcalaTokenInit - balanceAcalaTokenMiddle;575 const unqIncomeTransfer = balanceUniqueForeignTokenMiddle - balanceUniqueForeignTokenInit;576 acalaBackwardTransferAmount = unqIncomeTransfer;577578 const acaUnqFees = TRANSFER_AMOUNT - unqIncomeTransfer;579580 console.log(581 '[Unique -> Acala] transaction fees on Acala: %s ACA',582 helper.util.bigIntToDecimals(acaFees, ACALA_DECIMALS),583 );584 console.log(585 '[Unique -> Acala] transaction fees on Acala: %s UNQ',586 helper.util.bigIntToDecimals(acaUnqFees),587 );588 console.log('[Unique -> Acala] income %s UNQ', helper.util.bigIntToDecimals(unqIncomeTransfer));589 expect(acaFees == 0n).to.be.true;590591 const bigintAbs = (n: bigint) => (n < 0n) ? -n : n;592593 expect(594 bigintAbs(acaUnqFees - expectedAcalaIncomeFee) < acalaEps,595 'Acala took different income fee, check the Acala foreign asset config',596 ).to.be.true;597 });598 });599600 itSub('Should connect to Acala and send UNQ back', async ({helper}) => {601 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {602 const destination = {603 V2: {604 parents: 1,605 interior: {606 X2: [607 {Parachain: UNIQUE_CHAIN},608 {609 AccountId32: {610 network: 'Any',611 id: randomAccount.addressRaw,612 },613 },614 ],615 },616 },617 };618619 const id = {620 ForeignAsset: 0,621 };622623 await helper.xTokens.transfer(randomAccount, id, acalaBackwardTransferAmount, destination, 'Unlimited');624 balanceAcalaTokenFinal = await helper.balance.getSubstrate(randomAccount.address);625 balanceUniqueForeignTokenFinal = await helper.tokens.accounts(randomAccount.address, id);626627 const acaFees = balanceAcalaTokenMiddle - balanceAcalaTokenFinal;628 const unqOutcomeTransfer = balanceUniqueForeignTokenMiddle - balanceUniqueForeignTokenFinal;629630 console.log(631 '[Acala -> Unique] transaction fees on Acala: %s ACA',632 helper.util.bigIntToDecimals(acaFees, ACALA_DECIMALS),633 );634 console.log('[Acala -> Unique] outcome %s UNQ', helper.util.bigIntToDecimals(unqOutcomeTransfer));635636 expect(acaFees > 0, 'Negative fees ACA, looks like nothing was transferred').to.be.true;637 expect(unqOutcomeTransfer == acalaBackwardTransferAmount).to.be.true;638 });639640 await helper.wait.newBlocks(3);641642 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccount.address);643 const actuallyDelivered = balanceUniqueTokenFinal - balanceUniqueTokenMiddle;644 expect(actuallyDelivered > 0).to.be.true;645646 console.log('[Acala -> Unique] actually delivered %s UNQ', helper.util.bigIntToDecimals(actuallyDelivered));647648 const unqFees = acalaBackwardTransferAmount - actuallyDelivered;649 console.log('[Acala -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));650 expect(unqFees == 0n).to.be.true;651 });652653 itSub('Acala can send only up to its balance', async ({helper}) => {654 // set Acala's sovereign account's balance655 const acalaBalance = 10000n * (10n ** UNQ_DECIMALS);656 const acalaSovereignAccount = helper.address.paraSiblingSovereignAccount(ACALA_CHAIN);657 await helper.getSudo().balance.setBalanceSubstrate(alice, acalaSovereignAccount, acalaBalance);658659 const moreThanAcalaHas = acalaBalance * 2n;660661 let targetAccountBalance = 0n;662 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);663664 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(665 targetAccount.addressRaw,666 {667 Concrete: {668 parents: 0,669 interior: 'Here',670 },671 },672 moreThanAcalaHas,673 );674675 let maliciousXcmProgramSent: any;676 const maxWaitBlocks = 3;677678 // Try to trick Unique679 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {680 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);681682 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);683 });684685 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash686 && event.outcome.isFailedToTransactAsset);687688 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);689 expect(targetAccountBalance).to.be.equal(0n);690691 // But Acala still can send the correct amount692 const validTransferAmount = acalaBalance / 2n;693 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(694 targetAccount.addressRaw,695 {696 Concrete: {697 parents: 0,698 interior: 'Here',699 },700 },701 validTransferAmount,702 );703704 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {705 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);706 });707708 await helper.wait.newBlocks(maxWaitBlocks);709710 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);711 expect(targetAccountBalance).to.be.equal(validTransferAmount);712 });713714 itSub('Should not accept reserve transfer of UNQ from Acala', async ({helper}) => {715 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);716 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);717718 const uniqueMultilocation = {719 V2: {720 parents: 1,721 interior: {722 X1: {723 Parachain: UNIQUE_CHAIN,724 },725 },726 },727 };728729 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(730 targetAccount.addressRaw,731 uniqueAssetId,732 testAmount,733 );734735 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(736 targetAccount.addressRaw,737 {738 Concrete: {739 parents: 0,740 interior: 'Here',741 },742 },743 testAmount,744 );745746 let maliciousXcmProgramFullIdSent: any;747 let maliciousXcmProgramHereIdSent: any;748 const maxWaitBlocks = 3;749750 // Try to trick Unique using full UNQ identification751 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {752 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramFullId);753754 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);755 });756757 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash758 && event.outcome.isUntrustedReserveLocation);759760 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);761 expect(accountBalance).to.be.equal(0n);762763 // Try to trick Unique using shortened UNQ identification764 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {765 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramHereId);766767 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);768 });769770 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash771 && event.outcome.isUntrustedReserveLocation);772773 accountBalance = await helper.balance.getSubstrate(targetAccount.address);774 expect(accountBalance).to.be.equal(0n);775 });776});777778describeXCM('[XCM] Integration test: Exchanging tokens with Polkadex', () => {779 let alice: IKeyringPair;780 let randomAccount: IKeyringPair;781 let unqFees: bigint;782 let balanceUniqueTokenInit: bigint;783 let balanceUniqueTokenMiddle: bigint;784 let balanceUniqueTokenFinal: bigint;785 const maxWaitBlocks = 6;786787 before(async () => {788 await usingPlaygrounds(async (helper, privateKey) => {789 alice = await privateKey('//Alice');790 [randomAccount] = await helper.arrange.createAccounts([0n], alice);791792 // Set the default version to wrap the first message to other chains.793 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);794 });795796 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {797 const isWhitelisted = ((await helper.callRpc('api.query.xcmHelper.whitelistedTokens', []))798 .toJSON() as [])799 .map(nToBigInt).length != 0;800 /*801 Check whether the Unique token has been added802 to the whitelist, since an error will occur803 if it is added again. Needed for debugging804 when this test is run multiple times.805 */806 if(isWhitelisted) {807 console.log('UNQ token is already whitelisted on Polkadex');808 } else {809 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);810 }811812 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10000000000000n);813 });814815 await usingPlaygrounds(async (helper) => {816 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10n * TRANSFER_AMOUNT);817 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccount.address);818 });819 });820821 itSub('Should connect and send UNQ to Polkadex', async ({helper}) => {822823 const destination = {824 V2: {825 parents: 1,826 interior: {827 X1: {828 Parachain: POLKADEX_CHAIN,829 },830 },831 },832 };833834 const beneficiary = {835 V2: {836 parents: 0,837 interior: {838 X1: {839 AccountId32: {840 network: 'Any',841 id: randomAccount.addressRaw,842 },843 },844 },845 },846 };847848 const assets = {849 V2: [850 {851 id: {852 Concrete: {853 parents: 0,854 interior: 'Here',855 },856 },857 fun: {858 Fungible: TRANSFER_AMOUNT,859 },860 },861 ],862 };863864 const feeAssetItem = 0;865866 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');867 const messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);868 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);869870 unqFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;871 console.log('[Unique -> Polkadex] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));872 expect(unqFees > 0n, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;873874 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {875 /*876 Since only the parachain part of the Polkadex877 infrastructure is launched (without their878 solochain validators), processing incoming879 assets will lead to an error.880 This error indicates that the Polkadex chain881 received a message from the Unique network,882 since the hash is being checked to ensure883 it matches what was sent.884 */885 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash);886 });887 });888889890 itSub('Should connect to Polkadex and send UNQ back', async ({helper}) => {891892 const xcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(893 randomAccount.addressRaw,894 uniqueAssetId,895 TRANSFER_AMOUNT,896 );897898 let xcmProgramSent: any;899900901 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {902 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, xcmProgram);903904 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);905 });906907 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Success, event => event.messageHash == xcmProgramSent.messageHash);908909 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccount.address);910911 expect(balanceUniqueTokenFinal).to.be.equal(balanceUniqueTokenInit - unqFees);912 });913914 itSub('Polkadex can send only up to its balance', async ({helper}) => {915 const polkadexBalance = 10000n * (10n ** UNQ_DECIMALS);916 const polkadexSovereignAccount = helper.address.paraSiblingSovereignAccount(POLKADEX_CHAIN);917 await helper.getSudo().balance.setBalanceSubstrate(alice, polkadexSovereignAccount, polkadexBalance);918 const moreThanPolkadexHas = 2n * polkadexBalance;919920 const targetAccount = helper.arrange.createEmptyAccount();921922 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(923 targetAccount.addressRaw,924 {925 Concrete: {926 parents: 0,927 interior: 'Here',928 },929 },930 moreThanPolkadexHas,931 );932933 let maliciousXcmProgramSent: any;934935936 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {937 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);938939 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);940 });941942 await expectFailedToTransact(helper, maliciousXcmProgramSent);943944 const targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);945 expect(targetAccountBalance).to.be.equal(0n);946 });947948 itSub('Should not accept reserve transfer of UNQ from Polkadex', async ({helper}) => {949 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);950 const targetAccount = helper.arrange.createEmptyAccount();951952 const uniqueMultilocation = {953 V2: {954 parents: 1,955 interior: {956 X1: {957 Parachain: UNIQUE_CHAIN,958 },959 },960 },961 };962963 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(964 targetAccount.addressRaw,965 uniqueAssetId,966 testAmount,967 );968969 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(970 targetAccount.addressRaw,971 {972 Concrete: {973 parents: 0,974 interior: 'Here',975 },976 },977 testAmount,978 );979980 let maliciousXcmProgramFullIdSent: any;981 let maliciousXcmProgramHereIdSent: any;982 const maxWaitBlocks = 3;983984 // Try to trick Unique using full UNQ identification985 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {986 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramFullId);987988 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);989 });990991 await expectUntrustedReserveLocationFail(helper, maliciousXcmProgramFullIdSent);992993 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);994 expect(accountBalance).to.be.equal(0n);995996 // Try to trick Unique using shortened UNQ identification997 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {998 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramHereId);9991000 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1001 });10021003 await expectUntrustedReserveLocationFail(helper, maliciousXcmProgramHereIdSent);10041005 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1006 expect(accountBalance).to.be.equal(0n);1007 });1008});10091010// These tests are relevant only when1011// the the corresponding foreign assets are not registered1012describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => {1013 let alice: IKeyringPair;1014 let alith: IKeyringPair;10151016 const testAmount = 100_000_000_000n;1017 let uniqueParachainJunction;1018 let uniqueAccountJunction;10191020 let uniqueParachainMultilocation: any;1021 let uniqueAccountMultilocation: any;1022 let uniqueCombinedMultilocation: any;1023 let uniqueCombinedMultilocationAcala: any; // TODO remove when Acala goes V210241025 let messageSent: any;10261027 const maxWaitBlocks = 3;10281029 before(async () => {1030 await usingPlaygrounds(async (helper, privateKey) => {1031 alice = await privateKey('//Alice');10321033 uniqueParachainJunction = {Parachain: UNIQUE_CHAIN};1034 uniqueAccountJunction = {1035 AccountId32: {1036 network: 'Any',1037 id: alice.addressRaw,1038 },1039 };10401041 uniqueParachainMultilocation = {1042 V2: {1043 parents: 1,1044 interior: {1045 X1: uniqueParachainJunction,1046 },1047 },1048 };10491050 uniqueAccountMultilocation = {1051 V2: {1052 parents: 0,1053 interior: {1054 X1: uniqueAccountJunction,1055 },1056 },1057 };10581059 uniqueCombinedMultilocation = {1060 V2: {1061 parents: 1,1062 interior: {1063 X2: [uniqueParachainJunction, uniqueAccountJunction],1064 },1065 },1066 };10671068 uniqueCombinedMultilocationAcala = {1069 V2: {1070 parents: 1,1071 interior: {1072 X2: [uniqueParachainJunction, uniqueAccountJunction],1073 },1074 },1075 };10761077 // Set the default version to wrap the first message to other chains.1078 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1079 });10801081 // eslint-disable-next-line require-await1082 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1083 alith = helper.account.alithAccount();1084 });1085 });1086108710881089 itSub('Unique rejects ACA tokens from Acala', async ({helper}) => {1090 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {1091 const id = {1092 Token: 'ACA',1093 };1094 const destination = uniqueCombinedMultilocationAcala;1095 await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');10961097 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1098 });10991100 await expectFailedToTransact(helper, messageSent);1101 });11021103 itSub('Unique rejects GLMR tokens from Moonbeam', async ({helper}) => {1104 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1105 const id = 'SelfReserve';1106 const destination = uniqueCombinedMultilocation;1107 await helper.xTokens.transfer(alith, id, testAmount, destination, 'Unlimited');11081109 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1110 });11111112 await expectFailedToTransact(helper, messageSent);1113 });11141115 itSub('Unique rejects ASTR tokens from Astar', async ({helper}) => {1116 await usingAstarPlaygrounds(astarUrl, async (helper) => {1117 const destinationParachain = uniqueParachainMultilocation;1118 const beneficiary = uniqueAccountMultilocation;1119 const assets = {1120 V2: [{1121 id: {1122 Concrete: {1123 parents: 0,1124 interior: 'Here',1125 },1126 },1127 fun: {1128 Fungible: testAmount,1129 },1130 }],1131 };1132 const feeAssetItem = 0;11331134 await helper.executeExtrinsic(alice, 'api.tx.polkadotXcm.reserveWithdrawAssets', [1135 destinationParachain,1136 beneficiary,1137 assets,1138 feeAssetItem,1139 ]);11401141 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1142 });11431144 await expectFailedToTransact(helper, messageSent);1145 });11461147 itSub('Unique rejects PDX tokens from Polkadex', async ({helper}) => {11481149 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1150 helper.arrange.createEmptyAccount().addressRaw,1151 {1152 Concrete: {1153 parents: 1,1154 interior: {1155 X1: {1156 Parachain: POLKADEX_CHAIN,1157 },1158 },1159 },1160 },1161 testAmount,1162 );11631164 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {1165 await helper.getSudo().xcm.send(alice, uniqueParachainMultilocation, maliciousXcmProgramFullId);1166 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1167 });11681169 await expectFailedToTransact(helper, messageSent);1170 });1171});11721173describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => {1174 // Unique constants1175 let alice: IKeyringPair;1176 let uniqueAssetLocation;11771178 let randomAccountUnique: IKeyringPair;1179 let randomAccountMoonbeam: IKeyringPair;11801181 // Moonbeam constants1182 let assetId: string;11831184 const uniqueAssetMetadata = {1185 name: 'xcUnique',1186 symbol: 'xcUNQ',1187 decimals: 18,1188 isFrozen: false,1189 minimalBalance: 1n,1190 };11911192 let balanceUniqueTokenInit: bigint;1193 let balanceUniqueTokenMiddle: bigint;1194 let balanceUniqueTokenFinal: bigint;1195 let balanceForeignUnqTokenInit: bigint;1196 let balanceForeignUnqTokenMiddle: bigint;1197 let balanceForeignUnqTokenFinal: bigint;1198 let balanceGlmrTokenInit: bigint;1199 let balanceGlmrTokenMiddle: bigint;1200 let balanceGlmrTokenFinal: bigint;12011202 before(async () => {1203 await usingPlaygrounds(async (helper, privateKey) => {1204 alice = await privateKey('//Alice');1205 [randomAccountUnique] = await helper.arrange.createAccounts([0n], alice);12061207 balanceForeignUnqTokenInit = 0n;12081209 // Set the default version to wrap the first message to other chains.1210 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1211 });12121213 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1214 const alithAccount = helper.account.alithAccount();1215 const baltatharAccount = helper.account.baltatharAccount();1216 const dorothyAccount = helper.account.dorothyAccount();12171218 randomAccountMoonbeam = helper.account.create();12191220 // >>> Sponsoring Dorothy >>>1221 console.log('Sponsoring Dorothy.......');1222 await helper.balance.transferToEthereum(alithAccount, dorothyAccount.address, 11_000_000_000_000_000_000n);1223 console.log('Sponsoring Dorothy.......DONE');1224 // <<< Sponsoring Dorothy <<<12251226 uniqueAssetLocation = {1227 XCM: {1228 parents: 1,1229 interior: {X1: {Parachain: UNIQUE_CHAIN}},1230 },1231 };1232 const existentialDeposit = 1n;1233 const isSufficient = true;1234 const unitsPerSecond = 1n;1235 const numAssetsWeightHint = 0;12361237 if((await helper.assetManager.assetTypeId(uniqueAssetLocation)).toJSON()) {1238 console.log('Unique asset is already registered on MoonBeam');1239 } else {1240 const encodedProposal = helper.assetManager.makeRegisterForeignAssetProposal({1241 location: uniqueAssetLocation,1242 metadata: uniqueAssetMetadata,1243 existentialDeposit,1244 isSufficient,1245 unitsPerSecond,1246 numAssetsWeightHint,1247 });12481249 console.log('Encoded proposal for registerForeignAsset & setAssetUnitsPerSecond is %s', encodedProposal);12501251 await helper.fastDemocracy.executeProposal('register UNQ foreign asset', encodedProposal);1252 }12531254 // >>> Acquire Unique AssetId Info on Moonbeam >>>1255 console.log('Acquire Unique AssetId Info on Moonbeam.......');12561257 assetId = (await helper.assetManager.assetTypeId(uniqueAssetLocation)).toString();1258 console.log('UNQ asset ID is %s', assetId);1259 console.log('Acquire Unique AssetId Info on Moonbeam.......DONE');1260 // >>> Acquire Unique AssetId Info on Moonbeam >>>12611262 // >>> Sponsoring random Account >>>1263 console.log('Sponsoring random Account.......');1264 await helper.balance.transferToEthereum(baltatharAccount, randomAccountMoonbeam.address, 11_000_000_000_000_000_000n);1265 console.log('Sponsoring random Account.......DONE');1266 // <<< Sponsoring random Account <<<12671268 balanceGlmrTokenInit = await helper.balance.getEthereum(randomAccountMoonbeam.address);1269 });12701271 await usingPlaygrounds(async (helper) => {1272 await helper.balance.transferToSubstrate(alice, randomAccountUnique.address, 10n * TRANSFER_AMOUNT);1273 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccountUnique.address);1274 });1275 });12761277 itSub('Should connect and send UNQ to Moonbeam', async ({helper}) => {1278 const currencyId = {1279 NativeAssetId: 'Here',1280 };1281 const dest = {1282 V2: {1283 parents: 1,1284 interior: {1285 X2: [1286 {Parachain: MOONBEAM_CHAIN},1287 {AccountKey20: {network: 'Any', key: randomAccountMoonbeam.address}},1288 ],1289 },1290 },1291 };1292 const amount = TRANSFER_AMOUNT;12931294 await helper.xTokens.transfer(randomAccountUnique, currencyId, amount, dest, 'Unlimited');12951296 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccountUnique.address);1297 expect(balanceUniqueTokenMiddle < balanceUniqueTokenInit).to.be.true;12981299 const transactionFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;1300 console.log('[Unique -> Moonbeam] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(transactionFees));1301 expect(transactionFees > 0, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;13021303 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1304 await helper.wait.newBlocks(3);1305 balanceGlmrTokenMiddle = await helper.balance.getEthereum(randomAccountMoonbeam.address);13061307 const glmrFees = balanceGlmrTokenInit - balanceGlmrTokenMiddle;1308 console.log('[Unique -> Moonbeam] transaction fees on Moonbeam: %s GLMR', helper.util.bigIntToDecimals(glmrFees));1309 expect(glmrFees == 0n).to.be.true;13101311 balanceForeignUnqTokenMiddle = (await helper.assets.account(assetId, randomAccountMoonbeam.address))!;13121313 const unqIncomeTransfer = balanceForeignUnqTokenMiddle - balanceForeignUnqTokenInit;1314 console.log('[Unique -> Moonbeam] income %s UNQ', helper.util.bigIntToDecimals(unqIncomeTransfer));1315 expect(unqIncomeTransfer == TRANSFER_AMOUNT).to.be.true;1316 });1317 });13181319 itSub('Should connect to Moonbeam and send UNQ back', async ({helper}) => {1320 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1321 const asset = {1322 V2: {1323 id: {1324 Concrete: {1325 parents: 1,1326 interior: {1327 X1: {Parachain: UNIQUE_CHAIN},1328 },1329 },1330 },1331 fun: {1332 Fungible: TRANSFER_AMOUNT,1333 },1334 },1335 };1336 const destination = {1337 V2: {1338 parents: 1,1339 interior: {1340 X2: [1341 {Parachain: UNIQUE_CHAIN},1342 {AccountId32: {network: 'Any', id: randomAccountUnique.addressRaw}},1343 ],1344 },1345 },1346 };13471348 await helper.xTokens.transferMultiasset(randomAccountMoonbeam, asset, destination, 'Unlimited');13491350 balanceGlmrTokenFinal = await helper.balance.getEthereum(randomAccountMoonbeam.address);13511352 const glmrFees = balanceGlmrTokenMiddle - balanceGlmrTokenFinal;1353 console.log('[Moonbeam -> Unique] transaction fees on Moonbeam: %s GLMR', helper.util.bigIntToDecimals(glmrFees));1354 expect(glmrFees > 0, 'Negative fees GLMR, looks like nothing was transferred').to.be.true;13551356 const unqRandomAccountAsset = await helper.assets.account(assetId, randomAccountMoonbeam.address);13571358 expect(unqRandomAccountAsset).to.be.null;13591360 balanceForeignUnqTokenFinal = 0n;13611362 const unqOutcomeTransfer = balanceForeignUnqTokenMiddle - balanceForeignUnqTokenFinal;1363 console.log('[Unique -> Moonbeam] outcome %s UNQ', helper.util.bigIntToDecimals(unqOutcomeTransfer));1364 expect(unqOutcomeTransfer == TRANSFER_AMOUNT).to.be.true;1365 });13661367 await helper.wait.newBlocks(3);13681369 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccountUnique.address);1370 const actuallyDelivered = balanceUniqueTokenFinal - balanceUniqueTokenMiddle;1371 expect(actuallyDelivered > 0).to.be.true;13721373 console.log('[Moonbeam -> Unique] actually delivered %s UNQ', helper.util.bigIntToDecimals(actuallyDelivered));13741375 const unqFees = TRANSFER_AMOUNT - actuallyDelivered;1376 console.log('[Moonbeam -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));1377 expect(unqFees == 0n).to.be.true;1378 });13791380 itSub('Moonbeam can send only up to its balance', async ({helper}) => {1381 // set Moonbeam's sovereign account's balance1382 const moonbeamBalance = 10000n * (10n ** UNQ_DECIMALS);1383 const moonbeamSovereignAccount = helper.address.paraSiblingSovereignAccount(MOONBEAM_CHAIN);1384 await helper.getSudo().balance.setBalanceSubstrate(alice, moonbeamSovereignAccount, moonbeamBalance);13851386 const moreThanMoonbeamHas = moonbeamBalance * 2n;13871388 let targetAccountBalance = 0n;1389 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);13901391 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1392 targetAccount.addressRaw,1393 {1394 Concrete: {1395 parents: 0,1396 interior: 'Here',1397 },1398 },1399 moreThanMoonbeamHas,1400 );14011402 let maliciousXcmProgramSent: any;1403 const maxWaitBlocks = 3;14041405 // Try to trick Unique1406 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1407 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgram]);14081409 // Needed to bypass the call filter.1410 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1411 await helper.fastDemocracy.executeProposal('try to spend more UNQ than Moonbeam has', batchCall);14121413 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1414 });14151416 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash1417 && event.outcome.isFailedToTransactAsset);14181419 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1420 expect(targetAccountBalance).to.be.equal(0n);14211422 // But Moonbeam still can send the correct amount1423 const validTransferAmount = moonbeamBalance / 2n;1424 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1425 targetAccount.addressRaw,1426 {1427 Concrete: {1428 parents: 0,1429 interior: 'Here',1430 },1431 },1432 validTransferAmount,1433 );14341435 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1436 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, validXcmProgram]);14371438 // Needed to bypass the call filter.1439 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1440 await helper.fastDemocracy.executeProposal('Spend the correct amount of UNQ', batchCall);1441 });14421443 await helper.wait.newBlocks(maxWaitBlocks);14441445 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1446 expect(targetAccountBalance).to.be.equal(validTransferAmount);1447 });14481449 itSub('Should not accept reserve transfer of UNQ from Moonbeam', async ({helper}) => {1450 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);1451 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);14521453 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1454 targetAccount.addressRaw,1455 uniqueAssetId,1456 testAmount,1457 );14581459 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(1460 targetAccount.addressRaw,1461 {1462 Concrete: {1463 parents: 0,1464 interior: 'Here',1465 },1466 },1467 testAmount,1468 );14691470 let maliciousXcmProgramFullIdSent: any;1471 let maliciousXcmProgramHereIdSent: any;1472 const maxWaitBlocks = 3;14731474 // Try to trick Unique using full UNQ identification1475 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1476 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramFullId]);14771478 // Needed to bypass the call filter.1479 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1480 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using path asset identification', batchCall);14811482 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1483 });14841485 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash1486 && event.outcome.isUntrustedReserveLocation);14871488 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);1489 expect(accountBalance).to.be.equal(0n);14901491 // Try to trick Unique using shortened UNQ identification1492 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1493 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramHereId]);14941495 // Needed to bypass the call filter.1496 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1497 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using "here" asset identification', batchCall);14981499 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1500 });15011502 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash1503 && event.outcome.isUntrustedReserveLocation);15041505 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1506 expect(accountBalance).to.be.equal(0n);1507 });1508});15091510describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => {1511 let alice: IKeyringPair;1512 let randomAccount: IKeyringPair;15131514 const UNQ_ASSET_ID_ON_ASTAR = 18_446_744_073_709_551_631n; // The value is taken from the live Astar1515 const UNQ_MINIMAL_BALANCE_ON_ASTAR = 1n; // The value is taken from the live Astar15161517 // Unique -> Astar1518 const astarInitialBalance = 1n * (10n ** ASTAR_DECIMALS); // 1 ASTR, existential deposit required to actually create the account on Astar.1519 const unitsPerSecond = 9_451_000_000_000_000_000n; // The value is taken from the live Astar1520 const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ1521 const unqToAstarArrived = 9_962_196_000_000_000_000n; // 9.962 ... UNQ, Astar takes a commision in foreign tokens15221523 // Astar -> Unique1524 const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ1525 const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.962_219_600_000_000_000n UNQ15261527 let balanceAfterUniqueToAstarXCM: bigint;15281529 before(async () => {1530 await usingPlaygrounds(async (helper, privateKey) => {1531 alice = await privateKey('//Alice');1532 [randomAccount] = await helper.arrange.createAccounts([100n], alice);1533 console.log('randomAccount', randomAccount.address);15341535 // Set the default version to wrap the first message to other chains.1536 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1537 });15381539 await usingAstarPlaygrounds(astarUrl, async (helper) => {1540 if(!(await helper.callRpc('api.query.assets.asset', [UNQ_ASSET_ID_ON_ASTAR])).toJSON()) {1541 console.log('1. Create foreign asset and metadata');1542 await helper.getSudo().assets.forceCreate(1543 alice,1544 UNQ_ASSET_ID_ON_ASTAR,1545 alice.address,1546 UNQ_MINIMAL_BALANCE_ON_ASTAR,1547 );15481549 await helper.assets.setMetadata(1550 alice,1551 UNQ_ASSET_ID_ON_ASTAR,1552 'Unique Network',1553 'UNQ',1554 Number(UNQ_DECIMALS),1555 );15561557 console.log('2. Register asset location on Astar');1558 const assetLocation = {1559 V2: {1560 parents: 1,1561 interior: {1562 X1: {1563 Parachain: UNIQUE_CHAIN,1564 },1565 },1566 },1567 };15681569 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, UNQ_ASSET_ID_ON_ASTAR]);15701571 console.log('3. Set UNQ payment for XCM execution on Astar');1572 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);1573 } else {1574 console.log('UNQ is already registered on Astar');1575 }1576 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');1577 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);1578 });1579 });15801581 itSub('Should connect and send UNQ to Astar', async ({helper}) => {1582 const destination = {1583 V2: {1584 parents: 1,1585 interior: {1586 X1: {1587 Parachain: ASTAR_CHAIN,1588 },1589 },1590 },1591 };15921593 const beneficiary = {1594 V2: {1595 parents: 0,1596 interior: {1597 X1: {1598 AccountId32: {1599 network: 'Any',1600 id: randomAccount.addressRaw,1601 },1602 },1603 },1604 },1605 };16061607 const assets = {1608 V2: [1609 {1610 id: {1611 Concrete: {1612 parents: 0,1613 interior: 'Here',1614 },1615 },1616 fun: {1617 Fungible: unqToAstarTransferred,1618 },1619 },1620 ],1621 };16221623 // Initial balance is 100 UNQ1624 const balanceBefore = await helper.balance.getSubstrate(randomAccount.address);1625 console.log(`Initial balance is: ${balanceBefore}`);16261627 const feeAssetItem = 0;1628 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');16291630 // Balance after reserve transfer is less than 901631 balanceAfterUniqueToAstarXCM = await helper.balance.getSubstrate(randomAccount.address);1632 console.log(`UNQ Balance on Unique after XCM is: ${balanceAfterUniqueToAstarXCM}`);1633 console.log(`Unique's UNQ commission is: ${balanceBefore-balanceAfterUniqueToAstarXCM}`);1634 expect(balanceBefore - balanceAfterUniqueToAstarXCM > 0).to.be.true;16351636 await usingAstarPlaygrounds(astarUrl, async (helper) => {1637 await helper.wait.newBlocks(3);1638 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_ASTAR, randomAccount.address);1639 const astarBalance = await helper.balance.getSubstrate(randomAccount.address);16401641 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);1642 console.log(`Astar's UNQ commission is: ${unqToAstarTransferred-xcUNQbalance!}`);16431644 expect(xcUNQbalance).to.eq(unqToAstarArrived);1645 // Astar balance does not changed1646 expect(astarBalance).to.eq(astarInitialBalance);1647 });1648 });16491650 itSub('Should connect to Astar and send UNQ back', async ({helper}) => {1651 await usingAstarPlaygrounds(astarUrl, async (helper) => {1652 const destination = {1653 V2: {1654 parents: 1,1655 interior: {1656 X1: {1657 Parachain: UNIQUE_CHAIN,1658 },1659 },1660 },1661 };16621663 const beneficiary = {1664 V2: {1665 parents: 0,1666 interior: {1667 X1: {1668 AccountId32: {1669 network: 'Any',1670 id: randomAccount.addressRaw,1671 },1672 },1673 },1674 },1675 };16761677 const assets = {1678 V2: [1679 {1680 id: {1681 Concrete: {1682 parents: 1,1683 interior: {1684 X1: {1685 Parachain: UNIQUE_CHAIN,1686 },1687 },1688 },1689 },1690 fun: {1691 Fungible: unqFromAstarTransfered,1692 },1693 },1694 ],1695 };16961697 // Initial balance is 1 ASTR1698 const balanceASTRbefore = await helper.balance.getSubstrate(randomAccount.address);1699 console.log(`ASTR balance is: ${balanceASTRbefore}, it does not changed`);1700 expect(balanceASTRbefore).to.eq(astarInitialBalance);17011702 const feeAssetItem = 0;1703 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw1704 await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);17051706 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_ASTAR, randomAccount.address);1707 const balanceAstar = await helper.balance.getSubstrate(randomAccount.address);1708 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);17091710 // Assert: xcUNQ balance correctly decreased1711 expect(xcUNQbalance).to.eq(unqOnAstarLeft);1712 // Assert: ASTR balance is 0.996...1713 expect(balanceAstar / (10n ** (ASTAR_DECIMALS - 3n))).to.eq(996n);1714 });17151716 await helper.wait.newBlocks(3);1717 const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address);1718 console.log(`UNQ Balance on Unique after XCM is: ${balanceUNQ}`);1719 expect(balanceUNQ).to.eq(balanceAfterUniqueToAstarXCM + unqFromAstarTransfered);1720 });17211722 itSub('Astar can send only up to its balance', async ({helper}) => {1723 // set Astar's sovereign account's balance1724 const astarBalance = 10000n * (10n ** UNQ_DECIMALS);1725 const astarSovereignAccount = helper.address.paraSiblingSovereignAccount(ASTAR_CHAIN);1726 await helper.getSudo().balance.setBalanceSubstrate(alice, astarSovereignAccount, astarBalance);17271728 const moreThanAstarHas = astarBalance * 2n;17291730 let targetAccountBalance = 0n;1731 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);17321733 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1734 targetAccount.addressRaw,1735 {1736 Concrete: {1737 parents: 0,1738 interior: 'Here',1739 },1740 },1741 moreThanAstarHas,1742 );17431744 let maliciousXcmProgramSent: any;1745 const maxWaitBlocks = 3;17461747 // Try to trick Unique1748 await usingAstarPlaygrounds(astarUrl, async (helper) => {1749 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);17501751 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1752 });17531754 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash1755 && event.outcome.isFailedToTransactAsset);17561757 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1758 expect(targetAccountBalance).to.be.equal(0n);17591760 // But Astar still can send the correct amount1761 const validTransferAmount = astarBalance / 2n;1762 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1763 targetAccount.addressRaw,1764 {1765 Concrete: {1766 parents: 0,1767 interior: 'Here',1768 },1769 },1770 validTransferAmount,1771 );17721773 await usingAstarPlaygrounds(astarUrl, async (helper) => {1774 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);1775 });17761777 await helper.wait.newBlocks(maxWaitBlocks);17781779 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1780 expect(targetAccountBalance).to.be.equal(validTransferAmount);1781 });17821783 itSub('Should not accept reserve transfer of UNQ from Astar', async ({helper}) => {1784 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);1785 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);17861787 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1788 targetAccount.addressRaw,1789 uniqueAssetId,1790 testAmount,1791 );17921793 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(1794 targetAccount.addressRaw,1795 {1796 Concrete: {1797 parents: 0,1798 interior: 'Here',1799 },1800 },1801 testAmount,1802 );18031804 let maliciousXcmProgramFullIdSent: any;1805 let maliciousXcmProgramHereIdSent: any;1806 const maxWaitBlocks = 3;18071808 // Try to trick Unique using full UNQ identification1809 await usingAstarPlaygrounds(astarUrl, async (helper) => {1810 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramFullId);18111812 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1813 });18141815 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash1816 && event.outcome.isUntrustedReserveLocation);18171818 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);1819 expect(accountBalance).to.be.equal(0n);18201821 // Try to trick Unique using shortened UNQ identification1822 await usingAstarPlaygrounds(astarUrl, async (helper) => {1823 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramHereId);18241825 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1826 });18271828 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash1829 && event.outcome.isUntrustedReserveLocation);18301831 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1832 expect(accountBalance).to.be.equal(0n);1833 });1834});1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import type {IKeyringPair} from '@polkadot/types/types';18import config from '../config.js';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util/index.js';20import {Event} from '@unique/playgrounds/src/unique.dev.js';21import {hexToString, nToBigInt} from '@polkadot/util';22import {ACALA_CHAIN, ASTAR_CHAIN, MOONBEAM_CHAIN, POLKADEX_CHAIN, SAFE_XCM_VERSION, STATEMINT_CHAIN, UNIQUE_CHAIN, expectFailedToTransact, expectUntrustedReserveLocationFail, uniqueAssetId, uniqueVersionedMultilocation} from './xcm.types.js';232425const STATEMINT_PALLET_INSTANCE = 50;2627const relayUrl = config.relayUrl;28const statemintUrl = config.statemintUrl;29const acalaUrl = config.acalaUrl;30const moonbeamUrl = config.moonbeamUrl;31const astarUrl = config.astarUrl;32const polkadexUrl = config.polkadexUrl;3334const RELAY_DECIMALS = 12;35const STATEMINT_DECIMALS = 12;36const ACALA_DECIMALS = 12;37const ASTAR_DECIMALS = 18n;38const UNQ_DECIMALS = 18n;3940const TRANSFER_AMOUNT = 2000000000000000000000000n;4142const FUNDING_AMOUNT = 3_500_000_0000_000_000n;4344const TRANSFER_AMOUNT_RELAY = 50_000_000_000_000_000n;4546const USDT_ASSET_ID = 100;47const USDT_ASSET_METADATA_DECIMALS = 18;48const USDT_ASSET_METADATA_NAME = 'USDT';49const USDT_ASSET_METADATA_DESCRIPTION = 'USDT';50const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n;51const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n;5253describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => {54 let alice: IKeyringPair;55 let bob: IKeyringPair;5657 let balanceStmnBefore: bigint;58 let balanceStmnAfter: bigint;5960 let balanceUniqueBefore: bigint;61 let balanceUniqueAfter: bigint;62 let balanceUniqueFinal: bigint;6364 let balanceBobBefore: bigint;65 let balanceBobAfter: bigint;66 let balanceBobFinal: bigint;6768 let balanceBobRelayTokenBefore: bigint;69 let balanceBobRelayTokenAfter: bigint;707172 before(async () => {73 await usingPlaygrounds(async (helper, privateKey) => {74 alice = await privateKey('//Alice');75 bob = await privateKey('//Bob'); // sovereign account on Statemint funds donor7677 // Set the default version to wrap the first message to other chains.78 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);79 });8081 await usingRelayPlaygrounds(relayUrl, async (helper) => {82 // Fund accounts on Statemint83 await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, alice.addressRaw, FUNDING_AMOUNT);84 await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, bob.addressRaw, FUNDING_AMOUNT);85 });8687 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {88 const sovereignFundingAmount = 3_500_000_000n;8990 await helper.assets.create(91 alice,92 USDT_ASSET_ID,93 alice.address,94 USDT_ASSET_METADATA_MINIMAL_BALANCE,95 );96 await helper.assets.setMetadata(97 alice,98 USDT_ASSET_ID,99 USDT_ASSET_METADATA_NAME,100 USDT_ASSET_METADATA_DESCRIPTION,101 USDT_ASSET_METADATA_DECIMALS,102 );103 await helper.assets.mint(104 alice,105 USDT_ASSET_ID,106 alice.address,107 USDT_ASSET_AMOUNT,108 );109110 // funding parachain sovereing account on Statemint.111 // The sovereign account should be created before any action112 // (the assets pallet on Statemint check if the sovereign account exists)113 const parachainSovereingAccount = helper.address.paraSiblingSovereignAccount(UNIQUE_CHAIN);114 await helper.balance.transferToSubstrate(bob, parachainSovereingAccount, sovereignFundingAmount);115 });116117118 await usingPlaygrounds(async (helper) => {119 const location = {120 V2: {121 parents: 1,122 interior: {X3: [123 {124 Parachain: STATEMINT_CHAIN,125 },126 {127 PalletInstance: STATEMINT_PALLET_INSTANCE,128 },129 {130 GeneralIndex: USDT_ASSET_ID,131 },132 ]},133 },134 };135136 const metadata =137 {138 name: USDT_ASSET_ID,139 symbol: USDT_ASSET_METADATA_NAME,140 decimals: USDT_ASSET_METADATA_DECIMALS,141 minimalBalance: USDT_ASSET_METADATA_MINIMAL_BALANCE,142 };143 await helper.getSudo().foreignAssets.register(alice, alice.address, location, metadata);144 balanceUniqueBefore = await helper.balance.getSubstrate(alice.address);145 });146147148 // Providing the relay currency to the unique sender account149 // (fee for USDT XCM are paid in relay tokens)150 await usingRelayPlaygrounds(relayUrl, async (helper) => {151 const destination = {152 V2: {153 parents: 0,154 interior: {X1: {155 Parachain: UNIQUE_CHAIN,156 },157 },158 }};159160 const beneficiary = {161 V2: {162 parents: 0,163 interior: {X1: {164 AccountId32: {165 network: 'Any',166 id: alice.addressRaw,167 },168 }},169 },170 };171172 const assets = {173 V2: [174 {175 id: {176 Concrete: {177 parents: 0,178 interior: 'Here',179 },180 },181 fun: {182 Fungible: TRANSFER_AMOUNT_RELAY,183 },184 },185 ],186 };187188 const feeAssetItem = 0;189190 await helper.xcm.limitedReserveTransferAssets(alice, destination, beneficiary, assets, feeAssetItem, 'Unlimited');191 });192193 });194195 itSub('Should connect and send USDT from Statemint to Unique', async ({helper}) => {196 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {197 const dest = {198 V2: {199 parents: 1,200 interior: {X1: {201 Parachain: UNIQUE_CHAIN,202 },203 },204 }};205206 const beneficiary = {207 V2: {208 parents: 0,209 interior: {X1: {210 AccountId32: {211 network: 'Any',212 id: alice.addressRaw,213 },214 }},215 },216 };217218 const assets = {219 V2: [220 {221 id: {222 Concrete: {223 parents: 0,224 interior: {225 X2: [226 {227 PalletInstance: STATEMINT_PALLET_INSTANCE,228 },229 {230 GeneralIndex: USDT_ASSET_ID,231 },232 ]},233 },234 },235 fun: {236 Fungible: TRANSFER_AMOUNT,237 },238 },239 ],240 };241242 const feeAssetItem = 0;243244 balanceStmnBefore = await helper.balance.getSubstrate(alice.address);245 await helper.xcm.limitedReserveTransferAssets(alice, dest, beneficiary, assets, feeAssetItem, 'Unlimited');246247 balanceStmnAfter = await helper.balance.getSubstrate(alice.address);248249 // common good parachain take commission in it native token250 console.log(251 '[Statemint -> Unique] transaction fees on Statemint: %s WND',252 helper.util.bigIntToDecimals(balanceStmnBefore - balanceStmnAfter, STATEMINT_DECIMALS),253 );254 expect(balanceStmnBefore > balanceStmnAfter).to.be.true;255256 });257258259 // ensure that asset has been delivered260 await helper.wait.newBlocks(3);261262 // expext collection id will be with id 1263 const free = await helper.ft.getBalance(1, {Substrate: alice.address});264265 balanceUniqueAfter = await helper.balance.getSubstrate(alice.address);266267 console.log(268 '[Statemint -> Unique] transaction fees on Unique: %s USDT',269 helper.util.bigIntToDecimals(TRANSFER_AMOUNT - free, USDT_ASSET_METADATA_DECIMALS),270 );271 console.log(272 '[Statemint -> Unique] transaction fees on Unique: %s UNQ',273 helper.util.bigIntToDecimals(balanceUniqueAfter - balanceUniqueBefore),274 );275 // commission has not paid in USDT token276 expect(free).to.be.equal(TRANSFER_AMOUNT);277 // ... and parachain native token278 expect(balanceUniqueAfter == balanceUniqueBefore).to.be.true;279 });280281 itSub('Should connect and send USDT from Unique to Statemint back', async ({helper}) => {282 const destination = {283 V2: {284 parents: 1,285 interior: {X2: [286 {287 Parachain: STATEMINT_CHAIN,288 },289 {290 AccountId32: {291 network: 'Any',292 id: alice.addressRaw,293 },294 },295 ]},296 },297 };298299 const relayFee = 400_000_000_000_000n;300 const currencies: [any, bigint][] = [301 [302 {303 ForeignAssetId: 0,304 },305 TRANSFER_AMOUNT,306 ],307 [308 {309 NativeAssetId: 'Parent',310 },311 relayFee,312 ],313 ];314315 const feeItem = 1;316317 await helper.xTokens.transferMulticurrencies(alice, currencies, feeItem, destination, 'Unlimited');318319 // the commission has been paid in parachain native token320 balanceUniqueFinal = await helper.balance.getSubstrate(alice.address);321 console.log('[Unique -> Statemint] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(balanceUniqueAfter - balanceUniqueFinal));322 expect(balanceUniqueAfter > balanceUniqueFinal).to.be.true;323324 await usingStatemintPlaygrounds(statemintUrl, async (helper) => {325 await helper.wait.newBlocks(3);326327 // The USDT token never paid fees. Its amount not changed from begin value.328 // Also check that xcm transfer has been succeeded329 expect((await helper.assets.account(USDT_ASSET_ID, alice.address))! == USDT_ASSET_AMOUNT).to.be.true;330 });331 });332333 itSub('Should connect and send Relay token to Unique', async ({helper}) => {334 balanceBobBefore = await helper.balance.getSubstrate(bob.address);335 balanceBobRelayTokenBefore = await helper.tokens.accounts(bob.address, {NativeAssetId: 'Parent'});336337 await usingRelayPlaygrounds(relayUrl, async (helper) => {338 const destination = {339 V2: {340 parents: 0,341 interior: {X1: {342 Parachain: UNIQUE_CHAIN,343 },344 },345 }};346347 const beneficiary = {348 V2: {349 parents: 0,350 interior: {X1: {351 AccountId32: {352 network: 'Any',353 id: bob.addressRaw,354 },355 }},356 },357 };358359 const assets = {360 V2: [361 {362 id: {363 Concrete: {364 parents: 0,365 interior: 'Here',366 },367 },368 fun: {369 Fungible: TRANSFER_AMOUNT_RELAY,370 },371 },372 ],373 };374375 const feeAssetItem = 0;376377 await helper.xcm.limitedReserveTransferAssets(bob, destination, beneficiary, assets, feeAssetItem, 'Unlimited');378 });379380 await helper.wait.newBlocks(3);381382 balanceBobAfter = await helper.balance.getSubstrate(bob.address);383 balanceBobRelayTokenAfter = await helper.tokens.accounts(bob.address, {NativeAssetId: 'Parent'});384385 const wndFeeOnUnique = balanceBobRelayTokenAfter - TRANSFER_AMOUNT_RELAY - balanceBobRelayTokenBefore;386 const wndDiffOnUnique = balanceBobRelayTokenAfter - balanceBobRelayTokenBefore;387 console.log(388 '[Relay (Westend) -> Unique] transaction fees: %s UNQ',389 helper.util.bigIntToDecimals(balanceBobAfter - balanceBobBefore),390 );391 console.log(392 '[Relay (Westend) -> Unique] transaction fees: %s WND',393 helper.util.bigIntToDecimals(wndFeeOnUnique, STATEMINT_DECIMALS),394 );395 console.log('[Relay (Westend) -> Unique] actually delivered: %s WND', wndDiffOnUnique);396 expect(wndFeeOnUnique == 0n, 'No incoming WND fees should be taken').to.be.true;397 expect(balanceBobBefore == balanceBobAfter, 'No incoming UNQ fees should be taken').to.be.true;398 });399400 itSub('Should connect and send Relay token back', async ({helper}) => {401 let relayTokenBalanceBefore: bigint;402 let relayTokenBalanceAfter: bigint;403 await usingRelayPlaygrounds(relayUrl, async (helper) => {404 relayTokenBalanceBefore = await helper.balance.getSubstrate(bob.address);405 });406407 const destination = {408 V2: {409 parents: 1,410 interior: {411 X1:{412 AccountId32: {413 network: 'Any',414 id: bob.addressRaw,415 },416 },417 },418 },419 };420421 const currencies: any = [422 [423 {424 NativeAssetId: 'Parent',425 },426 TRANSFER_AMOUNT_RELAY,427 ],428 ];429430 const feeItem = 0;431432 await helper.xTokens.transferMulticurrencies(bob, currencies, feeItem, destination, 'Unlimited');433434 balanceBobFinal = await helper.balance.getSubstrate(bob.address);435 console.log('[Unique -> Relay (Westend)] transaction fees: %s UNQ', helper.util.bigIntToDecimals(balanceBobAfter - balanceBobFinal));436437 await usingRelayPlaygrounds(relayUrl, async (helper) => {438 await helper.wait.newBlocks(10);439 relayTokenBalanceAfter = await helper.balance.getSubstrate(bob.address);440441 const diff = relayTokenBalanceAfter - relayTokenBalanceBefore;442 console.log('[Unique -> Relay (Westend)] actually delivered: %s WND', helper.util.bigIntToDecimals(diff, RELAY_DECIMALS));443 expect(diff > 0, 'Relay tokens was not delivered back').to.be.true;444 });445 });446});447448describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => {449 let alice: IKeyringPair;450 let randomAccount: IKeyringPair;451452 let balanceUniqueTokenInit: bigint;453 let balanceUniqueTokenMiddle: bigint;454 let balanceUniqueTokenFinal: bigint;455 let balanceAcalaTokenInit: bigint;456 let balanceAcalaTokenMiddle: bigint;457 let balanceAcalaTokenFinal: bigint;458 let balanceUniqueForeignTokenInit: bigint;459 let balanceUniqueForeignTokenMiddle: bigint;460 let balanceUniqueForeignTokenFinal: bigint;461462 // computed by a test transfer from prod Unique to prod Acala.463 // 2 UNQ sent https://unique.subscan.io/xcm_message/polkadot-bad0b68847e2398af25d482e9ee6f9c1f9ec2a48464 // 1.898970000000000000 UNQ received (you can check Acala's chain state in the corresponding block)465 const expectedAcalaIncomeFee = 2000000000000000000n - 1898970000000000000n;466 const acalaEps = 8n * 10n ** 16n;467468 let acalaBackwardTransferAmount: bigint;469470 before(async () => {471 await usingPlaygrounds(async (helper, privateKey) => {472 alice = await privateKey('//Alice');473 [randomAccount] = await helper.arrange.createAccounts([0n], alice);474475 // Set the default version to wrap the first message to other chains.476 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);477 });478479 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {480 const destination = {481 V2: {482 parents: 1,483 interior: {484 X1: {485 Parachain: UNIQUE_CHAIN,486 },487 },488 },489 };490491 const metadata = {492 name: 'Unique Network',493 symbol: 'UNQ',494 decimals: 18,495 minimalBalance: 1250000000000000000n,496 };497 const assets = (await (helper.callRpc('api.query.assetRegistry.assetMetadatas.entries'))).map(([_k, v] : [any, any]) =>498 hexToString(v.toJSON()['symbol'])) as string[];499500 if(!assets.includes('UNQ')) {501 await helper.getSudo().assetRegistry.registerForeignAsset(alice, destination, metadata);502 } else {503 console.log('UNQ token already registered on Acala assetRegistry pallet');504 }505 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10000000000000n);506 balanceAcalaTokenInit = await helper.balance.getSubstrate(randomAccount.address);507 balanceUniqueForeignTokenInit = await helper.tokens.accounts(randomAccount.address, {ForeignAsset: 0});508 });509510 await usingPlaygrounds(async (helper) => {511 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10n * TRANSFER_AMOUNT);512 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccount.address);513 });514 });515516 itSub('Should connect and send UNQ to Acala', async ({helper}) => {517518 const destination = {519 V2: {520 parents: 1,521 interior: {522 X1: {523 Parachain: ACALA_CHAIN,524 },525 },526 },527 };528529 const beneficiary = {530 V2: {531 parents: 0,532 interior: {533 X1: {534 AccountId32: {535 network: 'Any',536 id: randomAccount.addressRaw,537 },538 },539 },540 },541 };542543 const assets = {544 V2: [545 {546 id: {547 Concrete: {548 parents: 0,549 interior: 'Here',550 },551 },552 fun: {553 Fungible: TRANSFER_AMOUNT,554 },555 },556 ],557 };558559 const feeAssetItem = 0;560561 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');562 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);563564 const unqFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;565 console.log('[Unique -> Acala] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));566 expect(unqFees > 0n, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;567568 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {569 await helper.wait.newBlocks(3);570571 balanceUniqueForeignTokenMiddle = await helper.tokens.accounts(randomAccount.address, {ForeignAsset: 0});572 balanceAcalaTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);573574 const acaFees = balanceAcalaTokenInit - balanceAcalaTokenMiddle;575 const unqIncomeTransfer = balanceUniqueForeignTokenMiddle - balanceUniqueForeignTokenInit;576 acalaBackwardTransferAmount = unqIncomeTransfer;577578 const acaUnqFees = TRANSFER_AMOUNT - unqIncomeTransfer;579580 console.log(581 '[Unique -> Acala] transaction fees on Acala: %s ACA',582 helper.util.bigIntToDecimals(acaFees, ACALA_DECIMALS),583 );584 console.log(585 '[Unique -> Acala] transaction fees on Acala: %s UNQ',586 helper.util.bigIntToDecimals(acaUnqFees),587 );588 console.log('[Unique -> Acala] income %s UNQ', helper.util.bigIntToDecimals(unqIncomeTransfer));589 expect(acaFees == 0n).to.be.true;590591 const bigintAbs = (n: bigint) => (n < 0n) ? -n : n;592593 expect(594 bigintAbs(acaUnqFees - expectedAcalaIncomeFee) < acalaEps,595 'Acala took different income fee, check the Acala foreign asset config',596 ).to.be.true;597 });598 });599600 itSub('Should connect to Acala and send UNQ back', async ({helper}) => {601 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {602 const destination = {603 V2: {604 parents: 1,605 interior: {606 X2: [607 {Parachain: UNIQUE_CHAIN},608 {609 AccountId32: {610 network: 'Any',611 id: randomAccount.addressRaw,612 },613 },614 ],615 },616 },617 };618619 const id = {620 ForeignAsset: 0,621 };622623 await helper.xTokens.transfer(randomAccount, id, acalaBackwardTransferAmount, destination, 'Unlimited');624 balanceAcalaTokenFinal = await helper.balance.getSubstrate(randomAccount.address);625 balanceUniqueForeignTokenFinal = await helper.tokens.accounts(randomAccount.address, id);626627 const acaFees = balanceAcalaTokenMiddle - balanceAcalaTokenFinal;628 const unqOutcomeTransfer = balanceUniqueForeignTokenMiddle - balanceUniqueForeignTokenFinal;629630 console.log(631 '[Acala -> Unique] transaction fees on Acala: %s ACA',632 helper.util.bigIntToDecimals(acaFees, ACALA_DECIMALS),633 );634 console.log('[Acala -> Unique] outcome %s UNQ', helper.util.bigIntToDecimals(unqOutcomeTransfer));635636 expect(acaFees > 0, 'Negative fees ACA, looks like nothing was transferred').to.be.true;637 expect(unqOutcomeTransfer == acalaBackwardTransferAmount).to.be.true;638 });639640 await helper.wait.newBlocks(3);641642 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccount.address);643 const actuallyDelivered = balanceUniqueTokenFinal - balanceUniqueTokenMiddle;644 expect(actuallyDelivered > 0).to.be.true;645646 console.log('[Acala -> Unique] actually delivered %s UNQ', helper.util.bigIntToDecimals(actuallyDelivered));647648 const unqFees = acalaBackwardTransferAmount - actuallyDelivered;649 console.log('[Acala -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));650 expect(unqFees == 0n).to.be.true;651 });652653 itSub('Acala can send only up to its balance', async ({helper}) => {654 // set Acala's sovereign account's balance655 const acalaBalance = 10000n * (10n ** UNQ_DECIMALS);656 const acalaSovereignAccount = helper.address.paraSiblingSovereignAccount(ACALA_CHAIN);657 await helper.getSudo().balance.setBalanceSubstrate(alice, acalaSovereignAccount, acalaBalance);658659 const moreThanAcalaHas = acalaBalance * 2n;660661 let targetAccountBalance = 0n;662 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);663664 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(665 targetAccount.addressRaw,666 {667 Concrete: {668 parents: 0,669 interior: 'Here',670 },671 },672 moreThanAcalaHas,673 );674675 let maliciousXcmProgramSent: any;676 const maxWaitBlocks = 3;677678 // Try to trick Unique679 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {680 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);681682 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);683 });684685 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash686 && event.outcome.isFailedToTransactAsset);687688 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);689 expect(targetAccountBalance).to.be.equal(0n);690691 // But Acala still can send the correct amount692 const validTransferAmount = acalaBalance / 2n;693 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(694 targetAccount.addressRaw,695 {696 Concrete: {697 parents: 0,698 interior: 'Here',699 },700 },701 validTransferAmount,702 );703704 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {705 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);706 });707708 await helper.wait.newBlocks(maxWaitBlocks);709710 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);711 expect(targetAccountBalance).to.be.equal(validTransferAmount);712 });713714 itSub('Should not accept reserve transfer of UNQ from Acala', async ({helper}) => {715 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);716 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);717718 const uniqueMultilocation = {719 V2: {720 parents: 1,721 interior: {722 X1: {723 Parachain: UNIQUE_CHAIN,724 },725 },726 },727 };728729 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(730 targetAccount.addressRaw,731 uniqueAssetId,732 testAmount,733 );734735 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(736 targetAccount.addressRaw,737 {738 Concrete: {739 parents: 0,740 interior: 'Here',741 },742 },743 testAmount,744 );745746 let maliciousXcmProgramFullIdSent: any;747 let maliciousXcmProgramHereIdSent: any;748 const maxWaitBlocks = 3;749750 // Try to trick Unique using full UNQ identification751 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {752 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramFullId);753754 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);755 });756757 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash758 && event.outcome.isUntrustedReserveLocation);759760 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);761 expect(accountBalance).to.be.equal(0n);762763 // Try to trick Unique using shortened UNQ identification764 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {765 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramHereId);766767 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);768 });769770 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash771 && event.outcome.isUntrustedReserveLocation);772773 accountBalance = await helper.balance.getSubstrate(targetAccount.address);774 expect(accountBalance).to.be.equal(0n);775 });776});777778describeXCM('[XCM] Integration test: Exchanging tokens with Polkadex', () => {779 let alice: IKeyringPair;780 let randomAccount: IKeyringPair;781 let unqFees: bigint;782 let balanceUniqueTokenInit: bigint;783 let balanceUniqueTokenMiddle: bigint;784 let balanceUniqueTokenFinal: bigint;785 const maxWaitBlocks = 6;786787 before(async () => {788 await usingPlaygrounds(async (helper, privateKey) => {789 alice = await privateKey('//Alice');790 [randomAccount] = await helper.arrange.createAccounts([0n], alice);791792 // Set the default version to wrap the first message to other chains.793 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);794 });795796 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {797 const isWhitelisted = ((await helper.callRpc('api.query.xcmHelper.whitelistedTokens', []))798 .toJSON() as [])799 .map(nToBigInt).length != 0;800 /*801 Check whether the Unique token has been added802 to the whitelist, since an error will occur803 if it is added again. Needed for debugging804 when this test is run multiple times.805 */806 if(isWhitelisted) {807 console.log('UNQ token is already whitelisted on Polkadex');808 } else {809 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);810 }811812 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10000000000000n);813 });814815 await usingPlaygrounds(async (helper) => {816 await helper.balance.transferToSubstrate(alice, randomAccount.address, 10n * TRANSFER_AMOUNT);817 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccount.address);818 });819 });820821 itSub('Should connect and send UNQ to Polkadex', async ({helper}) => {822823 const destination = {824 V2: {825 parents: 1,826 interior: {827 X1: {828 Parachain: POLKADEX_CHAIN,829 },830 },831 },832 };833834 const beneficiary = {835 V2: {836 parents: 0,837 interior: {838 X1: {839 AccountId32: {840 network: 'Any',841 id: randomAccount.addressRaw,842 },843 },844 },845 },846 };847848 const assets = {849 V2: [850 {851 id: {852 Concrete: {853 parents: 0,854 interior: 'Here',855 },856 },857 fun: {858 Fungible: TRANSFER_AMOUNT,859 },860 },861 ],862 };863864 const feeAssetItem = 0;865866 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');867 const messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);868 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccount.address);869870 unqFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;871 console.log('[Unique -> Polkadex] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));872 expect(unqFees > 0n, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;873874 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {875 /*876 Since only the parachain part of the Polkadex877 infrastructure is launched (without their878 solochain validators), processing incoming879 assets will lead to an error.880 This error indicates that the Polkadex chain881 received a message from the Unique network,882 since the hash is being checked to ensure883 it matches what was sent.884 */885 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash);886 });887 });888889890 itSub('Should connect to Polkadex and send UNQ back', async ({helper}) => {891892 const xcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(893 randomAccount.addressRaw,894 uniqueAssetId,895 TRANSFER_AMOUNT,896 );897898 let xcmProgramSent: any;899900901 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {902 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, xcmProgram);903904 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);905 });906907 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Success, event => event.messageHash == xcmProgramSent.messageHash);908909 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccount.address);910911 expect(balanceUniqueTokenFinal).to.be.equal(balanceUniqueTokenInit - unqFees);912 });913914 itSub('Polkadex can send only up to its balance', async ({helper}) => {915 const polkadexBalance = 10000n * (10n ** UNQ_DECIMALS);916 const polkadexSovereignAccount = helper.address.paraSiblingSovereignAccount(POLKADEX_CHAIN);917 await helper.getSudo().balance.setBalanceSubstrate(alice, polkadexSovereignAccount, polkadexBalance);918 const moreThanPolkadexHas = 2n * polkadexBalance;919920 const targetAccount = helper.arrange.createEmptyAccount();921922 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(923 targetAccount.addressRaw,924 {925 Concrete: {926 parents: 0,927 interior: 'Here',928 },929 },930 moreThanPolkadexHas,931 );932933 let maliciousXcmProgramSent: any;934935936 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {937 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);938939 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);940 });941942 await expectFailedToTransact(helper, maliciousXcmProgramSent);943944 const targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);945 expect(targetAccountBalance).to.be.equal(0n);946 });947948 itSub('Should not accept reserve transfer of UNQ from Polkadex', async ({helper}) => {949 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);950 const targetAccount = helper.arrange.createEmptyAccount();951952 const uniqueMultilocation = {953 V2: {954 parents: 1,955 interior: {956 X1: {957 Parachain: UNIQUE_CHAIN,958 },959 },960 },961 };962963 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(964 targetAccount.addressRaw,965 uniqueAssetId,966 testAmount,967 );968969 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(970 targetAccount.addressRaw,971 {972 Concrete: {973 parents: 0,974 interior: 'Here',975 },976 },977 testAmount,978 );979980 let maliciousXcmProgramFullIdSent: any;981 let maliciousXcmProgramHereIdSent: any;982 const maxWaitBlocks = 3;983984 // Try to trick Unique using full UNQ identification985 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {986 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramFullId);987988 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);989 });990991 await expectUntrustedReserveLocationFail(helper, maliciousXcmProgramFullIdSent);992993 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);994 expect(accountBalance).to.be.equal(0n);995996 // Try to trick Unique using shortened UNQ identification997 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {998 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramHereId);9991000 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1001 });10021003 await expectUntrustedReserveLocationFail(helper, maliciousXcmProgramHereIdSent);10041005 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1006 expect(accountBalance).to.be.equal(0n);1007 });1008});10091010// These tests are relevant only when1011// the the corresponding foreign assets are not registered1012describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => {1013 let alice: IKeyringPair;1014 let alith: IKeyringPair;10151016 const testAmount = 100_000_000_000n;1017 let uniqueParachainJunction;1018 let uniqueAccountJunction;10191020 let uniqueParachainMultilocation: any;1021 let uniqueAccountMultilocation: any;1022 let uniqueCombinedMultilocation: any;1023 let uniqueCombinedMultilocationAcala: any; // TODO remove when Acala goes V210241025 let messageSent: any;10261027 const maxWaitBlocks = 3;10281029 before(async () => {1030 await usingPlaygrounds(async (helper, privateKey) => {1031 alice = await privateKey('//Alice');10321033 uniqueParachainJunction = {Parachain: UNIQUE_CHAIN};1034 uniqueAccountJunction = {1035 AccountId32: {1036 network: 'Any',1037 id: alice.addressRaw,1038 },1039 };10401041 uniqueParachainMultilocation = {1042 V2: {1043 parents: 1,1044 interior: {1045 X1: uniqueParachainJunction,1046 },1047 },1048 };10491050 uniqueAccountMultilocation = {1051 V2: {1052 parents: 0,1053 interior: {1054 X1: uniqueAccountJunction,1055 },1056 },1057 };10581059 uniqueCombinedMultilocation = {1060 V2: {1061 parents: 1,1062 interior: {1063 X2: [uniqueParachainJunction, uniqueAccountJunction],1064 },1065 },1066 };10671068 uniqueCombinedMultilocationAcala = {1069 V2: {1070 parents: 1,1071 interior: {1072 X2: [uniqueParachainJunction, uniqueAccountJunction],1073 },1074 },1075 };10761077 // Set the default version to wrap the first message to other chains.1078 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1079 });10801081 // eslint-disable-next-line require-await1082 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1083 alith = helper.account.alithAccount();1084 });1085 });1086108710881089 itSub('Unique rejects ACA tokens from Acala', async ({helper}) => {1090 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {1091 const id = {1092 Token: 'ACA',1093 };1094 const destination = uniqueCombinedMultilocationAcala;1095 await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');10961097 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1098 });10991100 await expectFailedToTransact(helper, messageSent);1101 });11021103 itSub('Unique rejects GLMR tokens from Moonbeam', async ({helper}) => {1104 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1105 const id = 'SelfReserve';1106 const destination = uniqueCombinedMultilocation;1107 await helper.xTokens.transfer(alith, id, testAmount, destination, 'Unlimited');11081109 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1110 });11111112 await expectFailedToTransact(helper, messageSent);1113 });11141115 itSub('Unique rejects ASTR tokens from Astar', async ({helper}) => {1116 await usingAstarPlaygrounds(astarUrl, async (helper) => {1117 const destinationParachain = uniqueParachainMultilocation;1118 const beneficiary = uniqueAccountMultilocation;1119 const assets = {1120 V2: [{1121 id: {1122 Concrete: {1123 parents: 0,1124 interior: 'Here',1125 },1126 },1127 fun: {1128 Fungible: testAmount,1129 },1130 }],1131 };1132 const feeAssetItem = 0;11331134 await helper.executeExtrinsic(alice, 'api.tx.polkadotXcm.reserveWithdrawAssets', [1135 destinationParachain,1136 beneficiary,1137 assets,1138 feeAssetItem,1139 ]);11401141 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1142 });11431144 await expectFailedToTransact(helper, messageSent);1145 });11461147 itSub('Unique rejects PDX tokens from Polkadex', async ({helper}) => {11481149 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1150 helper.arrange.createEmptyAccount().addressRaw,1151 {1152 Concrete: {1153 parents: 1,1154 interior: {1155 X1: {1156 Parachain: POLKADEX_CHAIN,1157 },1158 },1159 },1160 },1161 testAmount,1162 );11631164 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {1165 await helper.getSudo().xcm.send(alice, uniqueParachainMultilocation, maliciousXcmProgramFullId);1166 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1167 });11681169 await expectFailedToTransact(helper, messageSent);1170 });1171});11721173describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => {1174 // Unique constants1175 let alice: IKeyringPair;1176 let uniqueAssetLocation;11771178 let randomAccountUnique: IKeyringPair;1179 let randomAccountMoonbeam: IKeyringPair;11801181 // Moonbeam constants1182 let assetId: string;11831184 const uniqueAssetMetadata = {1185 name: 'xcUnique',1186 symbol: 'xcUNQ',1187 decimals: 18,1188 isFrozen: false,1189 minimalBalance: 1n,1190 };11911192 let balanceUniqueTokenInit: bigint;1193 let balanceUniqueTokenMiddle: bigint;1194 let balanceUniqueTokenFinal: bigint;1195 let balanceForeignUnqTokenInit: bigint;1196 let balanceForeignUnqTokenMiddle: bigint;1197 let balanceForeignUnqTokenFinal: bigint;1198 let balanceGlmrTokenInit: bigint;1199 let balanceGlmrTokenMiddle: bigint;1200 let balanceGlmrTokenFinal: bigint;12011202 before(async () => {1203 await usingPlaygrounds(async (helper, privateKey) => {1204 alice = await privateKey('//Alice');1205 [randomAccountUnique] = await helper.arrange.createAccounts([0n], alice);12061207 balanceForeignUnqTokenInit = 0n;12081209 // Set the default version to wrap the first message to other chains.1210 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1211 });12121213 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1214 const alithAccount = helper.account.alithAccount();1215 const baltatharAccount = helper.account.baltatharAccount();1216 const dorothyAccount = helper.account.dorothyAccount();12171218 randomAccountMoonbeam = helper.account.create();12191220 // >>> Sponsoring Dorothy >>>1221 console.log('Sponsoring Dorothy.......');1222 await helper.balance.transferToEthereum(alithAccount, dorothyAccount.address, 11_000_000_000_000_000_000n);1223 console.log('Sponsoring Dorothy.......DONE');1224 // <<< Sponsoring Dorothy <<<12251226 uniqueAssetLocation = {1227 XCM: {1228 parents: 1,1229 interior: {X1: {Parachain: UNIQUE_CHAIN}},1230 },1231 };1232 const existentialDeposit = 1n;1233 const isSufficient = true;1234 const unitsPerSecond = 1n;1235 const numAssetsWeightHint = 0;12361237 if((await helper.assetManager.assetTypeId(uniqueAssetLocation)).toJSON()) {1238 console.log('Unique asset is already registered on MoonBeam');1239 } else {1240 const encodedProposal = helper.assetManager.makeRegisterForeignAssetProposal({1241 location: uniqueAssetLocation,1242 metadata: uniqueAssetMetadata,1243 existentialDeposit,1244 isSufficient,1245 unitsPerSecond,1246 numAssetsWeightHint,1247 });12481249 console.log('Encoded proposal for registerForeignAsset & setAssetUnitsPerSecond is %s', encodedProposal);12501251 await helper.fastDemocracy.executeProposal('register UNQ foreign asset', encodedProposal);1252 }12531254 // >>> Acquire Unique AssetId Info on Moonbeam >>>1255 console.log('Acquire Unique AssetId Info on Moonbeam.......');12561257 assetId = (await helper.assetManager.assetTypeId(uniqueAssetLocation)).toString();1258 console.log('UNQ asset ID is %s', assetId);1259 console.log('Acquire Unique AssetId Info on Moonbeam.......DONE');1260 // >>> Acquire Unique AssetId Info on Moonbeam >>>12611262 // >>> Sponsoring random Account >>>1263 console.log('Sponsoring random Account.......');1264 await helper.balance.transferToEthereum(baltatharAccount, randomAccountMoonbeam.address, 11_000_000_000_000_000_000n);1265 console.log('Sponsoring random Account.......DONE');1266 // <<< Sponsoring random Account <<<12671268 balanceGlmrTokenInit = await helper.balance.getEthereum(randomAccountMoonbeam.address);1269 });12701271 await usingPlaygrounds(async (helper) => {1272 await helper.balance.transferToSubstrate(alice, randomAccountUnique.address, 10n * TRANSFER_AMOUNT);1273 balanceUniqueTokenInit = await helper.balance.getSubstrate(randomAccountUnique.address);1274 });1275 });12761277 itSub('Should connect and send UNQ to Moonbeam', async ({helper}) => {1278 const currencyId = {1279 NativeAssetId: 'Here',1280 };1281 const dest = {1282 V2: {1283 parents: 1,1284 interior: {1285 X2: [1286 {Parachain: MOONBEAM_CHAIN},1287 {AccountKey20: {network: 'Any', key: randomAccountMoonbeam.address}},1288 ],1289 },1290 },1291 };1292 const amount = TRANSFER_AMOUNT;12931294 await helper.xTokens.transfer(randomAccountUnique, currencyId, amount, dest, 'Unlimited');12951296 balanceUniqueTokenMiddle = await helper.balance.getSubstrate(randomAccountUnique.address);1297 expect(balanceUniqueTokenMiddle < balanceUniqueTokenInit).to.be.true;12981299 const transactionFees = balanceUniqueTokenInit - balanceUniqueTokenMiddle - TRANSFER_AMOUNT;1300 console.log('[Unique -> Moonbeam] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(transactionFees));1301 expect(transactionFees > 0, 'Negative fees UNQ, looks like nothing was transferred').to.be.true;13021303 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1304 await helper.wait.newBlocks(3);1305 balanceGlmrTokenMiddle = await helper.balance.getEthereum(randomAccountMoonbeam.address);13061307 const glmrFees = balanceGlmrTokenInit - balanceGlmrTokenMiddle;1308 console.log('[Unique -> Moonbeam] transaction fees on Moonbeam: %s GLMR', helper.util.bigIntToDecimals(glmrFees));1309 expect(glmrFees == 0n).to.be.true;13101311 balanceForeignUnqTokenMiddle = (await helper.assets.account(assetId, randomAccountMoonbeam.address))!;13121313 const unqIncomeTransfer = balanceForeignUnqTokenMiddle - balanceForeignUnqTokenInit;1314 console.log('[Unique -> Moonbeam] income %s UNQ', helper.util.bigIntToDecimals(unqIncomeTransfer));1315 expect(unqIncomeTransfer == TRANSFER_AMOUNT).to.be.true;1316 });1317 });13181319 itSub('Should connect to Moonbeam and send UNQ back', async ({helper}) => {1320 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1321 const asset = {1322 V2: {1323 id: {1324 Concrete: {1325 parents: 1,1326 interior: {1327 X1: {Parachain: UNIQUE_CHAIN},1328 },1329 },1330 },1331 fun: {1332 Fungible: TRANSFER_AMOUNT,1333 },1334 },1335 };1336 const destination = {1337 V2: {1338 parents: 1,1339 interior: {1340 X2: [1341 {Parachain: UNIQUE_CHAIN},1342 {AccountId32: {network: 'Any', id: randomAccountUnique.addressRaw}},1343 ],1344 },1345 },1346 };13471348 await helper.xTokens.transferMultiasset(randomAccountMoonbeam, asset, destination, 'Unlimited');13491350 balanceGlmrTokenFinal = await helper.balance.getEthereum(randomAccountMoonbeam.address);13511352 const glmrFees = balanceGlmrTokenMiddle - balanceGlmrTokenFinal;1353 console.log('[Moonbeam -> Unique] transaction fees on Moonbeam: %s GLMR', helper.util.bigIntToDecimals(glmrFees));1354 expect(glmrFees > 0, 'Negative fees GLMR, looks like nothing was transferred').to.be.true;13551356 const unqRandomAccountAsset = await helper.assets.account(assetId, randomAccountMoonbeam.address);13571358 expect(unqRandomAccountAsset).to.be.null;13591360 balanceForeignUnqTokenFinal = 0n;13611362 const unqOutcomeTransfer = balanceForeignUnqTokenMiddle - balanceForeignUnqTokenFinal;1363 console.log('[Unique -> Moonbeam] outcome %s UNQ', helper.util.bigIntToDecimals(unqOutcomeTransfer));1364 expect(unqOutcomeTransfer == TRANSFER_AMOUNT).to.be.true;1365 });13661367 await helper.wait.newBlocks(3);13681369 balanceUniqueTokenFinal = await helper.balance.getSubstrate(randomAccountUnique.address);1370 const actuallyDelivered = balanceUniqueTokenFinal - balanceUniqueTokenMiddle;1371 expect(actuallyDelivered > 0).to.be.true;13721373 console.log('[Moonbeam -> Unique] actually delivered %s UNQ', helper.util.bigIntToDecimals(actuallyDelivered));13741375 const unqFees = TRANSFER_AMOUNT - actuallyDelivered;1376 console.log('[Moonbeam -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees));1377 expect(unqFees == 0n).to.be.true;1378 });13791380 itSub('Moonbeam can send only up to its balance', async ({helper}) => {1381 // set Moonbeam's sovereign account's balance1382 const moonbeamBalance = 10000n * (10n ** UNQ_DECIMALS);1383 const moonbeamSovereignAccount = helper.address.paraSiblingSovereignAccount(MOONBEAM_CHAIN);1384 await helper.getSudo().balance.setBalanceSubstrate(alice, moonbeamSovereignAccount, moonbeamBalance);13851386 const moreThanMoonbeamHas = moonbeamBalance * 2n;13871388 let targetAccountBalance = 0n;1389 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);13901391 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1392 targetAccount.addressRaw,1393 {1394 Concrete: {1395 parents: 0,1396 interior: 'Here',1397 },1398 },1399 moreThanMoonbeamHas,1400 );14011402 let maliciousXcmProgramSent: any;1403 const maxWaitBlocks = 3;14041405 // Try to trick Unique1406 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1407 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgram]);14081409 // Needed to bypass the call filter.1410 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1411 await helper.fastDemocracy.executeProposal('try to spend more UNQ than Moonbeam has', batchCall);14121413 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1414 });14151416 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash1417 && event.outcome.isFailedToTransactAsset);14181419 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1420 expect(targetAccountBalance).to.be.equal(0n);14211422 // But Moonbeam still can send the correct amount1423 const validTransferAmount = moonbeamBalance / 2n;1424 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1425 targetAccount.addressRaw,1426 {1427 Concrete: {1428 parents: 0,1429 interior: 'Here',1430 },1431 },1432 validTransferAmount,1433 );14341435 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1436 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, validXcmProgram]);14371438 // Needed to bypass the call filter.1439 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1440 await helper.fastDemocracy.executeProposal('Spend the correct amount of UNQ', batchCall);1441 });14421443 await helper.wait.newBlocks(maxWaitBlocks);14441445 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1446 expect(targetAccountBalance).to.be.equal(validTransferAmount);1447 });14481449 itSub('Should not accept reserve transfer of UNQ from Moonbeam', async ({helper}) => {1450 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);1451 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);14521453 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1454 targetAccount.addressRaw,1455 uniqueAssetId,1456 testAmount,1457 );14581459 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(1460 targetAccount.addressRaw,1461 {1462 Concrete: {1463 parents: 0,1464 interior: 'Here',1465 },1466 },1467 testAmount,1468 );14691470 let maliciousXcmProgramFullIdSent: any;1471 let maliciousXcmProgramHereIdSent: any;1472 const maxWaitBlocks = 3;14731474 // Try to trick Unique using full UNQ identification1475 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1476 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramFullId]);14771478 // Needed to bypass the call filter.1479 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1480 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using path asset identification', batchCall);14811482 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1483 });14841485 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash1486 && event.outcome.isUntrustedReserveLocation);14871488 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);1489 expect(accountBalance).to.be.equal(0n);14901491 // Try to trick Unique using shortened UNQ identification1492 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1493 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramHereId]);14941495 // Needed to bypass the call filter.1496 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1497 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using "here" asset identification', batchCall);14981499 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1500 });15011502 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash1503 && event.outcome.isUntrustedReserveLocation);15041505 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1506 expect(accountBalance).to.be.equal(0n);1507 });1508});15091510describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => {1511 let alice: IKeyringPair;1512 let randomAccount: IKeyringPair;15131514 const UNQ_ASSET_ID_ON_ASTAR = 18_446_744_073_709_551_631n; // The value is taken from the live Astar1515 const UNQ_MINIMAL_BALANCE_ON_ASTAR = 1n; // The value is taken from the live Astar15161517 // Unique -> Astar1518 const astarInitialBalance = 1n * (10n ** ASTAR_DECIMALS); // 1 ASTR, existential deposit required to actually create the account on Astar.1519 const unitsPerSecond = 9_451_000_000_000_000_000n; // The value is taken from the live Astar1520 const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ1521 const unqToAstarArrived = 9_962_196_000_000_000_000n; // 9.962 ... UNQ, Astar takes a commision in foreign tokens15221523 // Astar -> Unique1524 const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ1525 const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.962_219_600_000_000_000n UNQ15261527 let balanceAfterUniqueToAstarXCM: bigint;15281529 before(async () => {1530 await usingPlaygrounds(async (helper, privateKey) => {1531 alice = await privateKey('//Alice');1532 [randomAccount] = await helper.arrange.createAccounts([100n], alice);1533 console.log('randomAccount', randomAccount.address);15341535 // Set the default version to wrap the first message to other chains.1536 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1537 });15381539 await usingAstarPlaygrounds(astarUrl, async (helper) => {1540 if(!(await helper.callRpc('api.query.assets.asset', [UNQ_ASSET_ID_ON_ASTAR])).toJSON()) {1541 console.log('1. Create foreign asset and metadata');1542 await helper.getSudo().assets.forceCreate(1543 alice,1544 UNQ_ASSET_ID_ON_ASTAR,1545 alice.address,1546 UNQ_MINIMAL_BALANCE_ON_ASTAR,1547 );15481549 await helper.assets.setMetadata(1550 alice,1551 UNQ_ASSET_ID_ON_ASTAR,1552 'Unique Network',1553 'UNQ',1554 Number(UNQ_DECIMALS),1555 );15561557 console.log('2. Register asset location on Astar');1558 const assetLocation = {1559 V2: {1560 parents: 1,1561 interior: {1562 X1: {1563 Parachain: UNIQUE_CHAIN,1564 },1565 },1566 },1567 };15681569 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, UNQ_ASSET_ID_ON_ASTAR]);15701571 console.log('3. Set UNQ payment for XCM execution on Astar');1572 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);1573 } else {1574 console.log('UNQ is already registered on Astar');1575 }1576 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');1577 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);1578 });1579 });15801581 itSub('Should connect and send UNQ to Astar', async ({helper}) => {1582 const destination = {1583 V2: {1584 parents: 1,1585 interior: {1586 X1: {1587 Parachain: ASTAR_CHAIN,1588 },1589 },1590 },1591 };15921593 const beneficiary = {1594 V2: {1595 parents: 0,1596 interior: {1597 X1: {1598 AccountId32: {1599 network: 'Any',1600 id: randomAccount.addressRaw,1601 },1602 },1603 },1604 },1605 };16061607 const assets = {1608 V2: [1609 {1610 id: {1611 Concrete: {1612 parents: 0,1613 interior: 'Here',1614 },1615 },1616 fun: {1617 Fungible: unqToAstarTransferred,1618 },1619 },1620 ],1621 };16221623 // Initial balance is 100 UNQ1624 const balanceBefore = await helper.balance.getSubstrate(randomAccount.address);1625 console.log(`Initial balance is: ${balanceBefore}`);16261627 const feeAssetItem = 0;1628 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');16291630 // Balance after reserve transfer is less than 901631 balanceAfterUniqueToAstarXCM = await helper.balance.getSubstrate(randomAccount.address);1632 console.log(`UNQ Balance on Unique after XCM is: ${balanceAfterUniqueToAstarXCM}`);1633 console.log(`Unique's UNQ commission is: ${balanceBefore-balanceAfterUniqueToAstarXCM}`);1634 expect(balanceBefore - balanceAfterUniqueToAstarXCM > 0).to.be.true;16351636 await usingAstarPlaygrounds(astarUrl, async (helper) => {1637 await helper.wait.newBlocks(3);1638 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_ASTAR, randomAccount.address);1639 const astarBalance = await helper.balance.getSubstrate(randomAccount.address);16401641 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);1642 console.log(`Astar's UNQ commission is: ${unqToAstarTransferred-xcUNQbalance!}`);16431644 expect(xcUNQbalance).to.eq(unqToAstarArrived);1645 // Astar balance does not changed1646 expect(astarBalance).to.eq(astarInitialBalance);1647 });1648 });16491650 itSub('Should connect to Astar and send UNQ back', async ({helper}) => {1651 await usingAstarPlaygrounds(astarUrl, async (helper) => {1652 const destination = {1653 V2: {1654 parents: 1,1655 interior: {1656 X1: {1657 Parachain: UNIQUE_CHAIN,1658 },1659 },1660 },1661 };16621663 const beneficiary = {1664 V2: {1665 parents: 0,1666 interior: {1667 X1: {1668 AccountId32: {1669 network: 'Any',1670 id: randomAccount.addressRaw,1671 },1672 },1673 },1674 },1675 };16761677 const assets = {1678 V2: [1679 {1680 id: {1681 Concrete: {1682 parents: 1,1683 interior: {1684 X1: {1685 Parachain: UNIQUE_CHAIN,1686 },1687 },1688 },1689 },1690 fun: {1691 Fungible: unqFromAstarTransfered,1692 },1693 },1694 ],1695 };16961697 // Initial balance is 1 ASTR1698 const balanceASTRbefore = await helper.balance.getSubstrate(randomAccount.address);1699 console.log(`ASTR balance is: ${balanceASTRbefore}, it does not changed`);1700 expect(balanceASTRbefore).to.eq(astarInitialBalance);17011702 const feeAssetItem = 0;1703 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw1704 await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);17051706 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_ASTAR, randomAccount.address);1707 const balanceAstar = await helper.balance.getSubstrate(randomAccount.address);1708 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);17091710 // Assert: xcUNQ balance correctly decreased1711 expect(xcUNQbalance).to.eq(unqOnAstarLeft);1712 // Assert: ASTR balance is 0.996...1713 expect(balanceAstar / (10n ** (ASTAR_DECIMALS - 3n))).to.eq(996n);1714 });17151716 await helper.wait.newBlocks(3);1717 const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address);1718 console.log(`UNQ Balance on Unique after XCM is: ${balanceUNQ}`);1719 expect(balanceUNQ).to.eq(balanceAfterUniqueToAstarXCM + unqFromAstarTransfered);1720 });17211722 itSub('Astar can send only up to its balance', async ({helper}) => {1723 // set Astar's sovereign account's balance1724 const astarBalance = 10000n * (10n ** UNQ_DECIMALS);1725 const astarSovereignAccount = helper.address.paraSiblingSovereignAccount(ASTAR_CHAIN);1726 await helper.getSudo().balance.setBalanceSubstrate(alice, astarSovereignAccount, astarBalance);17271728 const moreThanAstarHas = astarBalance * 2n;17291730 let targetAccountBalance = 0n;1731 const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);17321733 const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1734 targetAccount.addressRaw,1735 {1736 Concrete: {1737 parents: 0,1738 interior: 'Here',1739 },1740 },1741 moreThanAstarHas,1742 );17431744 let maliciousXcmProgramSent: any;1745 const maxWaitBlocks = 3;17461747 // Try to trick Unique1748 await usingAstarPlaygrounds(astarUrl, async (helper) => {1749 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);17501751 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1752 });17531754 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramSent.messageHash1755 && event.outcome.isFailedToTransactAsset);17561757 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1758 expect(targetAccountBalance).to.be.equal(0n);17591760 // But Astar still can send the correct amount1761 const validTransferAmount = astarBalance / 2n;1762 const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(1763 targetAccount.addressRaw,1764 {1765 Concrete: {1766 parents: 0,1767 interior: 'Here',1768 },1769 },1770 validTransferAmount,1771 );17721773 await usingAstarPlaygrounds(astarUrl, async (helper) => {1774 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);1775 });17761777 await helper.wait.newBlocks(maxWaitBlocks);17781779 targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address);1780 expect(targetAccountBalance).to.be.equal(validTransferAmount);1781 });17821783 itSub('Should not accept reserve transfer of UNQ from Astar', async ({helper}) => {1784 const testAmount = 10_000n * (10n ** UNQ_DECIMALS);1785 const [targetAccount] = await helper.arrange.createAccounts([0n], alice);17861787 const maliciousXcmProgramFullId = helper.arrange.makeXcmProgramReserveAssetDeposited(1788 targetAccount.addressRaw,1789 uniqueAssetId,1790 testAmount,1791 );17921793 const maliciousXcmProgramHereId = helper.arrange.makeXcmProgramReserveAssetDeposited(1794 targetAccount.addressRaw,1795 {1796 Concrete: {1797 parents: 0,1798 interior: 'Here',1799 },1800 },1801 testAmount,1802 );18031804 let maliciousXcmProgramFullIdSent: any;1805 let maliciousXcmProgramHereIdSent: any;1806 const maxWaitBlocks = 3;18071808 // Try to trick Unique using full UNQ identification1809 await usingAstarPlaygrounds(astarUrl, async (helper) => {1810 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramFullId);18111812 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1813 });18141815 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramFullIdSent.messageHash1816 && event.outcome.isUntrustedReserveLocation);18171818 let accountBalance = await helper.balance.getSubstrate(targetAccount.address);1819 expect(accountBalance).to.be.equal(0n);18201821 // Try to trick Unique using shortened UNQ identification1822 await usingAstarPlaygrounds(astarUrl, async (helper) => {1823 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramHereId);18241825 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1826 });18271828 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == maliciousXcmProgramHereIdSent.messageHash1829 && event.outcome.isUntrustedReserveLocation);18301831 accountBalance = await helper.balance.getSubstrate(targetAccount.address);1832 expect(accountBalance).to.be.equal(0n);1833 });1834});js-packages/tests/tsconfig.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/tests/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../tsconfig.packages.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "dist",
+ "allowSyntheticDefaultImports": true,
+ "resolveJsonModule": true,
+ },
+ "include": ["./src/**/*.json", "./src/**/*.ts"],
+ "references": [
+ { "path": "../playgrounds/tsconfig.json" }
+ ]
+}
\ No newline at end of file
js-packages/tsconfig.base.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/tsconfig.base.json
@@ -0,0 +1,34 @@
+{
+ /**
+ * There uses the strictest configs as the base
+ * https://github.com/tsconfig/bases/blob/f674fa6cbca17062ff02511b02872f8729a597ec/bases/strictest.json
+ */
+ "extends": "@tsconfig/strictest/tsconfig.json",
+ "compilerOptions": {
+ /**
+ * This needs to align with scripts/polkadot-dev-build-ts & dev-ts/loader
+ * (target here is specifically tied to the minimum supported version)
+ */
+ "module": "nodenext",
+ "moduleResolution": "nodenext",
+ "target": "es2022",
+
+ /**
+ * Specific compilation configs for polkadot-js projects as it is used
+ * (we only compile *.d.ts via the tsc command-line)
+ */
+ "declaration": true,
+ "emitDeclarationOnly": true,
+ "jsx": "preserve",
+ "verbatimModuleSyntax": true,
+
+ /**
+ * These appear in strictest, however we don't (yet) use them. For the most part it means
+ * that we actually do have a large number of these lurking (especially on index checks)
+ */
+ "checkJs": false,
+ "exactOptionalPropertyTypes": false,
+ "noPropertyAccessFromIndexSignature": false,
+ "noUncheckedIndexedAccess": false,
+ }
+ }
\ No newline at end of file
js-packages/tsconfig.jsondiffbeforeafterboth--- a/js-packages/tsconfig.json
+++ b/js-packages/tsconfig.json
@@ -1,22 +1,11 @@
{
- "compilerOptions": {
- "target": "ES2020",
- "moduleResolution": "node",
- "esModuleInterop": true,
- "resolveJsonModule": true,
- "module": "ESNext",
- "sourceMap": true,
- "outDir": "dist",
- "strict": true,
- "paths": {
- "@polkadot/types/lookup": ["./src/interfaces/types-lookup.ts"],
- "@unique-nft/types/*": ["./src/interfaces/*"]
- }
- },
- "include": ["./src/**/*", "./src/interfaces/*.ts"],
- "exclude": ["./src/.outdated"],
- "lib": ["es2017"],
- "ts-node": {
- "experimentalSpecifierResolution": "node"
- }
-}
+ "references": [
+ { "path": "./types/tsconfig.json" },
+ { "path": "./playgrounds/tsconfig.json" },
+ { "path": "./scripts/tsconfig.json" },
+ { "path": "./tests/tsconfig.json" }
+ ],
+ "files": [],
+ "exclude": ["**/node_modules"]
+ }
+
\ No newline at end of file
js-packages/tsconfig.packages.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/tsconfig.packages.json
@@ -0,0 +1,32 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+
+ /**
+ * This needs to align with scripts/polkadot-dev-build-ts & dev-ts/loader
+ * (target here is specifically tied to the minimum supported version)
+ */
+ "module": "nodenext",
+ "moduleResolution": "nodenext",
+ "target": "ES2022",
+
+ /**
+ * Specific compilation configs for polkadot-js projects as it is used
+ * (we only compile *.d.ts via the tsc command-line)
+ */
+ "declaration": true,
+ "emitDeclarationOnly": true,
+ "jsx": "preserve",
+ "verbatimModuleSyntax": false,
+
+ /**
+ * These appear in strictest, however we don't (yet) use them. For the most part it means
+ * that we actually do have a large number of these lurking (especially on index checks)
+ */
+ "checkJs": false,
+ "exactOptionalPropertyTypes": false,
+ "noPropertyAccessFromIndexSignature": false,
+ "noUncheckedIndexedAccess": false,
+ },
+}
\ No newline at end of file
js-packages/types/package.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/types/package.json
@@ -0,0 +1,16 @@
+{
+ "author": "",
+ "license": "SEE LICENSE IN ../../../LICENSE",
+ "description": "Interfaces for interacting with contracts and contract ABIs",
+ "engines": {
+ "node": ">=16"
+ },
+ "name": "@unique/opal-types",
+ "type": "module",
+ "version": "1.0.0",
+ "main": "index.js",
+ "dependencies": {
+ "rxjs": "^7.8.1",
+ "tslib": "^2.6.2"
+ }
+}
js-packages/types/src/augment-api-rpc.tsdiffbeforeafterboth--- a/js-packages/types/src/augment-api-rpc.ts
+++ b/js-packages/types/src/augment-api-rpc.ts
@@ -5,11 +5,11 @@
// this is required to allow for ambient/previous definitions
import '@polkadot/rpc-core/types/jsonrpc';
-import type { PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsCollectionLimits, UpDataStructsCollectionStats, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsRpcCollection, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo } from './default';
+import type { PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsCollectionLimits, UpDataStructsCollectionStats, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsRpcCollection, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo } from './default/index.js';
import type { AugmentedRpc } from '@polkadot/rpc-core/types';
import type { Metadata, StorageKey } from '@polkadot/types';
-import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, f64, u128, u32, u64 } from '@polkadot/types-codec';
-import type { AnyNumber, Codec, ITuple } from '@polkadot/types-codec/types';
+import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, f64, u32, u64 } from '@polkadot/types-codec';
+import type { AnyNumber, Codec } from '@polkadot/types-codec/types';
import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author';
import type { EpochAuthorship } from '@polkadot/types/interfaces/babe';
import type { BeefySignedCommitment } from '@polkadot/types/interfaces/beefy';
@@ -35,24 +35,6 @@
declare module '@polkadot/rpc-core/types/jsonrpc' {
interface RpcInterface {
- appPromotion: {
- /**
- * Returns the total amount of unstaked tokens
- **/
- pendingUnstake: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
- /**
- * Returns the total amount of unstaked tokens per block
- **/
- pendingUnstakePerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<ITuple<[u32, u128]>>>>;
- /**
- * Returns the total amount of staked tokens
- **/
- totalStaked: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
- /**
- * Returns the total amount of staked tokens per block when staked
- **/
- totalStakedPerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<ITuple<[u32, u128]>>>>;
- };
author: {
/**
* Returns true if the keystore has private keys for the given public key and key type.
@@ -444,12 +426,6 @@
**/
queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<RuntimeDispatchInfoV1>>;
};
- povinfo: {
- /**
- * Estimate PoV size of encoded signed extrinsics
- **/
- estimateExtrinsicPoV: AugmentedRpc<(encodedXt: Vec<Bytes> | (Bytes | string | Uint8Array)[], at?: Hash | string | Uint8Array) => Observable<UpPovEstimateRpcPovInfo>>;
- };
rpc: {
/**
* Retrieves the list of RPC methods that are exposed by the node
@@ -627,116 +603,6 @@
* Retrieves the version of the node
**/
version: AugmentedRpc<() => Observable<Text>>;
- };
- unique: {
- /**
- * Get the amount of any user tokens owned by an account
- **/
- accountBalance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u32>>;
- /**
- * Get tokens owned by an account in a collection
- **/
- accountTokens: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<u32>>>;
- /**
- * Get the list of admin accounts of a collection
- **/
- adminlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<PalletEvmAccountBasicCrossAccountIdRepr>>>;
- /**
- * Get the amount of currently possible sponsored transactions on a token for the fee to be taken off a sponsor
- **/
- allowance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, sender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, spender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
- /**
- * Tells whether the given `owner` approves the `operator`.
- **/
- allowanceForAll: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, owner: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, operator: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<bool>>>;
- /**
- * Check if a user is allowed to operate within a collection
- **/
- allowed: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<bool>>;
- /**
- * Get the list of accounts allowed to operate within a collection
- **/
- allowlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<PalletEvmAccountBasicCrossAccountIdRepr>>>;
- /**
- * Get the amount of a specific token owned by an account
- **/
- balance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
- /**
- * Get a collection by the specified ID
- **/
- collectionById: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<UpDataStructsRpcCollection>>>;
- /**
- * Get collection properties, optionally limited to the provided keys
- **/
- collectionProperties: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, propertyKeys?: Option<Vec<Text>> | null | Uint8Array | Vec<Text> | (Text | string)[], at?: Hash | string | Uint8Array) => Observable<Vec<UpDataStructsProperty>>>;
- /**
- * Get chain stats about collections
- **/
- collectionStats: AugmentedRpc<(at?: Hash | string | Uint8Array) => Observable<UpDataStructsCollectionStats>>;
- /**
- * Get tokens contained within a collection
- **/
- collectionTokens: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<u32>>>;
- /**
- * Get token constant metadata
- **/
- constMetadata: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Bytes>>;
- /**
- * Get effective collection limits
- **/
- effectiveCollectionLimits: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<UpDataStructsCollectionLimits>>>;
- /**
- * Get the last token ID created in a collection
- **/
- lastTokenId: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u32>>;
- /**
- * Get the number of blocks until sponsoring a transaction is available
- **/
- nextSponsored: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
- /**
- * Get property permissions, optionally limited to the provided keys
- **/
- propertyPermissions: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, propertyKeys?: Option<Vec<Text>> | null | Uint8Array | Vec<Text> | (Text | string)[], at?: Hash | string | Uint8Array) => Observable<Vec<UpDataStructsPropertyKeyPermission>>>;
- /**
- * Get tokens nested directly into the token
- **/
- tokenChildren: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<UpDataStructsTokenChild>>>;
- /**
- * Get token data, including properties, optionally limited to the provided keys, and total pieces for an RFT
- **/
- tokenData: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, propertyKeys?: Option<Vec<Text>> | null | Uint8Array | Vec<Text> | (Text | string)[], at?: Hash | string | Uint8Array) => Observable<UpDataStructsTokenData>>;
- /**
- * Check if the token exists
- **/
- tokenExists: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<bool>>;
- /**
- * Get the token owner
- **/
- tokenOwner: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<PalletEvmAccountBasicCrossAccountIdRepr>>>;
- /**
- * Returns 10 tokens owners in no particular order
- **/
- tokenOwners: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<PalletEvmAccountBasicCrossAccountIdRepr>>>;
- /**
- * Get token properties, optionally limited to the provided keys
- **/
- tokenProperties: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, propertyKeys?: Option<Vec<Text>> | null | Uint8Array | Vec<Text> | (Text | string)[], at?: Hash | string | Uint8Array) => Observable<Vec<UpDataStructsProperty>>>;
- /**
- * Get the topmost token owner in the hierarchy of a possibly nested token
- **/
- topmostTokenOwner: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<PalletEvmAccountBasicCrossAccountIdRepr>>>;
- /**
- * Get the total amount of pieces of an RFT
- **/
- totalPieces: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<u128>>>;
- /**
- * Get the amount of distinctive tokens present in a collection
- **/
- totalSupply: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u32>>;
- /**
- * Get token variable metadata
- **/
- variableMetadata: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Bytes>>;
};
web3: {
/**
js-packages/types/src/augment-types.tsdiffbeforeafterboth--- a/js-packages/types/src/augment-types.ts
+++ b/js-packages/types/src/augment-types.ts
@@ -5,7 +5,8 @@
// this is required to allow for ambient/previous definitions
import '@polkadot/types/types/registry';
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity, CumulusPalletParachainSystemUnincludedSegmentAncestor, CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate, CumulusPalletParachainSystemUnincludedSegmentSegmentTracker, CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportScheduleDispatchTime, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OpalRuntimeRuntimeHoldReason, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmount, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCollatorSelectionHoldReason, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCodeMetadata, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetId, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletGovOriginsOrigin, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRankedCollectiveCall, PalletRankedCollectiveError, PalletRankedCollectiveEvent, PalletRankedCollectiveMemberRecord, PalletRankedCollectiveTally, PalletRankedCollectiveVoteRecord, PalletReferendaCall, PalletReferendaCurve, PalletReferendaDecidingStatus, PalletReferendaDeposit, PalletReferendaError, PalletReferendaEvent, PalletReferendaReferendumInfo, PalletReferendaReferendumStatus, PalletReferendaTrackInfo, PalletRefungibleError, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStateTrieMigrationCall, PalletStateTrieMigrationError, PalletStateTrieMigrationEvent, PalletStateTrieMigrationMigrationCompute, PalletStateTrieMigrationMigrationLimits, PalletStateTrieMigrationMigrationTask, PalletStateTrieMigrationProgress, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeGoAhead, PolkadotPrimitivesV5UpgradeRestriction, PolkadotPrimitivesVstagingAsyncBackingParams, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, StagingXcmDoubleEncoded, StagingXcmV2BodyId, StagingXcmV2BodyPart, StagingXcmV2Instruction, StagingXcmV2Junction, StagingXcmV2MultiAsset, StagingXcmV2MultiLocation, StagingXcmV2MultiassetAssetId, StagingXcmV2MultiassetAssetInstance, StagingXcmV2MultiassetFungibility, StagingXcmV2MultiassetMultiAssetFilter, StagingXcmV2MultiassetMultiAssets, StagingXcmV2MultiassetWildFungibility, StagingXcmV2MultiassetWildMultiAsset, StagingXcmV2MultilocationJunctions, StagingXcmV2NetworkId, StagingXcmV2OriginKind, StagingXcmV2Response, StagingXcmV2TraitsError, StagingXcmV2WeightLimit, StagingXcmV2Xcm, StagingXcmV3Instruction, StagingXcmV3Junction, StagingXcmV3JunctionBodyId, StagingXcmV3JunctionBodyPart, StagingXcmV3JunctionNetworkId, StagingXcmV3Junctions, StagingXcmV3MaybeErrorCode, StagingXcmV3MultiAsset, StagingXcmV3MultiLocation, StagingXcmV3MultiassetAssetId, StagingXcmV3MultiassetAssetInstance, StagingXcmV3MultiassetFungibility, StagingXcmV3MultiassetMultiAssetFilter, StagingXcmV3MultiassetMultiAssets, StagingXcmV3MultiassetWildFungibility, StagingXcmV3MultiassetWildMultiAsset, StagingXcmV3PalletInfo, StagingXcmV3QueryResponseInfo, StagingXcmV3Response, StagingXcmV3TraitsError, StagingXcmV3TraitsOutcome, StagingXcmV3WeightLimit, StagingXcmV3Xcm, StagingXcmVersionedAssetId, StagingXcmVersionedMultiAsset, StagingXcmVersionedMultiAssets, StagingXcmVersionedMultiLocation, StagingXcmVersionedResponse, StagingXcmVersionedXcm, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue } from './default';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity, CumulusPalletParachainSystemUnincludedSegmentAncestor, CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate, CumulusPalletParachainSystemUnincludedSegmentSegmentTracker, CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportScheduleDispatchTime, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OpalRuntimeRuntimeHoldReason, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmount, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCollatorSelectionHoldReason, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCodeMetadata, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetId, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletGovOriginsOrigin, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRankedCollectiveCall, PalletRankedCollectiveError, PalletRankedCollectiveEvent, PalletRankedCollectiveMemberRecord, PalletRankedCollectiveTally, PalletRankedCollectiveVoteRecord, PalletReferendaCall, PalletReferendaCurve, PalletReferendaDecidingStatus, PalletReferendaDeposit, PalletReferendaError, PalletReferendaEvent, PalletReferendaReferendumInfo, PalletReferendaReferendumStatus, PalletReferendaTrackInfo, PalletRefungibleError, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStateTrieMigrationCall, PalletStateTrieMigrationError, PalletStateTrieMigrationEvent, PalletStateTrieMigrationMigrationCompute, PalletStateTrieMigrationMigrationLimits, PalletStateTrieMigrationMigrationTask, PalletStateTrieMigrationProgress, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeGoAhead, PolkadotPrimitivesV5UpgradeRestriction, PolkadotPrimitivesVstagingAsyncBackingParams, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, StagingXcmDoubleEncoded, StagingXcmV2BodyId, StagingXcmV2BodyPart, StagingXcmV2Instruction, StagingXcmV2Junction, StagingXcmV2MultiAsset, StagingXcmV2MultiLocation, StagingXcmV2MultiassetAssetId, StagingXcmV2MultiassetAssetInstance, StagingXcmV2MultiassetFungibility, StagingXcmV2MultiassetMultiAssetFilter, StagingXcmV2MultiassetMultiAssets, StagingXcmV2MultiassetWildFungibility, StagingXcmV2MultiassetWildMultiAsset, StagingXcmV2MultilocationJunctions, StagingXcmV2NetworkId, StagingXcmV2OriginKind, StagingXcmV2Response, StagingXcmV2TraitsError, StagingXcmV2WeightLimit, StagingXcmV2Xcm, StagingXcmV3Instruction, StagingXcmV3Junction, StagingXcmV3JunctionBodyId, StagingXcmV3JunctionBodyPart, StagingXcmV3JunctionNetworkId, StagingXcmV3Junctions, StagingXcmV3MaybeErrorCode, StagingXcmV3MultiAsset, StagingXcmV3MultiLocation, StagingXcmV3MultiassetAssetId, StagingXcmV3MultiassetAssetInstance, StagingXcmV3MultiassetFungibility, StagingXcmV3MultiassetMultiAssetFilter, StagingXcmV3MultiassetMultiAssets, StagingXcmV3MultiassetWildFungibility, StagingXcmV3MultiassetWildMultiAsset, StagingXcmV3PalletInfo, StagingXcmV3QueryResponseInfo, StagingXcmV3Response, StagingXcmV3TraitsError, StagingXcmV3TraitsOutcome, StagingXcmV3WeightLimit, StagingXcmV3Xcm, StagingXcmVersionedAssetId, StagingXcmVersionedMultiAsset, StagingXcmVersionedMultiAssets, StagingXcmVersionedMultiLocation, StagingXcmVersionedResponse, StagingXcmVersionedXcm, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission,
+ UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue } from '@polkadot/types/lookup';
import type { Data, StorageKey } from '@polkadot/types';
import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
@@ -325,34 +326,6 @@
CoreState: CoreState;
CrateVersion: CrateVersion;
CreatedBlock: CreatedBlock;
- CumulusPalletDmpQueueCall: CumulusPalletDmpQueueCall;
- CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData;
- CumulusPalletDmpQueueError: CumulusPalletDmpQueueError;
- CumulusPalletDmpQueueEvent: CumulusPalletDmpQueueEvent;
- CumulusPalletDmpQueuePageIndexData: CumulusPalletDmpQueuePageIndexData;
- CumulusPalletParachainSystemCall: CumulusPalletParachainSystemCall;
- CumulusPalletParachainSystemCodeUpgradeAuthorization: CumulusPalletParachainSystemCodeUpgradeAuthorization;
- CumulusPalletParachainSystemError: CumulusPalletParachainSystemError;
- CumulusPalletParachainSystemEvent: CumulusPalletParachainSystemEvent;
- CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot;
- CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity: CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity;
- CumulusPalletParachainSystemUnincludedSegmentAncestor: CumulusPalletParachainSystemUnincludedSegmentAncestor;
- CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate: CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate;
- CumulusPalletParachainSystemUnincludedSegmentSegmentTracker: CumulusPalletParachainSystemUnincludedSegmentSegmentTracker;
- CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth: CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth;
- CumulusPalletXcmCall: CumulusPalletXcmCall;
- CumulusPalletXcmError: CumulusPalletXcmError;
- CumulusPalletXcmEvent: CumulusPalletXcmEvent;
- CumulusPalletXcmOrigin: CumulusPalletXcmOrigin;
- CumulusPalletXcmpQueueCall: CumulusPalletXcmpQueueCall;
- CumulusPalletXcmpQueueError: CumulusPalletXcmpQueueError;
- CumulusPalletXcmpQueueEvent: CumulusPalletXcmpQueueEvent;
- CumulusPalletXcmpQueueInboundChannelDetails: CumulusPalletXcmpQueueInboundChannelDetails;
- CumulusPalletXcmpQueueInboundState: CumulusPalletXcmpQueueInboundState;
- CumulusPalletXcmpQueueOutboundChannelDetails: CumulusPalletXcmpQueueOutboundChannelDetails;
- CumulusPalletXcmpQueueOutboundState: CumulusPalletXcmpQueueOutboundState;
- CumulusPalletXcmpQueueQueueConfigData: CumulusPalletXcmpQueueQueueConfigData;
- CumulusPrimitivesParachainInherentParachainInherentData: CumulusPrimitivesParachainInherentParachainInherentData;
CustomMetadata15: CustomMetadata15;
CustomValueMetadata15: CustomValueMetadata15;
Data: Data;
@@ -429,25 +402,11 @@
EthAddress: EthAddress;
EthBlock: EthBlock;
EthBloom: EthBloom;
- EthbloomBloom: EthbloomBloom;
EthCallRequest: EthCallRequest;
EthereumAccountId: EthereumAccountId;
EthereumAddress: EthereumAddress;
- EthereumBlock: EthereumBlock;
- EthereumHeader: EthereumHeader;
- EthereumLog: EthereumLog;
EthereumLookupSource: EthereumLookupSource;
- EthereumReceiptEip658ReceiptData: EthereumReceiptEip658ReceiptData;
- EthereumReceiptReceiptV3: EthereumReceiptReceiptV3;
EthereumSignature: EthereumSignature;
- EthereumTransactionAccessListItem: EthereumTransactionAccessListItem;
- EthereumTransactionEip1559Transaction: EthereumTransactionEip1559Transaction;
- EthereumTransactionEip2930Transaction: EthereumTransactionEip2930Transaction;
- EthereumTransactionLegacyTransaction: EthereumTransactionLegacyTransaction;
- EthereumTransactionTransactionAction: EthereumTransactionTransactionAction;
- EthereumTransactionTransactionSignature: EthereumTransactionTransactionSignature;
- EthereumTransactionTransactionV2: EthereumTransactionTransactionV2;
- EthereumTypesHashH64: EthereumTypesHashH64;
EthFeeHistory: EthFeeHistory;
EthFilter: EthFilter;
EthFilterAddress: EthFilterAddress;
@@ -489,11 +448,6 @@
EvmAccount: EvmAccount;
EvmCallInfo: EvmCallInfo;
EvmCallInfoV2: EvmCallInfoV2;
- EvmCoreErrorExitError: EvmCoreErrorExitError;
- EvmCoreErrorExitFatal: EvmCoreErrorExitFatal;
- EvmCoreErrorExitReason: EvmCoreErrorExitReason;
- EvmCoreErrorExitRevert: EvmCoreErrorExitRevert;
- EvmCoreErrorExitSucceed: EvmCoreErrorExitSucceed;
EvmCreateInfo: EvmCreateInfo;
EvmCreateInfoV2: EvmCreateInfoV2;
EvmLog: EvmLog;
@@ -543,33 +497,6 @@
Forcing: Forcing;
ForkTreePendingChange: ForkTreePendingChange;
ForkTreePendingChangeNode: ForkTreePendingChangeNode;
- FpRpcTransactionStatus: FpRpcTransactionStatus;
- FrameSupportDispatchDispatchClass: FrameSupportDispatchDispatchClass;
- FrameSupportDispatchDispatchInfo: FrameSupportDispatchDispatchInfo;
- FrameSupportDispatchPays: FrameSupportDispatchPays;
- FrameSupportDispatchPerDispatchClassU32: FrameSupportDispatchPerDispatchClassU32;
- FrameSupportDispatchPerDispatchClassWeight: FrameSupportDispatchPerDispatchClassWeight;
- FrameSupportDispatchPerDispatchClassWeightsPerClass: FrameSupportDispatchPerDispatchClassWeightsPerClass;
- FrameSupportDispatchRawOrigin: FrameSupportDispatchRawOrigin;
- FrameSupportPalletId: FrameSupportPalletId;
- FrameSupportPreimagesBounded: FrameSupportPreimagesBounded;
- FrameSupportScheduleDispatchTime: FrameSupportScheduleDispatchTime;
- FrameSupportTokensMiscBalanceStatus: FrameSupportTokensMiscBalanceStatus;
- FrameSystemAccountInfo: FrameSystemAccountInfo;
- FrameSystemCall: FrameSystemCall;
- FrameSystemError: FrameSystemError;
- FrameSystemEvent: FrameSystemEvent;
- FrameSystemEventRecord: FrameSystemEventRecord;
- FrameSystemExtensionsCheckGenesis: FrameSystemExtensionsCheckGenesis;
- FrameSystemExtensionsCheckNonce: FrameSystemExtensionsCheckNonce;
- FrameSystemExtensionsCheckSpecVersion: FrameSystemExtensionsCheckSpecVersion;
- FrameSystemExtensionsCheckTxVersion: FrameSystemExtensionsCheckTxVersion;
- FrameSystemExtensionsCheckWeight: FrameSystemExtensionsCheckWeight;
- FrameSystemLastRuntimeUpgradeInfo: FrameSystemLastRuntimeUpgradeInfo;
- FrameSystemLimitsBlockLength: FrameSystemLimitsBlockLength;
- FrameSystemLimitsBlockWeights: FrameSystemLimitsBlockWeights;
- FrameSystemLimitsWeightsPerClass: FrameSystemLimitsWeightsPerClass;
- FrameSystemPhase: FrameSystemPhase;
FullIdentification: FullIdentification;
FunctionArgumentMetadataLatest: FunctionArgumentMetadataLatest;
FunctionArgumentMetadataV10: FunctionArgumentMetadataV10;
@@ -807,12 +734,6 @@
OffenceDetails: OffenceDetails;
Offender: Offender;
OldV1SessionInfo: OldV1SessionInfo;
- OpalRuntimeOriginCaller: OpalRuntimeOriginCaller;
- OpalRuntimeRuntime: OpalRuntimeRuntime;
- OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls: OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls;
- OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance: OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance;
- OpalRuntimeRuntimeCommonSessionKeys: OpalRuntimeRuntimeCommonSessionKeys;
- OpalRuntimeRuntimeHoldReason: OpalRuntimeRuntimeHoldReason;
OpaqueCall: OpaqueCall;
OpaqueKeyOwnershipProof: OpaqueKeyOwnershipProof;
OpaqueMetadata: OpaqueMetadata;
@@ -831,19 +752,6 @@
OriginKindV0: OriginKindV0;
OriginKindV1: OriginKindV1;
OriginKindV2: OriginKindV2;
- OrmlTokensAccountData: OrmlTokensAccountData;
- OrmlTokensBalanceLock: OrmlTokensBalanceLock;
- OrmlTokensModuleCall: OrmlTokensModuleCall;
- OrmlTokensModuleError: OrmlTokensModuleError;
- OrmlTokensModuleEvent: OrmlTokensModuleEvent;
- OrmlTokensReserveData: OrmlTokensReserveData;
- OrmlVestingModuleCall: OrmlVestingModuleCall;
- OrmlVestingModuleError: OrmlVestingModuleError;
- OrmlVestingModuleEvent: OrmlVestingModuleEvent;
- OrmlVestingVestingSchedule: OrmlVestingVestingSchedule;
- OrmlXtokensModuleCall: OrmlXtokensModuleCall;
- OrmlXtokensModuleError: OrmlXtokensModuleError;
- OrmlXtokensModuleEvent: OrmlXtokensModuleEvent;
OutboundHrmpMessage: OutboundHrmpMessage;
OutboundLaneData: OutboundLaneData;
OutboundMessageFee: OutboundMessageFee;
@@ -855,170 +763,23 @@
Owner: Owner;
PageCounter: PageCounter;
PageIndexData: PageIndexData;
- PalletAppPromotionCall: PalletAppPromotionCall;
- PalletAppPromotionError: PalletAppPromotionError;
- PalletAppPromotionEvent: PalletAppPromotionEvent;
- PalletBalancesAccountData: PalletBalancesAccountData;
- PalletBalancesBalanceLock: PalletBalancesBalanceLock;
- PalletBalancesCall: PalletBalancesCall;
- PalletBalancesError: PalletBalancesError;
- PalletBalancesEvent: PalletBalancesEvent;
- PalletBalancesIdAmount: PalletBalancesIdAmount;
- PalletBalancesReasons: PalletBalancesReasons;
- PalletBalancesReserveData: PalletBalancesReserveData;
PalletCallMetadataLatest: PalletCallMetadataLatest;
PalletCallMetadataV14: PalletCallMetadataV14;
- PalletCollatorSelectionCall: PalletCollatorSelectionCall;
- PalletCollatorSelectionError: PalletCollatorSelectionError;
- PalletCollatorSelectionEvent: PalletCollatorSelectionEvent;
- PalletCollatorSelectionHoldReason: PalletCollatorSelectionHoldReason;
- PalletCollectiveCall: PalletCollectiveCall;
- PalletCollectiveError: PalletCollectiveError;
- PalletCollectiveEvent: PalletCollectiveEvent;
- PalletCollectiveRawOrigin: PalletCollectiveRawOrigin;
- PalletCollectiveVotes: PalletCollectiveVotes;
- PalletCommonError: PalletCommonError;
- PalletCommonEvent: PalletCommonEvent;
- PalletConfigurationAppPromotionConfiguration: PalletConfigurationAppPromotionConfiguration;
- PalletConfigurationCall: PalletConfigurationCall;
- PalletConfigurationError: PalletConfigurationError;
- PalletConfigurationEvent: PalletConfigurationEvent;
PalletConstantMetadataLatest: PalletConstantMetadataLatest;
PalletConstantMetadataV14: PalletConstantMetadataV14;
- PalletDemocracyCall: PalletDemocracyCall;
- PalletDemocracyConviction: PalletDemocracyConviction;
- PalletDemocracyDelegations: PalletDemocracyDelegations;
- PalletDemocracyError: PalletDemocracyError;
- PalletDemocracyEvent: PalletDemocracyEvent;
- PalletDemocracyMetadataOwner: PalletDemocracyMetadataOwner;
- PalletDemocracyReferendumInfo: PalletDemocracyReferendumInfo;
- PalletDemocracyReferendumStatus: PalletDemocracyReferendumStatus;
- PalletDemocracyTally: PalletDemocracyTally;
- PalletDemocracyVoteAccountVote: PalletDemocracyVoteAccountVote;
- PalletDemocracyVotePriorLock: PalletDemocracyVotePriorLock;
- PalletDemocracyVoteThreshold: PalletDemocracyVoteThreshold;
- PalletDemocracyVoteVoting: PalletDemocracyVoteVoting;
PalletErrorMetadataLatest: PalletErrorMetadataLatest;
PalletErrorMetadataV14: PalletErrorMetadataV14;
- PalletEthereumCall: PalletEthereumCall;
- PalletEthereumError: PalletEthereumError;
- PalletEthereumEvent: PalletEthereumEvent;
- PalletEthereumFakeTransactionFinalizer: PalletEthereumFakeTransactionFinalizer;
- PalletEthereumRawOrigin: PalletEthereumRawOrigin;
PalletEventMetadataLatest: PalletEventMetadataLatest;
PalletEventMetadataV14: PalletEventMetadataV14;
- PalletEvmAccountBasicCrossAccountIdRepr: PalletEvmAccountBasicCrossAccountIdRepr;
- PalletEvmCall: PalletEvmCall;
- PalletEvmCodeMetadata: PalletEvmCodeMetadata;
- PalletEvmCoderSubstrateError: PalletEvmCoderSubstrateError;
- PalletEvmContractHelpersCall: PalletEvmContractHelpersCall;
- PalletEvmContractHelpersError: PalletEvmContractHelpersError;
- PalletEvmContractHelpersEvent: PalletEvmContractHelpersEvent;
- PalletEvmContractHelpersSponsoringModeT: PalletEvmContractHelpersSponsoringModeT;
- PalletEvmError: PalletEvmError;
- PalletEvmEvent: PalletEvmEvent;
- PalletEvmMigrationCall: PalletEvmMigrationCall;
- PalletEvmMigrationError: PalletEvmMigrationError;
- PalletEvmMigrationEvent: PalletEvmMigrationEvent;
- PalletForeignAssetsAssetId: PalletForeignAssetsAssetId;
- PalletForeignAssetsModuleAssetMetadata: PalletForeignAssetsModuleAssetMetadata;
- PalletForeignAssetsModuleCall: PalletForeignAssetsModuleCall;
- PalletForeignAssetsModuleError: PalletForeignAssetsModuleError;
- PalletForeignAssetsModuleEvent: PalletForeignAssetsModuleEvent;
- PalletForeignAssetsNativeCurrency: PalletForeignAssetsNativeCurrency;
- PalletFungibleError: PalletFungibleError;
- PalletGovOriginsOrigin: PalletGovOriginsOrigin;
PalletId: PalletId;
- PalletIdentityBitFlags: PalletIdentityBitFlags;
- PalletIdentityCall: PalletIdentityCall;
- PalletIdentityError: PalletIdentityError;
- PalletIdentityEvent: PalletIdentityEvent;
- PalletIdentityIdentityField: PalletIdentityIdentityField;
- PalletIdentityIdentityInfo: PalletIdentityIdentityInfo;
- PalletIdentityJudgement: PalletIdentityJudgement;
- PalletIdentityRegistrarInfo: PalletIdentityRegistrarInfo;
- PalletIdentityRegistration: PalletIdentityRegistration;
- PalletInflationCall: PalletInflationCall;
- PalletMaintenanceCall: PalletMaintenanceCall;
- PalletMaintenanceError: PalletMaintenanceError;
- PalletMaintenanceEvent: PalletMaintenanceEvent;
- PalletMembershipCall: PalletMembershipCall;
- PalletMembershipError: PalletMembershipError;
- PalletMembershipEvent: PalletMembershipEvent;
PalletMetadataLatest: PalletMetadataLatest;
PalletMetadataV14: PalletMetadataV14;
PalletMetadataV15: PalletMetadataV15;
- PalletNonfungibleError: PalletNonfungibleError;
- PalletNonfungibleItemData: PalletNonfungibleItemData;
- PalletPreimageCall: PalletPreimageCall;
- PalletPreimageError: PalletPreimageError;
- PalletPreimageEvent: PalletPreimageEvent;
- PalletPreimageRequestStatus: PalletPreimageRequestStatus;
- PalletRankedCollectiveCall: PalletRankedCollectiveCall;
- PalletRankedCollectiveError: PalletRankedCollectiveError;
- PalletRankedCollectiveEvent: PalletRankedCollectiveEvent;
- PalletRankedCollectiveMemberRecord: PalletRankedCollectiveMemberRecord;
- PalletRankedCollectiveTally: PalletRankedCollectiveTally;
- PalletRankedCollectiveVoteRecord: PalletRankedCollectiveVoteRecord;
- PalletReferendaCall: PalletReferendaCall;
- PalletReferendaCurve: PalletReferendaCurve;
- PalletReferendaDecidingStatus: PalletReferendaDecidingStatus;
- PalletReferendaDeposit: PalletReferendaDeposit;
- PalletReferendaError: PalletReferendaError;
- PalletReferendaEvent: PalletReferendaEvent;
- PalletReferendaReferendumInfo: PalletReferendaReferendumInfo;
- PalletReferendaReferendumStatus: PalletReferendaReferendumStatus;
- PalletReferendaTrackInfo: PalletReferendaTrackInfo;
- PalletRefungibleError: PalletRefungibleError;
- PalletSchedulerCall: PalletSchedulerCall;
- PalletSchedulerError: PalletSchedulerError;
- PalletSchedulerEvent: PalletSchedulerEvent;
- PalletSchedulerScheduled: PalletSchedulerScheduled;
- PalletSessionCall: PalletSessionCall;
- PalletSessionError: PalletSessionError;
- PalletSessionEvent: PalletSessionEvent;
PalletsOrigin: PalletsOrigin;
- PalletStateTrieMigrationCall: PalletStateTrieMigrationCall;
- PalletStateTrieMigrationError: PalletStateTrieMigrationError;
- PalletStateTrieMigrationEvent: PalletStateTrieMigrationEvent;
- PalletStateTrieMigrationMigrationCompute: PalletStateTrieMigrationMigrationCompute;
- PalletStateTrieMigrationMigrationLimits: PalletStateTrieMigrationMigrationLimits;
- PalletStateTrieMigrationMigrationTask: PalletStateTrieMigrationMigrationTask;
- PalletStateTrieMigrationProgress: PalletStateTrieMigrationProgress;
PalletStorageMetadataLatest: PalletStorageMetadataLatest;
PalletStorageMetadataV14: PalletStorageMetadataV14;
- PalletStructureCall: PalletStructureCall;
- PalletStructureError: PalletStructureError;
- PalletStructureEvent: PalletStructureEvent;
- PalletSudoCall: PalletSudoCall;
- PalletSudoError: PalletSudoError;
- PalletSudoEvent: PalletSudoEvent;
- PalletTemplateTransactionPaymentChargeTransactionPayment: PalletTemplateTransactionPaymentChargeTransactionPayment;
- PalletTestUtilsCall: PalletTestUtilsCall;
- PalletTestUtilsError: PalletTestUtilsError;
- PalletTestUtilsEvent: PalletTestUtilsEvent;
- PalletTimestampCall: PalletTimestampCall;
- PalletTransactionPaymentEvent: PalletTransactionPaymentEvent;
- PalletTransactionPaymentReleases: PalletTransactionPaymentReleases;
- PalletTreasuryCall: PalletTreasuryCall;
- PalletTreasuryError: PalletTreasuryError;
- PalletTreasuryEvent: PalletTreasuryEvent;
- PalletTreasuryProposal: PalletTreasuryProposal;
- PalletUniqueCall: PalletUniqueCall;
- PalletUniqueError: PalletUniqueError;
- PalletUtilityCall: PalletUtilityCall;
- PalletUtilityError: PalletUtilityError;
- PalletUtilityEvent: PalletUtilityEvent;
PalletVersion: PalletVersion;
- PalletXcmCall: PalletXcmCall;
- PalletXcmError: PalletXcmError;
- PalletXcmEvent: PalletXcmEvent;
- PalletXcmOrigin: PalletXcmOrigin;
- PalletXcmQueryStatus: PalletXcmQueryStatus;
- PalletXcmRemoteLockedFungibleRecord: PalletXcmRemoteLockedFungibleRecord;
- PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage;
ParachainDispatchOrigin: ParachainDispatchOrigin;
- ParachainInfoCall: ParachainInfoCall;
ParachainInherentData: ParachainInherentData;
ParachainProposal: ParachainProposal;
ParachainsInherentData: ParachainsInherentData;
@@ -1058,20 +819,9 @@
PerU16: PerU16;
Phantom: Phantom;
PhantomData: PhantomData;
- PhantomTypeUpDataStructs: PhantomTypeUpDataStructs;
Phase: Phase;
PhragmenScore: PhragmenScore;
Points: Points;
- PolkadotCorePrimitivesInboundDownwardMessage: PolkadotCorePrimitivesInboundDownwardMessage;
- PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage;
- PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage;
- PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat;
- PolkadotPrimitivesV5AbridgedHostConfiguration: PolkadotPrimitivesV5AbridgedHostConfiguration;
- PolkadotPrimitivesV5AbridgedHrmpChannel: PolkadotPrimitivesV5AbridgedHrmpChannel;
- PolkadotPrimitivesV5PersistedValidationData: PolkadotPrimitivesV5PersistedValidationData;
- PolkadotPrimitivesV5UpgradeGoAhead: PolkadotPrimitivesV5UpgradeGoAhead;
- PolkadotPrimitivesV5UpgradeRestriction: PolkadotPrimitivesV5UpgradeRestriction;
- PolkadotPrimitivesVstagingAsyncBackingParams: PolkadotPrimitivesVstagingAsyncBackingParams;
PortableType: PortableType;
PortableTypeV14: PortableTypeV14;
Precommits: Precommits;
@@ -1284,80 +1034,8 @@
SolutionSupports: SolutionSupports;
SpanIndex: SpanIndex;
SpanRecord: SpanRecord;
- SpArithmeticArithmeticError: SpArithmeticArithmeticError;
- SpConsensusAuraSr25519AppSr25519Public: SpConsensusAuraSr25519AppSr25519Public;
- SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId;
- SpCoreEcdsaSignature: SpCoreEcdsaSignature;
- SpCoreEd25519Signature: SpCoreEd25519Signature;
- SpCoreSr25519Public: SpCoreSr25519Public;
- SpCoreSr25519Signature: SpCoreSr25519Signature;
- SpCoreVoid: SpCoreVoid;
SpecVersion: SpecVersion;
- SpRuntimeDigest: SpRuntimeDigest;
- SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem;
- SpRuntimeDispatchError: SpRuntimeDispatchError;
- SpRuntimeModuleError: SpRuntimeModuleError;
- SpRuntimeMultiSignature: SpRuntimeMultiSignature;
- SpRuntimeTokenError: SpRuntimeTokenError;
- SpRuntimeTransactionalError: SpRuntimeTransactionalError;
- SpRuntimeTransactionValidityInvalidTransaction: SpRuntimeTransactionValidityInvalidTransaction;
- SpRuntimeTransactionValidityTransactionValidityError: SpRuntimeTransactionValidityTransactionValidityError;
- SpRuntimeTransactionValidityUnknownTransaction: SpRuntimeTransactionValidityUnknownTransaction;
- SpTrieStorageProof: SpTrieStorageProof;
- SpVersionRuntimeVersion: SpVersionRuntimeVersion;
- SpWeightsRuntimeDbWeight: SpWeightsRuntimeDbWeight;
- SpWeightsWeightV2Weight: SpWeightsWeightV2Weight;
Sr25519Signature: Sr25519Signature;
- StagingXcmDoubleEncoded: StagingXcmDoubleEncoded;
- StagingXcmV2BodyId: StagingXcmV2BodyId;
- StagingXcmV2BodyPart: StagingXcmV2BodyPart;
- StagingXcmV2Instruction: StagingXcmV2Instruction;
- StagingXcmV2Junction: StagingXcmV2Junction;
- StagingXcmV2MultiAsset: StagingXcmV2MultiAsset;
- StagingXcmV2MultiassetAssetId: StagingXcmV2MultiassetAssetId;
- StagingXcmV2MultiassetAssetInstance: StagingXcmV2MultiassetAssetInstance;
- StagingXcmV2MultiassetFungibility: StagingXcmV2MultiassetFungibility;
- StagingXcmV2MultiassetMultiAssetFilter: StagingXcmV2MultiassetMultiAssetFilter;
- StagingXcmV2MultiassetMultiAssets: StagingXcmV2MultiassetMultiAssets;
- StagingXcmV2MultiassetWildFungibility: StagingXcmV2MultiassetWildFungibility;
- StagingXcmV2MultiassetWildMultiAsset: StagingXcmV2MultiassetWildMultiAsset;
- StagingXcmV2MultiLocation: StagingXcmV2MultiLocation;
- StagingXcmV2MultilocationJunctions: StagingXcmV2MultilocationJunctions;
- StagingXcmV2NetworkId: StagingXcmV2NetworkId;
- StagingXcmV2OriginKind: StagingXcmV2OriginKind;
- StagingXcmV2Response: StagingXcmV2Response;
- StagingXcmV2TraitsError: StagingXcmV2TraitsError;
- StagingXcmV2WeightLimit: StagingXcmV2WeightLimit;
- StagingXcmV2Xcm: StagingXcmV2Xcm;
- StagingXcmV3Instruction: StagingXcmV3Instruction;
- StagingXcmV3Junction: StagingXcmV3Junction;
- StagingXcmV3JunctionBodyId: StagingXcmV3JunctionBodyId;
- StagingXcmV3JunctionBodyPart: StagingXcmV3JunctionBodyPart;
- StagingXcmV3JunctionNetworkId: StagingXcmV3JunctionNetworkId;
- StagingXcmV3Junctions: StagingXcmV3Junctions;
- StagingXcmV3MaybeErrorCode: StagingXcmV3MaybeErrorCode;
- StagingXcmV3MultiAsset: StagingXcmV3MultiAsset;
- StagingXcmV3MultiassetAssetId: StagingXcmV3MultiassetAssetId;
- StagingXcmV3MultiassetAssetInstance: StagingXcmV3MultiassetAssetInstance;
- StagingXcmV3MultiassetFungibility: StagingXcmV3MultiassetFungibility;
- StagingXcmV3MultiassetMultiAssetFilter: StagingXcmV3MultiassetMultiAssetFilter;
- StagingXcmV3MultiassetMultiAssets: StagingXcmV3MultiassetMultiAssets;
- StagingXcmV3MultiassetWildFungibility: StagingXcmV3MultiassetWildFungibility;
- StagingXcmV3MultiassetWildMultiAsset: StagingXcmV3MultiassetWildMultiAsset;
- StagingXcmV3MultiLocation: StagingXcmV3MultiLocation;
- StagingXcmV3PalletInfo: StagingXcmV3PalletInfo;
- StagingXcmV3QueryResponseInfo: StagingXcmV3QueryResponseInfo;
- StagingXcmV3Response: StagingXcmV3Response;
- StagingXcmV3TraitsError: StagingXcmV3TraitsError;
- StagingXcmV3TraitsOutcome: StagingXcmV3TraitsOutcome;
- StagingXcmV3WeightLimit: StagingXcmV3WeightLimit;
- StagingXcmV3Xcm: StagingXcmV3Xcm;
- StagingXcmVersionedAssetId: StagingXcmVersionedAssetId;
- StagingXcmVersionedMultiAsset: StagingXcmVersionedMultiAsset;
- StagingXcmVersionedMultiAssets: StagingXcmVersionedMultiAssets;
- StagingXcmVersionedMultiLocation: StagingXcmVersionedMultiLocation;
- StagingXcmVersionedResponse: StagingXcmVersionedResponse;
- StagingXcmVersionedXcm: StagingXcmVersionedXcm;
StakingLedger: StakingLedger;
StakingLedgerTo223: StakingLedgerTo223;
StakingLedgerTo240: StakingLedgerTo240;
@@ -1459,41 +1137,8 @@
UnlockChunk: UnlockChunk;
UnrewardedRelayer: UnrewardedRelayer;
UnrewardedRelayersState: UnrewardedRelayersState;
- UpDataStructsAccessMode: UpDataStructsAccessMode;
- UpDataStructsCollection: UpDataStructsCollection;
- UpDataStructsCollectionLimits: UpDataStructsCollectionLimits;
- UpDataStructsCollectionMode: UpDataStructsCollectionMode;
- UpDataStructsCollectionPermissions: UpDataStructsCollectionPermissions;
- UpDataStructsCollectionStats: UpDataStructsCollectionStats;
- UpDataStructsCreateCollectionData: UpDataStructsCreateCollectionData;
- UpDataStructsCreateFungibleData: UpDataStructsCreateFungibleData;
- UpDataStructsCreateItemData: UpDataStructsCreateItemData;
- UpDataStructsCreateItemExData: UpDataStructsCreateItemExData;
- UpDataStructsCreateNftData: UpDataStructsCreateNftData;
- UpDataStructsCreateNftExData: UpDataStructsCreateNftExData;
- UpDataStructsCreateReFungibleData: UpDataStructsCreateReFungibleData;
- UpDataStructsCreateRefungibleExMultipleOwners: UpDataStructsCreateRefungibleExMultipleOwners;
- UpDataStructsCreateRefungibleExSingleOwner: UpDataStructsCreateRefungibleExSingleOwner;
- UpDataStructsNestingPermissions: UpDataStructsNestingPermissions;
- UpDataStructsOwnerRestrictedSet: UpDataStructsOwnerRestrictedSet;
- UpDataStructsProperties: UpDataStructsProperties;
- UpDataStructsPropertiesMapBoundedVec: UpDataStructsPropertiesMapBoundedVec;
- UpDataStructsPropertiesMapPropertyPermission: UpDataStructsPropertiesMapPropertyPermission;
- UpDataStructsProperty: UpDataStructsProperty;
- UpDataStructsPropertyKeyPermission: UpDataStructsPropertyKeyPermission;
- UpDataStructsPropertyPermission: UpDataStructsPropertyPermission;
- UpDataStructsPropertyScope: UpDataStructsPropertyScope;
- UpDataStructsRpcCollection: UpDataStructsRpcCollection;
- UpDataStructsRpcCollectionFlags: UpDataStructsRpcCollectionFlags;
- UpDataStructsSponsoringRateLimit: UpDataStructsSponsoringRateLimit;
- UpDataStructsSponsorshipStateAccountId32: UpDataStructsSponsorshipStateAccountId32;
- UpDataStructsSponsorshipStateBasicCrossAccountIdRepr: UpDataStructsSponsorshipStateBasicCrossAccountIdRepr;
- UpDataStructsTokenChild: UpDataStructsTokenChild;
- UpDataStructsTokenData: UpDataStructsTokenData;
UpgradeGoAhead: UpgradeGoAhead;
UpgradeRestriction: UpgradeRestriction;
- UpPovEstimateRpcPovInfo: UpPovEstimateRpcPovInfo;
- UpPovEstimateRpcTrieKeyValue: UpPovEstimateRpcTrieKeyValue;
UpwardMessage: UpwardMessage;
usize: usize;
USize: USize;
js-packages/types/src/default/definitions.tsdiffbeforeafterboth--- a/js-packages/types/src/default/definitions.ts
+++ b/js-packages/types/src/default/definitions.ts
@@ -1,4 +1,4 @@
-import types from '../lookup';
+import types from '../lookup.js';
export default {
types,
js-packages/types/src/definitions.tsdiffbeforeafterboth--- a/js-packages/types/src/definitions.ts
+++ b/js-packages/types/src/definitions.ts
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-export {default as unique} from './unique/definitions';
-export {default as appPromotion} from './appPromotion/definitions';
-export {default as povinfo} from './povinfo/definitions';
-export {default as default} from './default/definitions';
+export {default as unique} from './unique/definitions.js';
+export {default as appPromotion} from './appPromotion/definitions.js';
+export {default as povinfo} from './povinfo/definitions.js';
+export {default as default} from './default/definitions.js';
js-packages/types/src/registry.tsdiffbeforeafterboth--- a/js-packages/types/src/registry.ts
+++ b/js-packages/types/src/registry.ts
@@ -5,7 +5,8 @@
// this is required to allow for ambient/previous definitions
import '@polkadot/types/types/registry';
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity, CumulusPalletParachainSystemUnincludedSegmentAncestor, CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate, CumulusPalletParachainSystemUnincludedSegmentSegmentTracker, CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportScheduleDispatchTime, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OpalRuntimeRuntimeHoldReason, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmount, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCollatorSelectionHoldReason, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCodeMetadata, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetId, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletGovOriginsOrigin, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRankedCollectiveCall, PalletRankedCollectiveError, PalletRankedCollectiveEvent, PalletRankedCollectiveMemberRecord, PalletRankedCollectiveTally, PalletRankedCollectiveVoteRecord, PalletReferendaCall, PalletReferendaCurve, PalletReferendaDecidingStatus, PalletReferendaDeposit, PalletReferendaError, PalletReferendaEvent, PalletReferendaReferendumInfo, PalletReferendaReferendumStatus, PalletReferendaTrackInfo, PalletRefungibleError, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStateTrieMigrationCall, PalletStateTrieMigrationError, PalletStateTrieMigrationEvent, PalletStateTrieMigrationMigrationCompute, PalletStateTrieMigrationMigrationLimits, PalletStateTrieMigrationMigrationTask, PalletStateTrieMigrationProgress, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeGoAhead, PolkadotPrimitivesV5UpgradeRestriction, PolkadotPrimitivesVstagingAsyncBackingParams, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, StagingXcmDoubleEncoded, StagingXcmV2BodyId, StagingXcmV2BodyPart, StagingXcmV2Instruction, StagingXcmV2Junction, StagingXcmV2MultiAsset, StagingXcmV2MultiLocation, StagingXcmV2MultiassetAssetId, StagingXcmV2MultiassetAssetInstance, StagingXcmV2MultiassetFungibility, StagingXcmV2MultiassetMultiAssetFilter, StagingXcmV2MultiassetMultiAssets, StagingXcmV2MultiassetWildFungibility, StagingXcmV2MultiassetWildMultiAsset, StagingXcmV2MultilocationJunctions, StagingXcmV2NetworkId, StagingXcmV2OriginKind, StagingXcmV2Response, StagingXcmV2TraitsError, StagingXcmV2WeightLimit, StagingXcmV2Xcm, StagingXcmV3Instruction, StagingXcmV3Junction, StagingXcmV3JunctionBodyId, StagingXcmV3JunctionBodyPart, StagingXcmV3JunctionNetworkId, StagingXcmV3Junctions, StagingXcmV3MaybeErrorCode, StagingXcmV3MultiAsset, StagingXcmV3MultiLocation, StagingXcmV3MultiassetAssetId, StagingXcmV3MultiassetAssetInstance, StagingXcmV3MultiassetFungibility, StagingXcmV3MultiassetMultiAssetFilter, StagingXcmV3MultiassetMultiAssets, StagingXcmV3MultiassetWildFungibility, StagingXcmV3MultiassetWildMultiAsset, StagingXcmV3PalletInfo, StagingXcmV3QueryResponseInfo, StagingXcmV3Response, StagingXcmV3TraitsError, StagingXcmV3TraitsOutcome, StagingXcmV3WeightLimit, StagingXcmV3Xcm, StagingXcmVersionedAssetId, StagingXcmVersionedMultiAsset, StagingXcmVersionedMultiAssets, StagingXcmVersionedMultiLocation, StagingXcmVersionedResponse, StagingXcmVersionedXcm, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity, CumulusPalletParachainSystemUnincludedSegmentAncestor, CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate, CumulusPalletParachainSystemUnincludedSegmentSegmentTracker, CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportScheduleDispatchTime, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OpalRuntimeRuntimeHoldReason, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmount, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCollatorSelectionHoldReason, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCodeMetadata, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetId, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletGovOriginsOrigin, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRankedCollectiveCall, PalletRankedCollectiveError, PalletRankedCollectiveEvent, PalletRankedCollectiveMemberRecord, PalletRankedCollectiveTally, PalletRankedCollectiveVoteRecord, PalletReferendaCall, PalletReferendaCurve, PalletReferendaDecidingStatus, PalletReferendaDeposit, PalletReferendaError, PalletReferendaEvent, PalletReferendaReferendumInfo, PalletReferendaReferendumStatus, PalletReferendaTrackInfo, PalletRefungibleError, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStateTrieMigrationCall, PalletStateTrieMigrationError, PalletStateTrieMigrationEvent, PalletStateTrieMigrationMigrationCompute, PalletStateTrieMigrationMigrationLimits, PalletStateTrieMigrationMigrationTask, PalletStateTrieMigrationProgress, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeGoAhead, PolkadotPrimitivesV5UpgradeRestriction, PolkadotPrimitivesVstagingAsyncBackingParams, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, StagingXcmDoubleEncoded, StagingXcmV2BodyId, StagingXcmV2BodyPart, StagingXcmV2Instruction, StagingXcmV2Junction, StagingXcmV2MultiAsset, StagingXcmV2MultiLocation, StagingXcmV2MultiassetAssetId, StagingXcmV2MultiassetAssetInstance, StagingXcmV2MultiassetFungibility, StagingXcmV2MultiassetMultiAssetFilter, StagingXcmV2MultiassetMultiAssets, StagingXcmV2MultiassetWildFungibility, StagingXcmV2MultiassetWildMultiAsset, StagingXcmV2MultilocationJunctions, StagingXcmV2NetworkId, StagingXcmV2OriginKind, StagingXcmV2Response, StagingXcmV2TraitsError, StagingXcmV2WeightLimit, StagingXcmV2Xcm, StagingXcmV3Instruction, StagingXcmV3Junction, StagingXcmV3JunctionBodyId, StagingXcmV3JunctionBodyPart, StagingXcmV3JunctionNetworkId, StagingXcmV3Junctions, StagingXcmV3MaybeErrorCode, StagingXcmV3MultiAsset, StagingXcmV3MultiLocation, StagingXcmV3MultiassetAssetId, StagingXcmV3MultiassetAssetInstance, StagingXcmV3MultiassetFungibility, StagingXcmV3MultiassetMultiAssetFilter, StagingXcmV3MultiassetMultiAssets, StagingXcmV3MultiassetWildFungibility, StagingXcmV3MultiassetWildMultiAsset, StagingXcmV3PalletInfo, StagingXcmV3QueryResponseInfo, StagingXcmV3Response, StagingXcmV3TraitsError, StagingXcmV3TraitsOutcome, StagingXcmV3WeightLimit, StagingXcmV3Xcm, StagingXcmVersionedAssetId, StagingXcmVersionedMultiAsset, StagingXcmVersionedMultiAssets, StagingXcmVersionedMultiLocation, StagingXcmVersionedResponse, StagingXcmVersionedXcm, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission,
+ UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue } from '@polkadot/types/lookup';
declare module '@polkadot/types/types/registry' {
interface InterfaceTypes {
js-packages/types/tsconfig.jsondiffbeforeafterboth--- /dev/null
+++ b/js-packages/types/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../tsconfig.packages.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "dist"
+ }
+}
\ No newline at end of file
tests/.dockerignorediffbeforeafterboth--- a/tests/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules/
-Dockerfile-tests