From 07ce8a8955e26d47a736848f4f31a2a3b632943d Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 7 Nov 2024 20:37:47 -0500 Subject: [PATCH 01/13] test para to eth --- src/createXcmTypes/ParaToEthereum.spec.ts | 0 src/createXcmTypes/ParaToEthereum.ts | 0 src/createXcmTypes/util/getAssetId.ts | 15 +++++ src/errors/checkXcmTxInputs.ts | 24 +++++++ src/index.ts | 62 +++++++++++++++++++ .../parachains/bifrost.spec.ts | 6 ++ vitest.config.ts | 8 +++ 7 files changed, 115 insertions(+) create mode 100644 src/createXcmTypes/ParaToEthereum.spec.ts create mode 100644 src/createXcmTypes/ParaToEthereum.ts create mode 100644 vitest.config.ts diff --git a/src/createXcmTypes/ParaToEthereum.spec.ts b/src/createXcmTypes/ParaToEthereum.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/createXcmTypes/ParaToEthereum.ts b/src/createXcmTypes/ParaToEthereum.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/createXcmTypes/util/getAssetId.ts b/src/createXcmTypes/util/getAssetId.ts index f5827430..e73477ea 100644 --- a/src/createXcmTypes/util/getAssetId.ts +++ b/src/createXcmTypes/util/getAssetId.ts @@ -9,6 +9,9 @@ import { Registry } from '../../registry'; import { validateNumber } from '../../validate'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from './foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from './foreignAssetsMultiLocationExists'; +import { UnionXcmMultiLocation } from '../types'; +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; +import { assetIdIsLocation } from './assetIdIsLocation'; /** * @@ -195,6 +198,18 @@ export const getAssetId = async ( if (typeof info.symbol === 'string' && info.symbol.toLowerCase() === asset.toLowerCase()) { assetId = info.xcmV1MultiLocation; registry.setAssetInCache(asset, assetId); + } else if (assetIdIsLocation(asset)){ + const v1AssetLocation = (JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation); + + if ('v1' in v1AssetLocation) { + const registryAssetLocation = parseLocationStrToLocation(JSON.stringify(v1AssetLocation.v1)); + const assetLocation = parseLocationStrToLocation(asset); + + if (JSON.stringify(registryAssetLocation).toLowerCase() === JSON.stringify(assetLocation).toLowerCase()) { + assetId = info.xcmV1MultiLocation; + registry.setAssetInCache(asset, assetId); + } + } } } } diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index b7dadc4d..76b7cd74 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -25,6 +25,8 @@ import { AssetInfo, Direction } from '../types'; import { validateNumber } from '../validate'; import { BaseError, BaseErrorsEnum } from './BaseError'; import type { CheckXcmTxInputsOpts } from './types'; +import { UnionXcmMultiLocation } from '../createXcmTypes/types'; +import { parseLocationStrToLocation } from '../createXcmTypes/util/parseLocationStrToLocation'; /** * Ensure when sending tx's to or from the relay chain that the length of the assetIds array @@ -606,6 +608,15 @@ export const checkParaAssets = async ( BaseErrorsEnum.AssetNotFound, ); } + } else if (api.query.assetRegistry) { + if (assetIdIsLocation(assetId)) { + if ('locationAssets' in api.query.assetRegistry) { + const assetLocation = await api.query.assetRegistry.locationAssets(assetId); + if (assetLocation) { + console.log("LOCATION OF ASSET REGISTRY ASSET", JSON.stringify(assetLocation)) + } + } + } } else { // Parachain doesn't support pallet assets // check for assetId in registry @@ -629,6 +640,19 @@ export const checkParaAssets = async ( for (const info of paraXcAssets) { if (typeof info.symbol === 'string' && info.symbol.toLowerCase() === assetId.toLowerCase()) { return; + } else if (assetIdIsLocation(assetId)) { + console.log("info.xcmV1MultiLocation.toLowerCase()", info.xcmV1MultiLocation.toLowerCase()) + const v1AssetLocation = (JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation); + + if ('v1' in v1AssetLocation ) { + const registryAssetLocation = parseLocationStrToLocation(JSON.stringify(v1AssetLocation.v1)); + const assetLocation = parseLocationStrToLocation(assetId); + + + if (JSON.stringify(registryAssetLocation).toLowerCase() === JSON.stringify(assetLocation).toLowerCase()) { + return; + } + } } } } diff --git a/src/index.ts b/src/index.ts index 270fc9e0..b0f8abc1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,65 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; + +// import { hexToU8a} from '@polkadot/util'; +// import type { ExtrinsicPayloadValue } from '@polkadot/types/types'; + +import { ApiPromise, WsProvider } from '@polkadot/api'; + +import { AssetTransferApi } from './AssetTransferApi'; + +const main = async () => { + // const provider = new WsProvider(`wss://bifrost-polkadot-rpc.dwellir.com/ws`); + const provider = new WsProvider(`wss://hydradx-rpc.dwellir.com`); + + const api = await ApiPromise.create({ provider }); + + await api.isReady; + + const assetTransferApi = new AssetTransferApi(api, 'hydradx', 4, + { + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: "hydradx", + xcAssetsData: [ + { + "paraID": 0, + "symbol": "WETH.snow", + "decimals": 18, + "xcmV1MultiLocation": "{\"v1\":{\"parents\":2,\"interior\":{\"x2\":[{\"globalConsensus\":{\"ethereum\":{\"chainId\":1}}},{\"accountKey20\":{\"network\":null,\"key\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"}}]}}}", + "asset": "1000189", + "assetHubReserveLocation": "{\"parents\":\"1\",\"interior\":{\"X1\":{\"Parachain\":\"1000\"}}}", + }, + ] + } + } + } + } +); + + + + const payload = await assetTransferApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', // dest address + ['WETH.snow'], + ['10000000000000'], + { + format: 'call', + xcmVersion: 4, + }, + ); + + console.log('payload', JSON.stringify(payload)); + + const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'call'); + console.log('decodedPayload', decodedPayload); +}; + +main(); diff --git a/src/integrationTests/parachains/bifrost.spec.ts b/src/integrationTests/parachains/bifrost.spec.ts index 9e19f353..a5cb00df 100644 --- a/src/integrationTests/parachains/bifrost.spec.ts +++ b/src/integrationTests/parachains/bifrost.spec.ts @@ -681,6 +681,12 @@ describe('Bifrost', () => { 'payload', '0x0d01290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], + [ + '1000', + '{"parents":1,"interior":{"x2":[{"parachain":2032},{"generalKey":"0x0002"}]}}', + 'payload', + '0x0d01290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300' + ] ]; for (const test of tests) { diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..78f1893a --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + // ... Specify options here. + silentSkip: true + }, +}) \ No newline at end of file From c582f20516e825703c7f790a1eec0574b596defd Mon Sep 17 00:00:00 2001 From: marshacb Date: Mon, 11 Nov 2024 11:34:37 -0500 Subject: [PATCH 02/13] feat: implement para to ethereum --- .eslintignore | 2 + .eslintrc.js | 1 + e2e-tests/tsconfig.json | 2 +- .../hydrationToEthereumMainnetWETH.ts | 65 ++++ examples/tsconfig.json | 2 +- scripts/tsconfig.json | 3 +- src/AssetTransferApi.spec.ts | 7 + src/AssetTransferApi.ts | 17 +- .../transferAssetsUsingTypeAndThen.ts | 186 +++++++++- src/createXcmCalls/types.ts | 1 + src/createXcmTypes/ParaToEthereum.spec.ts | 296 ++++++++++++++++ src/createXcmTypes/ParaToEthereum.ts | 319 ++++++++++++++++++ src/createXcmTypes/index.ts | 2 + src/createXcmTypes/types.ts | 20 +- .../util/chainDestIsEthereum.spec.ts | 19 ++ .../util/chainDestIsEthereum.ts | 15 + .../util/createXcmVersionedAssetId.ts | 6 +- src/createXcmTypes/util/getAssetId.ts | 8 +- .../util/parseLocationStrToLocation.spec.ts | 20 ++ src/errors/checkXcmTxInputs.spec.ts | 14 + src/errors/checkXcmTxInputs.ts | 43 ++- src/index.ts | 62 ---- .../parachains/bifrost.spec.ts | 6 - .../parachains/hydration.spec.ts | 66 ++++ src/registry/types.ts | 8 +- .../adjustedMockHydrationParachainApi.ts | 97 ++++++ src/testHelpers/metadata/hydrationV3100.ts | 2 + src/testHelpers/mockHydrationParachainApi.ts | 6 + src/types.ts | 7 +- tsconfig.json | 4 +- vitest.config.ts | 8 - 31 files changed, 1184 insertions(+), 130 deletions(-) create mode 100644 examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts create mode 100644 src/createXcmTypes/util/chainDestIsEthereum.spec.ts create mode 100644 src/createXcmTypes/util/chainDestIsEthereum.ts create mode 100644 src/integrationTests/parachains/hydration.spec.ts create mode 100644 src/testHelpers/adjustedMockHydrationParachainApi.ts create mode 100644 src/testHelpers/metadata/hydrationV3100.ts create mode 100644 src/testHelpers/mockHydrationParachainApi.ts delete mode 100644 vitest.config.ts diff --git a/.eslintignore b/.eslintignore index a2a0d9cb..65fb9665 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,4 @@ **/lib/* **/build/* + + diff --git a/.eslintrc.js b/.eslintrc.js index f756763f..14b8e172 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,6 +2,7 @@ const config = require('@substrate/dev/config/eslint'); module.exports = { ...config, + parser: "@typescript-eslint/parser", parserOptions: { project: '**/tsconfig.json', }, diff --git a/e2e-tests/tsconfig.json b/e2e-tests/tsconfig.json index afbdecef..2133e1ca 100644 --- a/e2e-tests/tsconfig.json +++ b/e2e-tests/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "../node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "build", diff --git a/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts new file mode 100644 index 00000000..39f040d2 --- /dev/null +++ b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts @@ -0,0 +1,65 @@ +/** + * When importing from @substrate/asset-transfer-api it would look like the following + * + * import { AssetTransferApi, constructApiPromise } from '@substrate/asset-transfer-api' + */ +import { AssetTransferApi, constructApiPromise } from '../../../src'; +import { TxResult } from '../../../src/types'; +import { GREEN, PURPLE, RESET } from '../../colors'; + +/** + * In this example we are creating a `transferAssetsUsingTypeAndThen` call to send Snowbridge WETH + * from a Hydration Polkadot (Parachain) account + * to a Ethereum Mainner (Chain Id 1) account, where the `xcmVersion` is set to 4 and no `weightLimit` is provided declaring that + * the allowable weight will be `unlimited` and `paysWithFeeDest` is asset ID `DOT` (Polkadot) + * declaring that `DOT` `should be used to pay for tx fees on the first leg of the XCM transfer (Polkadot AssetHub). + * + * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. + */ +const main = async () => { + const xcmVersion = 4; + const { api, specName } = await constructApiPromise('wss://hydradx-rpc.dwellir.com'); + const assetApi = new AssetTransferApi(api, specName, xcmVersion, { + injectedRegistry: { + polkadot: { + 2034: { + xcAssetsData: [ + { + symbol: 'WETH.snow', + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + }, + ], + }, + }, + }, + }); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}]}}`, + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + ['WETH.snow', 'DOT'], + ['1000000000000', '10000000000'], + { + sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', + format: 'call', + xcmVersion, + paysWithFeeDest: 'DOT', // Asset to be used to pay for fees on destination chain + }, + ); + + console.log(callInfo); + } catch (e) { + console.error(e); + throw Error(e as string); + } + + const decoded = assetApi.decodeExtrinsic(callInfo.tx, 'call'); + console.log(`\n${PURPLE}The following decoded tx:\n${GREEN} ${JSON.stringify(JSON.parse(decoded), null, 4)}${RESET}`); +}; + +main() + .catch((err) => console.error(err)) + .finally(() => process.exit()); diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 5a1d588c..6256d09c 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "../node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "build", diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index afbdecef..12687c0d 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -1,10 +1,9 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "../node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "build", "suppressImplicitAnyIndexErrors": true, - "ignoreDeprecations": "5.0", "resolveJsonModule": true } } diff --git a/src/AssetTransferApi.spec.ts b/src/AssetTransferApi.spec.ts index d2121a8d..232e4190 100644 --- a/src/AssetTransferApi.spec.ts +++ b/src/AssetTransferApi.spec.ts @@ -66,6 +66,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: true, isDestParachain: false, isDestBridge: false, + isDestEthereum: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToSystem'); @@ -79,6 +80,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: false, isDestParachain: true, isDestBridge: false, + isDestEthereum: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToPara'); @@ -92,6 +94,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: false, isDestParachain: false, isDestBridge: false, + isDestEthereum: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToRelay'); @@ -105,6 +108,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: false, isDestParachain: true, isDestBridge: false, + isDestEthereum: false, }; const res = relayAssetsApi['establishDirection'](false, info); expect(res).toEqual('RelayToPara'); @@ -118,6 +122,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: true, isDestParachain: false, isDestBridge: false, + isDestEthereum: false, }; const res = relayAssetsApi['establishDirection'](false, info); expect(res).toEqual('RelayToSystem'); @@ -131,6 +136,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: true, isDestParachain: false, isDestBridge: false, + isDestEthereum: false, }; const res = moonriverAssetsApi['establishDirection'](false, info); expect(res).toEqual('ParaToSystem'); @@ -144,6 +150,7 @@ describe('AssetTransferAPI', () => { isDestSystemParachain: false, isDestParachain: true, isDestBridge: false, + isDestEthereum: false, }; const res = moonriverAssetsApi['establishDirection'](false, info); expect(res).toEqual('ParaToPara'); diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 24522f54..b80d589e 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -40,6 +40,7 @@ import { UnionXcmMultiLocation, XcmVersionedAssetId } from './createXcmTypes/typ import { assetIdIsLocation } from './createXcmTypes/util/assetIdIsLocation'; import { assetIdsContainRelayAsset } from './createXcmTypes/util/assetIdsContainsRelayAsset'; import { chainDestIsBridge } from './createXcmTypes/util/chainDestIsBridge'; +import { chainDestIsEthereum } from './createXcmTypes/util/chainDestIsEthereum'; import { createXcmVersionedAssetId } from './createXcmTypes/util/createXcmVersionedAssetId'; import { getAssetId } from './createXcmTypes/util/getAssetId'; import { getGlobalConsensusSystemName } from './createXcmTypes/util/getGlobalConsensusSystemName'; @@ -230,6 +231,7 @@ export class AssetTransferApi { isDestSystemParachain: isSystemChain(destChainId), isDestParachain: isParachain(destChainId), isDestBridge: chainDestIsBridge(destChainId), + isDestEthereum: chainDestIsEthereum(destChainId), }; /** @@ -570,6 +572,7 @@ export class AssetTransferApi { isOriginParachain, isOriginSystemParachain, isDestBridge, + isDestEthereum, } = chainOriginDestInfo; /** @@ -606,6 +609,11 @@ export class AssetTransferApi { return Direction.RelayToBridge; } + // Para To ETH + if (isOriginParachain && isDestEthereum) { + return Direction.ParaToEthereum; + } + /** * Check if the origin is a Parachain or Parathread */ @@ -890,6 +898,11 @@ export class AssetTransferApi { return AssetCallType.Reserve; } + // para to assethub to ethereum -> reserve + if (xcmDirection === Direction.ParaToEthereum) { + return AssetCallType.Reserve; + } + return AssetCallType.Reserve; } /** @@ -1316,7 +1329,9 @@ export class AssetTransferApi { txMethod = 'transferMultiassets'; } } else if (api.tx[xcmPallet]) { - if (api.tx[xcmPallet].transferAssetsUsingTypeAndThen && baseOpts.assetTransferType) { + if (xcmDirection === Direction.ParaToEthereum) { + txMethod = 'transferAssetsUsingTypeAndThen'; + } else if (api.tx[xcmPallet].transferAssetsUsingTypeAndThen && baseOpts.assetTransferType) { txMethod = 'transferAssetsUsingTypeAndThen'; } else if (api.tx[xcmPallet].transferAssets) { txMethod = 'transferAssets'; diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index 390291ba..e5876ccb 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -4,10 +4,26 @@ import type { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; import type { ISubmittableResult } from '@polkadot/types/types'; import { createXcmTypes } from '../../createXcmTypes'; +import { + UnionXcmMultiLocation, + WildAsset, + XcmAsset, + XcmMultiAsset, + XcmV2Junction, + XcmV3Junction, + XcmV4Junction, + XcmVersionedAssetId, +} from '../../createXcmTypes/types'; +import { assetIdIsLocation } from '../../createXcmTypes/util/assetIdIsLocation'; import { createXcmOnDestBeneficiary } from '../../createXcmTypes/util/createXcmOnDestBeneficiary'; import { createXcmOnDestination } from '../../createXcmTypes/util/createXcmOnDestination'; import { createXcmVersionedAssetId } from '../../createXcmTypes/util/createXcmVersionedAssetId'; +import { getAssetId } from '../../createXcmTypes/util/getAssetId'; +import { parseLocationStrToLocation } from '../../createXcmTypes/util/parseLocationStrToLocation'; import { resolveAssetTransferType } from '../../createXcmTypes/util/resolveAssetTransferType'; +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { sanitizeAddress } from '../../sanitize/sanitizeAddress'; +import { AssetTransferType, Direction } from '../../types'; import { normalizeArrToStr } from '../../util/normalizeArrToStr'; import type { CreateXcmCallOpts } from '../types'; import { establishXcmPallet } from '../util/establishXcmPallet'; @@ -22,7 +38,8 @@ export const transferAssetsUsingTypeAndThen = async ( baseArgs: PolkadotXcmBaseArgs, opts: CreateXcmCallOpts, ): Promise> => { - const { api, direction, destAddr, assetIds, amounts, destChainId, xcmVersion, specName, registry } = baseArgs; + const { api, direction, destAddr, assetIds, amounts, xcmVersion, specName, registry } = baseArgs; + let { destChainId } = baseArgs; const { weightLimit, paysWithFeeDest, @@ -32,14 +49,11 @@ export const transferAssetsUsingTypeAndThen = async ( remoteReserveAssetTransferTypeLocation, feesTransferType: feesTransferTypeStr, remoteReserveFeesTransferTypeLocation, - customXcmOnDest: customXcmOnDestStr, } = opts; + let { customXcmOnDest: customXcmOnDestStr, sendersAddr } = opts; - const pallet = establishXcmPallet(api); - const ext = api.tx[pallet].transferAssetsUsingTypeAndThen; const typeCreator = createXcmTypes[direction]; const beneficiary = createXcmOnDestBeneficiary(destAddr, xcmVersion); - const dest = typeCreator.createDest(destChainId, xcmVersion); const assets = await typeCreator.createAssets(normalizeArrToStr(amounts), xcmVersion, specName, assetIds, { registry, isForeignAssetsTransfer, @@ -47,22 +61,158 @@ export const transferAssetsUsingTypeAndThen = async ( api, }); + let assetTransferType: AssetTransferType; + let feeAssetTransferType: AssetTransferType; + + if (direction === Direction.ParaToEthereum) { + let erc20Location: WildAsset | undefined = undefined; + let erc20Key: string | undefined = undefined; + + // get erc20 Asset Location from assetIds + for (const assetId of assetIds) { + const assetIdLocationStr = await getAssetId(api, registry, assetId, specName, xcmVersion, true); + if (!assetIdLocationStr.toLowerCase().includes('ethereum')) { + continue; + } + let assetLocation = JSON.parse(assetIdLocationStr) as UnionXcmMultiLocation; + + if ('v1' in assetLocation) { + assetLocation = parseLocationStrToLocation(JSON.stringify(assetLocation.v1)); + } + + // parse registry xc assets erc20 v1 location + if ('x2' in assetLocation.interior && Array.isArray(assetLocation.interior.x2)) { + if ('accountKey20' in assetLocation.interior.x2[1]) { + erc20Location = + xcmVersion === 3 + ? { + id: { + Concrete: { + parents: assetLocation.parents, + interior: assetLocation.interior, + } as UnionXcmMultiLocation, + }, + fun: 'Fungible', + } + : { + id: { + parents: assetLocation.parents, + interior: assetLocation.interior, + } as UnionXcmMultiLocation, + fun: 'Fungible', + }; + const erc20KeyX2 = assetLocation.interior?.x2 as + | [XcmV4Junction, XcmV4Junction] + | [XcmV3Junction, XcmV3Junction] + | [XcmV2Junction, XcmV2Junction] + | undefined; + if (erc20KeyX2 && 'accountKey20' in erc20KeyX2[1]) { + erc20Key = (erc20KeyX2[1].accountKey20 as { network?: string; key: string }).key; + } + } + } + } + + if (!erc20Key) { + throw new BaseError( + `A valid Snowbridge ERC20 token must provided for ParaToEthereum Direction.`, + BaseErrorsEnum.InvalidInput, + ); + } + + const reanchoredERC20AccountLocation: XcmMultiAsset | XcmAsset = + xcmVersion === 3 + ? { + id: { + Concrete: { + parents: 0, + interior: { + X1: { + AccountKey20: { + key: erc20Key, + }, + }, + }, + } as UnionXcmMultiLocation, + }, + fun: { + Fungible: '1', + }, + } + : { + id: { + parents: 0, + interior: { + X1: [ + { + AccountKey20: { + key: erc20Key, + }, + }, + ], + }, + } as UnionXcmMultiLocation, + fun: { + Fungible: '1', + }, + }; + + if (!sendersAddr || !erc20Location) { + throw new BaseError( + 'sendersAddr and a valid ERC20 token are needed for ParaToEthereum direction', + BaseErrorsEnum.InvalidInput, + ); + } + + sendersAddr = sanitizeAddress(sendersAddr); + const sendersAccount = createXcmOnDestBeneficiary(sendersAddr, xcmVersion); + customXcmOnDestStr = `[{"setAppendix":[{"depositAsset":{"assets":{"Wild":"All"},"beneficiary":${JSON.stringify(sendersAccount)}}}]},{"initiateReserveWithdraw":{"assets":{"Wild":{"AllOf":${JSON.stringify(erc20Location)}}},"reserve":${destChainId},"xcm":[{"buyExecution":{"fees":${JSON.stringify(reanchoredERC20AccountLocation)},"weightLimit":"Unlimited"}},{"depositAsset":{"assets":{"Wild":{"AllCounted":"1"}},"beneficiary":${JSON.stringify(beneficiary)}}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]`; + + feeAssetTransferType = { + DestinationReserve: 'null', + }; + assetTransferType = { + DestinationReserve: 'null', + }; + destChainId = '1000'; // Set AssetHub as first hop after constructing custom XCM + } else { + assetTransferType = resolveAssetTransferType( + assetTransferTypeStr, + xcmVersion, + remoteReserveAssetTransferTypeLocation, + ); + feeAssetTransferType = resolveAssetTransferType( + feesTransferTypeStr, + xcmVersion, + remoteReserveFeesTransferTypeLocation, + ); + } + + const pallet = establishXcmPallet(api); + const ext = api.tx[pallet].transferAssetsUsingTypeAndThen; + const dest = typeCreator.createDest(destChainId, xcmVersion); + const weightLimitValue = typeCreator.createWeightLimit({ weightLimit, }); - const assetTransferType = resolveAssetTransferType( - assetTransferTypeStr, - xcmVersion, - remoteReserveAssetTransferTypeLocation, - ); - const feeAssetTransferType = resolveAssetTransferType( - feesTransferTypeStr, - xcmVersion, - remoteReserveFeesTransferTypeLocation, - ); - const remoteFeesId = createXcmVersionedAssetId(paysWithFeeDest, xcmVersion); - const customXcmOnDest = createXcmOnDestination(assetIds, beneficiary, xcmVersion, customXcmOnDestStr); + let remoteFeesId: XcmVersionedAssetId; + if (paysWithFeeDest && !assetIdIsLocation(paysWithFeeDest)) { + const remoteFeesAssetLocation = await getAssetId(api, registry, paysWithFeeDest, specName, xcmVersion); + remoteFeesId = createXcmVersionedAssetId(remoteFeesAssetLocation, xcmVersion); + } else { + remoteFeesId = createXcmVersionedAssetId(paysWithFeeDest, xcmVersion); + } - return ext(dest, assets, assetTransferType, remoteFeesId, feeAssetTransferType, customXcmOnDest, weightLimitValue); + const customXcmOnDestination = createXcmOnDestination(assetIds, beneficiary, xcmVersion, customXcmOnDestStr); + + return ext( + dest, + assets, + assetTransferType, + remoteFeesId, + feeAssetTransferType, + customXcmOnDestination, + weightLimitValue, + ); }; diff --git a/src/createXcmCalls/types.ts b/src/createXcmCalls/types.ts index c574c750..7131acb5 100644 --- a/src/createXcmCalls/types.ts +++ b/src/createXcmCalls/types.ts @@ -10,4 +10,5 @@ export interface CreateXcmCallOpts { feesTransferType?: string; remoteReserveFeesTransferTypeLocation?: string; customXcmOnDest?: string; + sendersAddr?: string; } diff --git a/src/createXcmTypes/ParaToEthereum.spec.ts b/src/createXcmTypes/ParaToEthereum.spec.ts index e69de29b..595c6537 100644 --- a/src/createXcmTypes/ParaToEthereum.spec.ts +++ b/src/createXcmTypes/ParaToEthereum.spec.ts @@ -0,0 +1,296 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import { Registry } from '../registry'; +import { mockMoonriverParachainApi } from '../testHelpers/mockMoonriverParachainApi'; +import { ParaToEthereum } from './ParaToEthereum'; + +describe('ParaToEthereum', () => { + const registry = new Registry('kusama', {}); + describe('Beneficiary', () => { + it('Should work for V2', () => { + const beneficiary = ParaToEthereum.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 2, + ); + + const expectedRes = { + V2: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + network: 'Any', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V3', () => { + const beneficiary = ParaToEthereum.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 3, + ); + + const expectedRes = { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const beneficiary = ParaToEthereum.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 4, + ); + + const expectedRes = { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + ], + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + }); + describe('Destination', () => { + it('Should work for V2', () => { + const destination = ParaToEthereum.createDest('100', 2); + + const expectedRes = { + V2: { + parents: 1, + interior: { + X1: { + Parachain: '100', + }, + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + it('Should work for V3', () => { + const destination = ParaToEthereum.createDest('100', 3); + + const expectedRes = { + V3: { + parents: 1, + interior: { + X1: { + Parachain: '100', + }, + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const destination = ParaToEthereum.createDest('100', 4); + + const expectedRes = { + V4: { + parents: 1, + interior: { + X1: [ + { + Parachain: '100', + }, + ], + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + }); + describe('Assets', () => { + const isLiquidTokenTransfer = false; + const isForeignAssetsTransfer = false; + it('Should work for V2', async () => { + const assets = await ParaToEthereum.createAssets( + ['1000000000000', '2000000000'], + 2, + 'moonriver', + ['42259045809535163221576417993425387648', '182365888117048807484804376330534607370'], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: mockMoonriverParachainApi, + }, + ); + + const expectedRes = { + V2: [ + { + id: { + Concrete: { + Parents: '1', + Interior: { + Here: null, + }, + }, + }, + fun: { + Fungible: '1000000000000', + }, + }, + { + id: { + Concrete: { + Parents: '1', + Interior: { + X3: [{ Parachain: '1000' }, { PalletInstance: '50' }, { GeneralIndex: '8' }], + }, + }, + }, + fun: { + Fungible: '2000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + it('Should work for V3', async () => { + const assets = await ParaToEthereum.createAssets( + ['1000000', '20000000000'], + 3, + 'moonriver', + ['182365888117048807484804376330534607370', '311091173110107856861649819128533077277'], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: mockMoonriverParachainApi, + }, + ); + + const expectedRes = { + V3: [ + { + id: { + Concrete: { + Parents: '1', + Interior: { + X3: [{ Parachain: '1000' }, { PalletInstance: '50' }, { GeneralIndex: '8' }], + }, + }, + }, + fun: { + Fungible: '1000000', + }, + }, + { + id: { + Concrete: { + Parents: '1', + Interior: { + X3: [{ Parachain: '1000' }, { PalletInstance: '50' }, { GeneralIndex: '1984' }], + }, + }, + }, + fun: { + Fungible: '20000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + it('Should work for V4', async () => { + const assets = await ParaToEthereum.createAssets( + ['1000000', '20000000000'], + 4, + 'moonriver', + ['182365888117048807484804376330534607370', '311091173110107856861649819128533077277'], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: mockMoonriverParachainApi, + }, + ); + + const expectedRes = { + V4: [ + { + id: { + Parents: '1', + Interior: { + X3: [{ Parachain: '1000' }, { PalletInstance: '50' }, { GeneralIndex: '8' }], + }, + }, + fun: { + Fungible: '1000000', + }, + }, + { + id: { + Parents: '1', + Interior: { + X3: [{ Parachain: '1000' }, { PalletInstance: '50' }, { GeneralIndex: '1984' }], + }, + }, + fun: { + Fungible: '20000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + }); + describe('WeightLimit', () => { + it('Should work when weightLimit option is provided', () => { + const refTime = '100000000'; + const proofSize = '1000'; + + const weightLimit = ParaToEthereum.createWeightLimit({ + weightLimit: { + refTime, + proofSize, + }, + }); + expect(weightLimit).toStrictEqual({ + Limited: { + proofSize: '1000', + refTime: '100000000', + }, + }); + }); + it('Should work when weightLimit option is not provided', () => { + const weightLimit = ParaToEthereum.createWeightLimit({}); + + expect(weightLimit).toStrictEqual({ + Unlimited: null, + }); + }); + }); +}); diff --git a/src/createXcmTypes/ParaToEthereum.ts b/src/createXcmTypes/ParaToEthereum.ts index e69de29b..6d744663 100644 --- a/src/createXcmTypes/ParaToEthereum.ts +++ b/src/createXcmTypes/ParaToEthereum.ts @@ -0,0 +1,319 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import type { ApiPromise } from '@polkadot/api'; +import type { AnyJson } from '@polkadot/types/types'; +import { isEthereumAddress } from '@polkadot/util-crypto'; + +import { Registry } from '../registry'; +import { XCMAssetRegistryMultiLocation } from '../registry/types'; +import { Direction } from '../types'; +import { getFeeAssetItemIndex } from '../util/getFeeAssetItemIndex'; +import { normalizeArrToStr } from '../util/normalizeArrToStr'; +import { resolveMultiLocation } from '../util/resolveMultiLocation'; +import type { + CreateAssetsOpts, + CreateFeeAssetItemOpts, + CreateWeightLimitOpts, + FungibleStrAsset, + FungibleStrAssetType, + FungibleStrMultiAsset, + ICreateXcmType, + UnionXcmMultiAssets, + XcmDestBeneficiary, + XcmWeight, +} from './types'; +import { dedupeAssets } from './util/dedupeAssets'; +import { getXcAssetMultiLocationByAssetId } from './util/getXcAssetMultiLocationByAssetId'; +import { isParachainPrimaryNativeAsset } from './util/isParachainPrimaryNativeAsset'; +import { sortAssetsAscending } from './util/sortAssetsAscending'; + +export const ParaToEthereum: ICreateXcmType = { + /** + * Create a XcmVersionedMultiLocation type for a beneficiary. + * + * @param accountId The accountId of the beneficiary. + * @param xcmVersion The accepted xcm version. + */ + createBeneficiary: (accountId: string, xcmVersion?: number): XcmDestBeneficiary => { + if (xcmVersion === 2) { + const X1 = isEthereumAddress(accountId) + ? { AccountKey20: { network: 'Any', key: accountId } } + : { AccountId32: { network: 'Any', id: accountId } }; + + return { + V2: { + parents: 0, + interior: { + X1, + }, + }, + }; + } + + if (xcmVersion === 3) { + const X1 = isEthereumAddress(accountId) + ? { AccountKey20: { key: accountId } } + : { AccountId32: { id: accountId } }; + + return { + V3: { + parents: 0, + interior: { + X1, + }, + }, + }; + } + + const X1 = isEthereumAddress(accountId) + ? [{ AccountKey20: { key: accountId } }] + : [{ AccountId32: { id: accountId } }]; + + return { + V4: { + parents: 0, + interior: { + X1, + }, + }, + }; + }, + /** + * Create a XcmVersionedMultiLocation type for a destination. + * + * @param destId The parachain Id of the destination. + * @param xcmVersion The accepted xcm version. + */ + createDest: (destId: string, xcmVersion?: number): XcmDestBeneficiary => { + if (xcmVersion === 2) { + return { + V2: { + parents: 1, + interior: { + X1: { + Parachain: destId, + }, + }, + }, + }; + } + + if (xcmVersion === 3) { + /** + * Ensure that the `parents` field is a `1` when sending a destination MultiLocation + * from a system parachain to a sovereign parachain. + */ + return { + V3: { + parents: 1, + interior: { + X1: { + Parachain: destId, + }, + }, + }, + }; + } + + return { + V4: { + parents: 1, + interior: { + X1: [{ Parachain: destId }], + }, + }, + }; + }, + /** + * Create a VersionedMultiAsset structured type. + * + * @param amounts Amount per asset. It will match the `assets` length. + * @param xcmVersion The accepted xcm version. + * @param specName The specname of the chain the api is connected to. + * @param assets The assets to create into xcm `MultiAssets`. + * @param opts Options regarding the registry, and types of asset transfers. + */ + createAssets: async ( + amounts: string[], + xcmVersion: number, + specName: string, + assets: string[], + opts: CreateAssetsOpts, + ): Promise => { + const { registry } = opts; + + const sortedAndDedupedMultiAssets = await createParaToEthereumMultiAssets( + opts.api, + amounts, + specName, + assets, + xcmVersion, + registry, + ); + + if (xcmVersion === 2) { + return Promise.resolve({ + V2: sortedAndDedupedMultiAssets as FungibleStrMultiAsset[], + }); + } else if (xcmVersion === 3) { + return Promise.resolve({ + V3: sortedAndDedupedMultiAssets as FungibleStrMultiAsset[], + }); + } else { + return Promise.resolve({ + V4: sortedAndDedupedMultiAssets as FungibleStrAsset[], + }); + } + }, + /** + * Create an Xcm WeightLimit structured type. + * + * @param opts Options that are used for WeightLimit. + */ + createWeightLimit: (opts: CreateWeightLimitOpts): XcmWeight => { + return opts.weightLimit?.refTime && opts.weightLimit?.proofSize + ? { + Limited: { + refTime: opts.weightLimit.refTime, + proofSize: opts.weightLimit.proofSize, + }, + } + : { Unlimited: null }; + }, + /** + * Returns the correct `feeAssetItem` based on XCM direction. + * + * @param api ApiPromise + * @param opts Options that are used for fee asset construction. + */ + createFeeAssetItem: async (api: ApiPromise, opts: CreateFeeAssetItemOpts): Promise => { + const { registry, paysWithFeeDest, specName, assetIds, amounts, xcmVersion, isForeignAssetsTransfer } = opts; + if (xcmVersion && xcmVersion >= 3 && specName && amounts && assetIds && paysWithFeeDest) { + const multiAssets = await createParaToEthereumMultiAssets( + api, + normalizeArrToStr(amounts), + specName, + assetIds, + xcmVersion, + registry, + ); + + const assetIndex = getFeeAssetItemIndex( + api, + registry, + paysWithFeeDest, + multiAssets, + specName, + xcmVersion, + isForeignAssetsTransfer, + ); + + return assetIndex; + } + + return 0; + }, +}; + +/** + * Create multiassets for ParaToEthereum direction. + * + * @param api ApiPromise + * @param amounts Amount per asset. It will match the `assets` length. + * @param specName The specname of the chain the api is connected to. + * @param assets The assets to create into xcm `MultiAssets`. + * @param xcmVersion The accepted xcm version. + * @param registry The asset registry used to construct MultiLocations. + * @param isForeignAssetsTransfer Whether this transfer is a foreign assets transfer. + */ +const createParaToEthereumMultiAssets = async ( + api: ApiPromise, + amounts: string[], + specName: string, + assets: string[], + xcmVersion: number, + registry: Registry, +): Promise => { + let multiAssets: FungibleStrAssetType[] = []; + let multiAsset: FungibleStrAssetType | undefined = undefined; + let concreteMultiLocation; + const isPrimaryParachainNativeAsset = isParachainPrimaryNativeAsset( + registry, + specName, + Direction.ParaToEthereum, + assets[0], + ); + + if (isPrimaryParachainNativeAsset) { + concreteMultiLocation = resolveMultiLocation( + { + parents: 0, + interior: { Here: '' }, + }, + xcmVersion, + ); + + if (xcmVersion < 4) { + multiAsset = { + id: { + Concrete: concreteMultiLocation, + }, + fun: { + Fungible: amounts[0], + }, + }; + } else { + multiAsset = { + id: concreteMultiLocation, + fun: { + Fungible: amounts[0], + }, + }; + } + + multiAssets.push(multiAsset); + } else { + for (let i = 0; i < assets.length; i++) { + const amount = amounts[i]; + const assetId = assets[i]; + + const xcAssetMultiLocationStr = await getXcAssetMultiLocationByAssetId( + api, + assetId, + specName, + xcmVersion, + registry, + ); + const parsedMultiLocation = JSON.parse(xcAssetMultiLocationStr) as XCMAssetRegistryMultiLocation; + const xcAssetMultiLocation = parsedMultiLocation.v1 as unknown as AnyJson; + + concreteMultiLocation = resolveMultiLocation(xcAssetMultiLocation, xcmVersion); + + if (xcmVersion < 4) { + multiAsset = { + id: { + Concrete: concreteMultiLocation, + }, + fun: { + Fungible: amount, + }, + }; + } else { + multiAsset = { + id: concreteMultiLocation, + fun: { + Fungible: amount, + }, + }; + } + + multiAssets.push(multiAsset); + } + } + + multiAssets = sortAssetsAscending(multiAssets) as FungibleStrAssetType[]; + + const sortedAndDedupedMultiAssets = dedupeAssets(multiAssets) as FungibleStrMultiAsset[]; + + return sortedAndDedupedMultiAssets; +}; diff --git a/src/createXcmTypes/index.ts b/src/createXcmTypes/index.ts index 9e7b5489..8fb89312 100644 --- a/src/createXcmTypes/index.ts +++ b/src/createXcmTypes/index.ts @@ -1,6 +1,7 @@ // Copyright 2023 Parity Technologies (UK) Ltd. import { Direction } from '../types'; +import { ParaToEthereum } from './ParaToEthereum'; import { ParaToPara } from './ParaToPara'; import { ParaToRelay } from './ParaToRelay'; import { ParaToSystem } from './ParaToSystem'; @@ -28,4 +29,5 @@ export const createXcmTypes: ICreateXcmTypeLookup = { ParaToPara, ParaToRelay, ParaToSystem, + ParaToEthereum, }; diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index b5211ba3..9aed9930 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -84,7 +84,7 @@ export type XcmV2JunctionBase = { Parachain: number | string; AccountId32: { network?: XcmV2Network; id: string }; AccountIndex64: { network?: XcmV2Network; id: string }; - AccountKey20: { network?: XcmV2Network; id: string }; + AccountKey20: { network?: XcmV2Network; key: string }; PalletInstance: number | string; GeneralIndex: string | number; GeneralKey: string; @@ -126,7 +126,7 @@ export type XcmV3JunctionBase = { Parachain: number; AccountId32: { network?: XcmV2Network; id: string }; AccountIndex64: { network?: XcmV2Network; id: string }; - AccountKey20: { network?: XcmV2Network; id: string }; + AccountKey20: { network?: XcmV2Network; key: string }; PalletInstance: number; GeneralIndex: string | number; GeneralKey: string; @@ -167,7 +167,7 @@ export type XcmV4JunctionBase = { Parachain: number; AccountId32: { network?: XcmV2Network; id: string }; AccountIndex64: { network?: XcmV2Network; id: string }; - AccountKey20: { network?: XcmV2Network; id: string }; + AccountKey20: { network?: XcmV2Network; key: string }; PalletInstance: number; GeneralIndex: string | number; GeneralKey: string; @@ -197,6 +197,20 @@ export interface XcmMultiAsset { }; } +export interface WildAssetV3 { + id: { + Concrete: UnionXcmMultiLocation; + }; + fun: string; +} + +export interface WildAssetV4 { + id: UnionXcmMultiLocation; + fun: string; +} + +export type WildAsset = WildAssetV3 | WildAssetV4; + // XCM V4 Asset export interface XcmAsset { id: UnionXcmMultiLocation; diff --git a/src/createXcmTypes/util/chainDestIsEthereum.spec.ts b/src/createXcmTypes/util/chainDestIsEthereum.spec.ts new file mode 100644 index 00000000..dc4d82cf --- /dev/null +++ b/src/createXcmTypes/util/chainDestIsEthereum.spec.ts @@ -0,0 +1,19 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { chainDestIsEthereum } from './chainDestIsEthereum'; + +describe('chainDestIsEthereum', () => { + it('Should correctly return true for a GlobalConsensus destination location', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + const result = chainDestIsEthereum(destLocation); + + expect(result).toEqual(true); + }); + it('Should correctly return false for a destination location that does not contain a GlobalConsensus junction', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"Parachain":"2030"}}}`; + + const result = chainDestIsEthereum(destLocation); + + expect(result).toEqual(false); + }); +}); diff --git a/src/createXcmTypes/util/chainDestIsEthereum.ts b/src/createXcmTypes/util/chainDestIsEthereum.ts new file mode 100644 index 00000000..9783f553 --- /dev/null +++ b/src/createXcmTypes/util/chainDestIsEthereum.ts @@ -0,0 +1,15 @@ +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; + +export const chainDestIsEthereum = (destLocation: string): boolean => { + if (!destLocation.toLowerCase().includes('parents') || !destLocation.toLowerCase().includes('interior')) { + return false; + } + + const location = parseLocationStrToLocation(destLocation); + + const destIsEthereum = location.interior.X1 + ? JSON.stringify(location.interior.X1).toLowerCase().includes('ethereum') + : false; + + return destIsEthereum; +}; diff --git a/src/createXcmTypes/util/createXcmVersionedAssetId.ts b/src/createXcmTypes/util/createXcmVersionedAssetId.ts index 881b5dd2..6c2e31ae 100644 --- a/src/createXcmTypes/util/createXcmVersionedAssetId.ts +++ b/src/createXcmTypes/util/createXcmVersionedAssetId.ts @@ -17,7 +17,11 @@ export const createXcmVersionedAssetId = ( } let remoteFeesId: XcmVersionedAssetId; - const location = parseLocationStrToLocation(destFeesAssetId); + let location = parseLocationStrToLocation(destFeesAssetId); + + if ('v1' in location) { + location = parseLocationStrToLocation(JSON.stringify(location.v1)); + } if (xcmVersion === 3) { remoteFeesId = { diff --git a/src/createXcmTypes/util/getAssetId.ts b/src/createXcmTypes/util/getAssetId.ts index e73477ea..619368c2 100644 --- a/src/createXcmTypes/util/getAssetId.ts +++ b/src/createXcmTypes/util/getAssetId.ts @@ -7,11 +7,11 @@ import { ASSET_HUB_CHAIN_ID } from '../../consts'; import { BaseError, BaseErrorsEnum } from '../../errors'; import { Registry } from '../../registry'; import { validateNumber } from '../../validate'; +import { UnionXcmMultiLocation } from '../types'; +import { assetIdIsLocation } from './assetIdIsLocation'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from './foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from './foreignAssetsMultiLocationExists'; -import { UnionXcmMultiLocation } from '../types'; import { parseLocationStrToLocation } from './parseLocationStrToLocation'; -import { assetIdIsLocation } from './assetIdIsLocation'; /** * @@ -198,8 +198,8 @@ export const getAssetId = async ( if (typeof info.symbol === 'string' && info.symbol.toLowerCase() === asset.toLowerCase()) { assetId = info.xcmV1MultiLocation; registry.setAssetInCache(asset, assetId); - } else if (assetIdIsLocation(asset)){ - const v1AssetLocation = (JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation); + } else if (assetIdIsLocation(asset)) { + const v1AssetLocation = JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation; if ('v1' in v1AssetLocation) { const registryAssetLocation = parseLocationStrToLocation(JSON.stringify(v1AssetLocation.v1)); diff --git a/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts b/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts index 06e09231..8bf5b04b 100644 --- a/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts +++ b/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts @@ -22,6 +22,26 @@ describe('parseLocationStrToLocation', () => { expect(result).toEqual(expected); }); + it('Should correctly return a valid Ethereum UnionXcmMultilocation', () => { + const locationStr = `{"parents":"2","interior":{"X1":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}]}}`; + const expected = { + parents: '2', + interior: { + X1: [ + { + GlobalConsensus: { + Ethereum: { + chainId: '1', + }, + }, + }, + ], + }, + }; + const result = parseLocationStrToLocation(locationStr); + + expect(result).toEqual(expected); + }); it('Should correctly error when an unparseable location string is provided', () => { const locationStr = '{"parents":"2","interior":{"X2":[{GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}'; diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index a206614e..17931e02 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -21,6 +21,7 @@ import { checkParaAssets, checkParaPrimaryAssetAmountsLength, checkParaPrimaryAssetAssetIdsLength, + checkParaToEthereum, checkPaysWithFeeDestAssetIdIsInAssets, checkRelayAmountsLength, checkRelayAssetIdLength, @@ -54,6 +55,19 @@ const runTests = async (tests: Test[]) => { } }; +describe('checkParaToEthereum', () => { + it('Should correctly throw an error when paysWithFeeDest is not provided', () => { + const err = () => checkParaToEthereum('7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); + + expect(err).toThrow('paysWithFeeDest option must be provided for ParaToEthereum XCM direction'); + }); + it('Should correctly throw an error when sendersAddr is not provided', () => { + const err = () => checkParaToEthereum(undefined, 'DOT'); + + expect(err).toThrow('sendersAddr option must be provided for ParaToEthereum XCM direction'); + }); +}); + describe('checkRelayAssetIdLength', () => { it('Should error with an incorrect assetId length for inputs to or from relay chains', () => { const err = () => checkRelayAssetIdLength(['dot', 'usdt']); diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 76b7cd74..0edd9991 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -11,6 +11,7 @@ import { SYSTEM_AND_PARACHAINS_RELAY_ASSET_LOCATION, } from '../consts'; import { XcmPalletName } from '../createXcmCalls/util/establishXcmPallet'; +import { UnionXcmMultiLocation } from '../createXcmTypes/types'; import { assetIdIsLocation } from '../createXcmTypes/util/assetIdIsLocation'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from '../createXcmTypes/util/foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from '../createXcmTypes/util/foreignAssetsMultiLocationExists'; @@ -18,6 +19,7 @@ import { getGlobalConsensusSystemName } from '../createXcmTypes/util/getGlobalCo import { isParachainPrimaryNativeAsset } from '../createXcmTypes/util/isParachainPrimaryNativeAsset'; import { isRelayNativeAsset } from '../createXcmTypes/util/isRelayNativeAsset'; import { multiLocationAssetIsParachainsNativeAsset } from '../createXcmTypes/util/multiLocationAssetIsParachainsNativeAsset'; +import { parseLocationStrToLocation } from '../createXcmTypes/util/parseLocationStrToLocation'; import { Registry } from '../registry'; import type { ChainInfo, ChainInfoKeys } from '../registry/types'; import type { XcmBaseArgsWithPallet } from '../types'; @@ -25,8 +27,6 @@ import { AssetInfo, Direction } from '../types'; import { validateNumber } from '../validate'; import { BaseError, BaseErrorsEnum } from './BaseError'; import type { CheckXcmTxInputsOpts } from './types'; -import { UnionXcmMultiLocation } from '../createXcmTypes/types'; -import { parseLocationStrToLocation } from '../createXcmTypes/util/parseLocationStrToLocation'; /** * Ensure when sending tx's to or from the relay chain that the length of the assetIds array @@ -608,15 +608,6 @@ export const checkParaAssets = async ( BaseErrorsEnum.AssetNotFound, ); } - } else if (api.query.assetRegistry) { - if (assetIdIsLocation(assetId)) { - if ('locationAssets' in api.query.assetRegistry) { - const assetLocation = await api.query.assetRegistry.locationAssets(assetId); - if (assetLocation) { - console.log("LOCATION OF ASSET REGISTRY ASSET", JSON.stringify(assetLocation)) - } - } - } } else { // Parachain doesn't support pallet assets // check for assetId in registry @@ -637,18 +628,19 @@ export const checkParaAssets = async ( } } else { // check for assetId symbol match + console.log('THE ASSET---', assetId); + for (const info of paraXcAssets) { + console.log('INFOS ASSET---', info.asset); if (typeof info.symbol === 'string' && info.symbol.toLowerCase() === assetId.toLowerCase()) { return; } else if (assetIdIsLocation(assetId)) { - console.log("info.xcmV1MultiLocation.toLowerCase()", info.xcmV1MultiLocation.toLowerCase()) - const v1AssetLocation = (JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation); - - if ('v1' in v1AssetLocation ) { + const v1AssetLocation = JSON.parse(info.xcmV1MultiLocation) as UnionXcmMultiLocation; + + if ('v1' in v1AssetLocation) { const registryAssetLocation = parseLocationStrToLocation(JSON.stringify(v1AssetLocation.v1)); const assetLocation = parseLocationStrToLocation(assetId); - if (JSON.stringify(registryAssetLocation).toLowerCase() === JSON.stringify(assetLocation).toLowerCase()) { return; } @@ -1259,6 +1251,25 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkRelayAssetIdLength(assetIds); checkRelayAmountsLength(amounts); } + + if (direction === Direction.ParaToEthereum) { + checkParaToEthereum(sendersAddr, paysWithFeeDest); + } +}; + +export const checkParaToEthereum = (sendersAddr?: string, paysWithFeeDest?: string) => { + if (!paysWithFeeDest) { + throw new BaseError( + 'paysWithFeeDest option must be provided for ParaToEthereum XCM direction', + BaseErrorsEnum.InvalidInput, + ); + } + if (!sendersAddr) { + throw new BaseError( + 'sendersAddr option must be provided for ParaToEthereum XCM direction', + BaseErrorsEnum.InvalidInput, + ); + } }; export const checkClaimAssetsInputs = (assets: string[], amounts: string[]) => { diff --git a/src/index.ts b/src/index.ts index b0f8abc1..270fc9e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,65 +3,3 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; - -// import { hexToU8a} from '@polkadot/util'; -// import type { ExtrinsicPayloadValue } from '@polkadot/types/types'; - -import { ApiPromise, WsProvider } from '@polkadot/api'; - -import { AssetTransferApi } from './AssetTransferApi'; - -const main = async () => { - // const provider = new WsProvider(`wss://bifrost-polkadot-rpc.dwellir.com/ws`); - const provider = new WsProvider(`wss://hydradx-rpc.dwellir.com`); - - const api = await ApiPromise.create({ provider }); - - await api.isReady; - - const assetTransferApi = new AssetTransferApi(api, 'hydradx', 4, - { - injectedRegistry: { - polkadot: { - 2034: { - tokens: [], - assetsInfo: {}, - foreignAssetsInfo: {}, - poolPairsInfo: {}, - specName: "hydradx", - xcAssetsData: [ - { - "paraID": 0, - "symbol": "WETH.snow", - "decimals": 18, - "xcmV1MultiLocation": "{\"v1\":{\"parents\":2,\"interior\":{\"x2\":[{\"globalConsensus\":{\"ethereum\":{\"chainId\":1}}},{\"accountKey20\":{\"network\":null,\"key\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"}}]}}}", - "asset": "1000189", - "assetHubReserveLocation": "{\"parents\":\"1\",\"interior\":{\"X1\":{\"Parachain\":\"1000\"}}}", - }, - ] - } - } - } - } -); - - - - const payload = await assetTransferApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, - '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', // dest address - ['WETH.snow'], - ['10000000000000'], - { - format: 'call', - xcmVersion: 4, - }, - ); - - console.log('payload', JSON.stringify(payload)); - - const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'call'); - console.log('decodedPayload', decodedPayload); -}; - -main(); diff --git a/src/integrationTests/parachains/bifrost.spec.ts b/src/integrationTests/parachains/bifrost.spec.ts index a5cb00df..9e19f353 100644 --- a/src/integrationTests/parachains/bifrost.spec.ts +++ b/src/integrationTests/parachains/bifrost.spec.ts @@ -681,12 +681,6 @@ describe('Bifrost', () => { 'payload', '0x0d01290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '1000', - '{"parents":1,"interior":{"x2":[{"parachain":2032},{"generalKey":"0x0002"}]}}', - 'payload', - '0x0d01290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300' - ] ]; for (const test of tests) { diff --git a/src/integrationTests/parachains/hydration.spec.ts b/src/integrationTests/parachains/hydration.spec.ts new file mode 100644 index 00000000..5c199dec --- /dev/null +++ b/src/integrationTests/parachains/hydration.spec.ts @@ -0,0 +1,66 @@ +import { AssetTransferApi } from '../../AssetTransferApi'; +import { adjustedmockHydrationParachainApi } from '../../testHelpers/adjustedMockHydrationParachainApi'; + +const hydrationATA = new AssetTransferApi(adjustedmockHydrationParachainApi, 'hydradx', 3, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + xcAssetsData: [ + { + symbol: 'WETH.snow', + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + }, + ], + }, + }, + }, +}); + +describe('Hydration', () => { + describe('ParaToEthereum', () => { + describe('transferAssetsUsingTypeAndThen', () => { + describe('XCM V3', () => { + it('Should correctly construct a transferAssetsUsingTypeAndThen call from Hydration to Ethereum', async () => { + const result = await hydrationATA.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + ['WETH.snow'], + ['10000000000000'], + { + sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', + format: 'payload', + xcmVersion: 3, + paysWithFeeDest: 'WETH.snow', + }, + ); + const expected = + '0x69046b0d03010100a10f03040002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000b00a0724e180902030002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202030c16040d01000001010062fecf9c60d8d49d400bd86804558401ec7151fecd440041ca6bf5fd578251771001010002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20002010907040c130000010300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20004000d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b2c00000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300'; + + expect(result.tx.toHex()).toEqual(expected); + }); + }); + describe('XCM V4', () => { + it('Should correctly construct a transferAssetsUsingTypeAndThen call from Hydration to Ethereum paying destination fees with DOT', async () => { + const result = await hydrationATA.createTransferTransaction( + `{"parents":"2","interior":{"X1":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}]}}`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + ['DOT', 'WETH.snow'], + ['10000000000000', '10000000000000'], + { + sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', + format: 'payload', + xcmVersion: 4, + paysWithFeeDest: 'DOT', + }, + ); + const expected = + '0x1d046b0d04010100a10f04080100000b00a0724e180902020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000b00a0724e18090204010002040c16040d01000001010062fecf9c60d8d49d400bd86804558401ec7151fecd440041ca6bf5fd5782517710010102020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20002010907040c1300010300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20004000d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b2c00000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300'; + + expect(result.tx.toHex()).toEqual(expected); + }); + }); + }); + }); +}); diff --git a/src/registry/types.ts b/src/registry/types.ts index a3ddc7cd..fe17277f 100644 --- a/src/registry/types.ts +++ b/src/registry/types.ts @@ -75,11 +75,11 @@ export interface XCMAssetRegistryMultiLocation { } export type SanitizedXcAssetsData = { - paraID: number; symbol: string; - decimals: number; xcmV1MultiLocation: string; - asset: + paraID?: number; + decimals?: number; + asset?: | { ForeignAsset: string } | { VToken: string } | { VToken2: string } @@ -90,7 +90,7 @@ export type SanitizedXcAssetsData = { | { Native: string } | { Stable: string } | string; - assetHubReserveLocation: string; + assetHubReserveLocation?: string; originChainReserveLocation?: string; }; diff --git a/src/testHelpers/adjustedMockHydrationParachainApi.ts b/src/testHelpers/adjustedMockHydrationParachainApi.ts new file mode 100644 index 00000000..ab94083a --- /dev/null +++ b/src/testHelpers/adjustedMockHydrationParachainApi.ts @@ -0,0 +1,97 @@ +import { ApiPromise } from '@polkadot/api'; +import type { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; +import type { Call, Extrinsic, Header } from '@polkadot/types/interfaces'; +import type { ISubmittableResult } from '@polkadot/types/types'; + +import { mockHydrationParachainApi } from './mockHydrationParachainApi'; +import { mockWeightInfo } from './mockWeightInfo'; + +const queryInfoCallAt = () => + Promise.resolve().then(() => mockHydrationParachainApi.createType('RuntimeDispatchInfoV2', mockWeightInfo)); +const mockApiAt = { + call: { + transactionPaymentApi: { + queryInfo: queryInfoCallAt, + }, + }, +}; + +const getSystemSafeXcmVersion = () => + Promise.resolve().then(() => { + return mockHydrationParachainApi.registry.createType('Option', 2); + }); + +const getParachainRuntimeVersion = () => + Promise.resolve().then(() => { + return { + specName: mockHydrationParachainApi.registry.createType('Text', 'hydradx'), + specVersion: mockHydrationParachainApi.registry.createType('u32', 2302), + }; + }); + +const getHeader = (): Promise
=> + Promise.resolve().then(() => + mockHydrationParachainApi.registry.createType('Header', { + number: mockHydrationParachainApi.registry.createType('Compact', 100), + parentHash: mockHydrationParachainApi.registry.createType('Hash'), + stateRoot: mockHydrationParachainApi.registry.createType('Hash'), + extrinsicsRoot: mockHydrationParachainApi.registry.createType('Hash'), + digest: mockHydrationParachainApi.registry.createType('Digest'), + }), + ); + +const accountNextIndex = () => mockHydrationParachainApi.registry.createType('u32', 10); +const mockSubmittableExt = mockHydrationParachainApi.registry.createType( + 'Extrinsic', + '0x49010446010401020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20013000064a7b3b6e00d04010200a10f0100c4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a06300', +) as SubmittableExtrinsic<'promise', ISubmittableResult>; + +export const adjustedmockHydrationParachainApi = { + registry: mockHydrationParachainApi.registry, + rpc: { + state: { + getRuntimeVersion: getParachainRuntimeVersion, + }, + system: { + accountNextIndex: accountNextIndex, + }, + chain: { + getHeader: getHeader, + }, + }, + query: { + polkadotXcm: { + safeXcmVersion: getSystemSafeXcmVersion, + }, + }, + tx: Object.assign( + (_extrinsic: Call | Extrinsic | Uint8Array | string) => { + return mockSubmittableExt; + }, + { + polkadotXcm: { + limitedReserveTransferAssets: mockHydrationParachainApi.tx['polkadotXcm'].limitedReserveTransferAssets, + reserveTransferAssets: mockHydrationParachainApi.tx['polkadotXcm'].reserveTransferAssets, + teleportAssets: mockHydrationParachainApi.tx['polkadotXcm'].teleportAssets, + limitedTeleportAssets: mockHydrationParachainApi.tx['polkadotXcm'].limitedTeleportAssets, + transferAssets: mockHydrationParachainApi.tx['polkadotXcm'].transferAssets, + transferAssetsUsingTypeAndThen: mockHydrationParachainApi.tx['polkadotXcm'].transferAssetsUsingTypeAndThen, + }, + xTokens: { + transferMultiasset: mockHydrationParachainApi.tx['xTokens'].transferMultiasset, + transferMultiassetWithFee: mockHydrationParachainApi.tx['xTokens'].transferMultiassetWithFee, + transferMultiassets: mockHydrationParachainApi.tx['xTokens'].transferMultiassets, + }, + }, + ), + call: { + transactionPaymentApi: { + queryInfo: mockApiAt.call.transactionPaymentApi.queryInfo, + }, + }, + runtimeVersion: { + transactionVersion: mockHydrationParachainApi.registry.createType('u32', 4), + specVersion: mockHydrationParachainApi.registry.createType('u32', 2302), + }, + genesisHash: mockHydrationParachainApi.registry.createType('BlockHash'), +} as unknown as ApiPromise; diff --git a/src/testHelpers/metadata/hydrationV3100.ts b/src/testHelpers/metadata/hydrationV3100.ts new file mode 100644 index 00000000..4d4c485d --- /dev/null +++ b/src/testHelpers/metadata/hydrationV3100.ts @@ -0,0 +1,2 @@ +export const hydrationV3100 = + '0x6d6574610e290c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c01147068617365a503011450686173650001146576656e7454010445000118746f70696373110201185665633c543e000054083c687964726164785f72756e74696d653052756e74696d654576656e740001e81853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000700485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0009005c4d756c74695472616e73616374696f6e5061796d656e7404008801c070616c6c65745f7472616e73616374696f6e5f6d756c74695f7061796d656e743a3a4576656e743c52756e74696d653e00cb0020547265617375727904008c017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e000b001c5574696c697479040094015470616c6c65745f7574696c6974793a3a4576656e74000d0020507265696d61676504009c017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e000f00204964656e746974790400a0017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0011002444656d6f63726163790400a8018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e00130024456c656374696f6e730400bc01a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e0015001c436f756e63696c0400c801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00170048546563686e6963616c436f6d6d69747465650400cc01fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e00190010546970730400d0016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e001b001450726f78790400d4017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e001d00204d756c74697369670400e0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e001f001c556e69717565730400e8017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e002000485374617465547269654d6967726174696f6e0400050101ac70616c6c65745f73746174655f747269655f6d6967726174696f6e3a3a4576656e743c52756e74696d653e002300344173736574526567697374727904001101019470616c6c65745f61737365745f72656769737472793a3a4576656e743c52756e74696d653e00330018436c61696d7304005101017470616c6c65745f636c61696d733a3a4576656e743c52756e74696d653e0035003c436f6c6c61746f725265776172647304005901019c70616c6c65745f636f6c6c61746f725f726577617264733a3a4576656e743c52756e74696d653e003900204f6d6e69706f6f6c04005d01017c70616c6c65745f6f6d6e69706f6f6c3a3a4576656e743c52756e74696d653e003b00405472616e73616374696f6e506175736504006d0101a070616c6c65745f7472616e73616374696f6e5f70617573653a3a4576656e743c52756e74696d653e003c001844757374657204007101017470616c6c65745f6475737465723a3a4576656e743c52756e74696d653e003d004c4f6d6e69706f6f6c57617265686f7573654c4d0400750101490177617265686f7573655f6c69717569646974795f6d696e696e673a3a4576656e743c52756e74696d652c2077617265686f7573655f6c69717569646974795f6d696e696e673a3a0a496e7374616e6365313e003e005c4f6d6e69706f6f6c4c69717569646974794d696e696e670400790101c070616c6c65745f6f6d6e69706f6f6c5f6c69717569646974795f6d696e696e673a3a4576656e743c52756e74696d653e003f000c4f544304008901016870616c6c65745f6f74633a3a4576656e743c52756e74696d653e0040003843697263756974427265616b657204008d01019870616c6c65745f636972637569745f627265616b65723a3a4576656e743c52756e74696d653e00410018526f7574657204009901019470616c6c65745f726f7574655f6578656375746f723a3a4576656e743c52756e74696d653e0043002c44796e616d6963466565730400a101018c70616c6c65745f64796e616d69635f666565733a3a4576656e743c52756e74696d653e0044001c5374616b696e670400a501017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e00450028537461626c65737761700400a901018470616c6c65745f737461626c65737761703a3a4576656e743c52756e74696d653e00460014426f6e64730400bd01017070616c6c65745f626f6e64733a3a4576656e743c52756e74696d653e004700384f7463536574746c656d656e74730400c101019870616c6c65745f6f74635f736574746c656d656e74733a3a4576656e743c52756e74696d653e0048000c4c42500400c501016870616c6c65745f6c62703a3a4576656e743c52756e74696d653e0049000c58594b0400d501016870616c6c65745f78796b3a3a4576656e743c52756e74696d653e004a0024526566657272616c730400d901018070616c6c65745f726566657272616c733a3a4576656e743c52756e74696d653e004b0018546f6b656e730400ed01016c6f726d6c5f746f6b656e733a3a4576656e743c52756e74696d653e004d002843757272656e636965730400f501018470616c6c65745f63757272656e636965733a3a4576656e743c52756e74696d653e004f001c56657374696e670400fd0101706f726d6c5f76657374696e673a3a4576656e743c52756e74696d653e0051000c45564d04000502016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e005a0020457468657265756d04001502015870616c6c65745f657468657265756d3a3a4576656e74005c002c45564d4163636f756e747304003902018c70616c6c65745f65766d5f6163636f756e74733a3a4576656e743c52756e74696d653e005d004858594b4c69717569646974794d696e696e6704003d0201ac70616c6c65745f78796b5f6c69717569646974795f6d696e696e673a3a4576656e743c52756e74696d653e005f003858594b57617265686f7573654c4d0400450201490177617265686f7573655f6c69717569646974795f6d696e696e673a3a4576656e743c52756e74696d652c2077617265686f7573655f6c69717569646974795f6d696e696e673a3a0a496e7374616e6365323e0060003852656c6179436861696e496e666f04004902019870616c6c65745f72656c6179636861696e5f696e666f3a3a4576656e743c52756e74696d653e00c9000c44434104004d02016870616c6c65745f6463613a3a4576656e743c52756e74696d653e004200245363686564756c657204006502018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e0005003c50617261636861696e53797374656d04006d0201bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0067002c506f6c6b61646f7458636d04007102016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e006b002843756d756c757358636d04007103018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e006d002458636d7051756575650400750301a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e006f00304d657373616765517565756504007903019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e0072001c4f726d6c58636d0400890301606f726d6c5f78636d3a3a4576656e743c52756e74696d653e0087001c58546f6b656e7304008d0301706f726d6c5f78746f6b656e733a3a4576656e743c52756e74696d653e00890034556e6b6e6f776e546f6b656e730400910301686f726d6c5f756e6b6e6f776e5f746f6b656e733a3a4576656e74008b0044436f6c6c61746f7253656c656374696f6e0400950301a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e00a3001c53657373696f6e04009d03015470616c6c65745f73657373696f6e3a3a4576656e7400a50024456d614f7261636c650400a103018470616c6c65745f656d615f6f7261636c653a3a4576656e743c52756e74696d653e00ca0000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574880c8070616c6c65745f7472616e73616374696f6e5f6d756c74695f7061796d656e741870616c6c6574144576656e740404540001102c43757272656e63795365740801286163636f756e745f6964000130543a3a4163636f756e74496400012061737365745f6964100130417373657449644f663c543e0000082c43757272656e63795365743c5b77686f2c2063757272656e63795d3443757272656e6379416464656404012061737365745f6964100130417373657449644f663c543e0001086c4e65772061636365707465642063757272656e6379206164646564285b63757272656e63795d3c43757272656e637952656d6f76656404012061737365745f6964100130417373657449644f663c543e0002086441636365707465642063757272656e63792072656d6f766564285b63757272656e63795d3046656557697468647261776e1401286163636f756e745f6964000130543a3a4163636f756e74496400012061737365745f6964100130417373657449644f663c543e0001446e61746976655f6665655f616d6f756e7418013042616c616e63654f663c543e0001546e6f6e5f6e61746976655f6665655f616d6f756e7418013042616c616e63654f663c543e00015864657374696e6174696f6e5f6163636f756e745f6964000130543a3a4163636f756e744964000308ac5472616e73616374696f6e20666565207061696420696e206e6f6e2d6e61746976652063757272656e637949015b4163636f756e742c2043757272656e63792c204e61746976652066656520616d6f756e742c204e6f6e2d6e61746976652066656520616d6f756e742c2044657374696e6174696f6e206163636f756e745d047c54686520604576656e746020656e756d206f6620746869732070616c6c65748c0c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001382050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e4841737365745370656e64417070726f766564180114696e6465781001285370656e64496e64657800012861737365745f6b696e64900130543a3a41737365744b696e64000118616d6f756e74180150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000138543a3a42656e656669636961727900012876616c69645f66726f6d100144426c6f636b4e756d626572466f723c543e0001246578706972655f6174100144426c6f636b4e756d626572466f723c543e000904b441206e6577206173736574207370656e642070726f706f73616c20686173206265656e20617070726f7665642e4041737365745370656e64566f69646564040114696e6465781001285370656e64496e646578000a0474416e20617070726f766564207370656e642077617320766f696465642e1050616964080114696e6465781001285370656e64496e6465780001287061796d656e745f69649001643c543a3a5061796d6173746572206173205061793e3a3a4964000b044c41207061796d656e742068617070656e65642e345061796d656e744661696c6564080114696e6465781001285370656e64496e6465780001287061796d656e745f69649001643c543a3a5061796d6173746572206173205061793e3a3a4964000c049041207061796d656e74206661696c656420616e642063616e20626520726574726965642e385370656e6450726f636573736564040114696e6465781001285370656e64496e646578000d084d0141207370656e64207761732070726f63657373656420616e642072656d6f7665642066726f6d207468652073746f726167652e204974206d696768742068617665206265656e207375636365737366756c6c797070616964206f72206974206d6179206861766520657870697265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900000040000940c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c749801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980418526573756c740804540190044501680108084f6b040090000000000c45727204006800000100009c0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736834011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736834011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736834011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a00c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001442c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e38417574686f726974794164646564040124617574686f72697479000130543a3a4163636f756e744964000a047c4120757365726e616d6520617574686f72697479207761732061646465642e40417574686f7269747952656d6f766564040124617574686f72697479000130543a3a4163636f756e744964000b04844120757365726e616d6520617574686f72697479207761732072656d6f7665642e2c557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d65a4012c557365726e616d653c543e000c04744120757365726e616d65207761732073657420666f72206077686f602e38557365726e616d655175657565640c010c77686f000130543a3a4163636f756e744964000120757365726e616d65a4012c557365726e616d653c543e00012865787069726174696f6e100144426c6f636b4e756d626572466f723c543e000d0419014120757365726e616d6520776173207175657565642c20627574206077686f60206d75737420616363657074206974207072696f7220746f206065787069726174696f6e602e48507265617070726f76616c4578706972656404011477686f7365000130543a3a4163636f756e744964000e043901412071756575656420757365726e616d6520706173736564206974732065787069726174696f6e20776974686f7574206265696e6720636c61696d656420616e64207761732072656d6f7665642e485072696d617279557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d65a4012c557365726e616d653c543e000f0401014120757365726e616d6520776173207365742061732061207072696d61727920616e642063616e206265206c6f6f6b65642075702066726f6d206077686f602e5c44616e676c696e67557365726e616d6552656d6f76656408010c77686f000130543a3a4163636f756e744964000120757365726e616d65a4012c557365726e616d653c543e0010085d01412064616e676c696e6720757365726e616d652028617320696e2c206120757365726e616d6520636f72726573706f6e64696e6720746f20616e206163636f756e742074686174206861732072656d6f766564206974736c6964656e746974792920686173206265656e2072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a40c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000a80c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64ac0134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736834011c543a3a48617368000114756e74696c100144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736834011c543a3a48617368000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465b001644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572b801344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736834011c543a3a486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572b801344d657461646174614f776e6572043c4d65746164617461206f776e65722e01106861736834011c543a3a486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572b801344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572b801344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e01106861736834011c543a3a486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000b00c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465b40110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000b40c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000b80c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040010012450726f70496e646578000100285265666572656e64756d040010013c5265666572656e64756d496e64657800020000bc0c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273c001ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c0000002c400c400000408001800c80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736834011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736834011c543a3a48617368000114766f746564200110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736834011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736834011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736834011c543a3a48617368000118726573756c749801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736834011c543a3a48617368000118726573756c749801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736834011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736834011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736834011c543a3a48617368000114766f746564200110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736834011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736834011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736834011c543a3a48617368000118726573756c749801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736834011c543a3a48617368000118726573756c749801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736834011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736834011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736834011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736834011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736834011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736834011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d40c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c749801384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578dc010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d80c3c687964726164785f72756e74696d651873797374656d2450726f7879547970650001180c416e790000002c43616e63656c50726f787900010028476f7665726e616e6365000200205472616e73666572000300244c69717569646974790004003c4c69717569646974794d696e696e6700050000dc0000050400e00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74e4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74e4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c749801384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74e4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000e80c3870616c6c65745f756e69717565731870616c6c6574144576656e7408045400044900016c1c437265617465640c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73f001385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579f8016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565fc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579f8016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6ef4015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e304974656d5072696365536574100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572010101504f7074696f6e3c543a3a4163636f756e7449643e0018048c546865207072696365207761732073657420666f722074686520696e7374616e63652e404974656d507269636552656d6f766564080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640019049c54686520707269636520666f722074686520696e7374616e6365207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001a044c416e206974656d2077617320626f756768742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ec0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f00000021800f404184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000f80c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000fc0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000010104184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000005010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574144576656e74040454000110204d696772617465640c010c746f7010010c7533320001146368696c6410010c75333200011c636f6d70757465090101404d6967726174696f6e436f6d707574650000083901476976656e206e756d626572206f66206028746f702c206368696c642960206b6579732077657265206d6967726174656420726573706563746976656c792c20776974682074686520676976656e2860636f6d70757465602e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104b4536f6d65206163636f756e7420676f7420736c61736865642062792074686520676976656e20616d6f756e742e544175746f4d6967726174696f6e46696e697368656400020484546865206175746f206d6967726174696f6e207461736b2066696e69736865642e1848616c7465640401146572726f720d0101204572726f723c543e000304ec4d6967726174696f6e20676f742068616c7465642064756520746f20616e206572726f72206f72206d6973732d636f6e66696775726174696f6e2e0470496e6e6572206576656e7473206f6620746869732070616c6c65742e09010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574404d6967726174696f6e436f6d70757465000108185369676e6564000000104175746f000100000d010c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574144572726f720404540001183c4d61785369676e65644c696d697473000004804d6178207369676e6564206c696d697473206e6f74207265737065637465642e284b6579546f6f4c6f6e6700011cb441206b657920776173206c6f6e676572207468616e2074686520636f6e66696775726564206d6178696d756d2e00110154686973206d65616e73207468617420746865206d6967726174696f6e2068616c746564206174207468652063757272656e74205b6050726f6772657373605d20616e64010163616e20626520726573756d656420776974682061206c6172676572205b6063726174653a3a436f6e6669673a3a4d61784b65794c656e605d2076616c75652e21015265747279696e672077697468207468652073616d65205b6063726174653a3a436f6e6669673a3a4d61784b65794c656e605d2076616c75652077696c6c206e6f7420776f726b2e45015468652076616c75652073686f756c64206f6e6c7920626520696e6372656173656420746f2061766f696420612073746f72616765206d6967726174696f6e20666f72207468652063757272656e746c799073746f726564205b6063726174653a3a50726f67726573733a3a4c6173744b6579605d2e384e6f74456e6f75676846756e6473000204947375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e64732e284261645769746e65737300030468426164207769746e65737320646174612070726f76696465642e645369676e65644d6967726174696f6e4e6f74416c6c6f77656400040425015369676e6564206d6967726174696f6e206973206e6f7420616c6c6f776564206265636175736520746865206d6178696d756d206c696d6974206973206e6f7420736574207965742e304261644368696c64526f6f7400050460426164206368696c6420726f6f742070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11010c5470616c6c65745f61737365745f72656769737472791870616c6c6574144576656e74040454000118584578697374656e7469616c4465706f736974506169640c010c77686f000130543a3a4163636f756e7449640001246665655f6173736574100128543a3a41737365744964000118616d6f756e7418011c42616c616e6365000008d04578697374656e7469616c206465706f73697420666f7220696e737566666963696e65742061737365742077617320706169642e9c6053756666696369656e6379436865636b602074726967676572732074686973206576656e742e285265676973746572656420012061737365745f6964100128543a3a4173736574496400012861737365745f6e616d65150101984f7074696f6e3c426f756e6465645665633c75382c20543a3a537472696e674c696d69743e3e00012861737365745f747970651d01012441737365745479706500014c6578697374656e7469616c5f6465706f73697418011c42616c616e636500013878636d5f726174655f6c696d6974f4013c4f7074696f6e3c42616c616e63653e00011873796d626f6c150101984f7074696f6e3c426f756e6465645665633c75382c20543a3a537472696e674c696d69743e3e000120646563696d616c73210101284f7074696f6e3c75383e00013469735f73756666696369656e74200110626f6f6c0001045441737365742077617320726567697374657265642e1c5570646174656420012061737365745f6964100128543a3a4173736574496400012861737365745f6e616d65150101984f7074696f6e3c426f756e6465645665633c75382c20543a3a537472696e674c696d69743e3e00012861737365745f747970651d01012441737365745479706500014c6578697374656e7469616c5f6465706f73697418011c42616c616e636500013878636d5f726174655f6c696d6974f4013c4f7074696f6e3c42616c616e63653e00011873796d626f6c150101984f7074696f6e3c426f756e6465645665633c75382c20543a3a537472696e674c696d69743e3e000120646563696d616c73210101284f7074696f6e3c75383e00013469735f73756666696369656e74200110626f6f6c0002044841737365742077617320757064617465642e2c4c6f636174696f6e53657408012061737365745f6964100128543a3a417373657449640001206c6f636174696f6e25010158543a3a41737365744e61746976654c6f636174696f6e000304844e6174697665206c6f636174696f6e2073657420666f7220616e2061737365742e2c417373657442616e6e656404012061737365745f6964100128543a3a41737365744964000404444173736574207761732062616e6e65642e344173736574556e62616e6e656404012061737365745f6964100128543a3a4173736574496400050460417373657427732062616e207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574150104184f7074696f6e0404540119010108104e6f6e6500000010536f6d6504001901000001000019010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00001d010c5470616c6c65745f61737365745f72656769737472791474797065732441737365745479706500011814546f6b656e0000000c58594b00010028537461626c655377617000020010426f6e640003002045787465726e616c00040014457263323000050000210104184f7074696f6e04045401080108104e6f6e6500000010536f6d65040008000001000025010c3c687964726164785f72756e74696d650c78636d3441737365744c6f636174696f6e0000040029010168706f6c6b61646f745f78636d3a3a76333a3a4c6f636174696f6e00002901102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f722d0101244a756e6374696f6e7300002d01100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400310101204a756e6374696f6e0001000858320800310101204a756e6374696f6e0000310101204a756e6374696f6e0002000858330c00310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0003000858341000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0004000858351400310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0005000858361800310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0006000858371c00310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0007000858382000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e0000310101204a756e6374696f6e000800003101100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e04003501010c7533320000002c4163636f756e744964333208011c6e6574776f726b390101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b390101444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b390101444f7074696f6e3c4e6574776f726b49643e00010c6b6579410101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040045010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c697479080108696449010118426f64794964000110706172744d010120426f6479506172740008003c476c6f62616c436f6e73656e73757304003d0101244e6574776f726b49640009000035010000061000390104184f7074696f6e040454013d010108104e6f6e6500000010536f6d6504003d0100000100003d01100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a00004101000003140000000800450100000618004901100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e64657804003501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900004d01100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e743501010c753332000100204672616374696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c7533320004000051010c3470616c6c65745f636c61696d731870616c6c6574144576656e7404045400010414436c61696d0c00000130543a3a4163636f756e74496400005501013c457468657265756d41646472657373000018013042616c616e63654f663c543e000000047c54686520604576656e746020656e756d206f6620746869732070616c6c657455010c3470616c6c65745f636c61696d73187472616974733c457468657265756d4164647265737300000400410101205b75383b2032305d000059010c5c70616c6c65745f636f6c6c61746f725f726577617264731870616c6c6574144576656e7404045400010440436f6c6c61746f7252657761726465640c010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500012063757272656e6379100134543a3a43757272656e6379496400000458436f6c6c61746f72207761732072657761726465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65745d010c3c70616c6c65745f6f6d6e69706f6f6c1870616c6c6574144576656e7404045400013428546f6b656e41646465640c012061737365745f6964100128543a3a41737365744964000138696e697469616c5f616d6f756e7418011c42616c616e6365000134696e697469616c5f707269636561010114507269636500000478416e2061737365742077617320616464656420746f204f6d6e69706f6f6c30546f6b656e52656d6f7665640c012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001346875625f77697468647261776e18011c42616c616e636500010488416e206173736574207761732072656d6f7665642066726f6d204f6d6e69706f6f6c384c6971756964697479416464656410010c77686f000130543a3a4163636f756e74496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e636500012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000204b04c6971756964697479206f6620616e2061737365742077617320616464656420746f204f6d6e69706f6f6c2e404c697175696469747952656d6f76656414010c77686f000130543a3a4163636f756e74496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d496400012061737365745f6964100128543a3a417373657449640001387368617265735f72656d6f76656418011c42616c616e636500010c66656561010124466978656455313238000304c04c6971756964697479206f6620616e206173736574207761732072656d6f7665642066726f6d204f6d6e69706f6f6c2e6050726f746f636f6c4c697175696469747952656d6f76656414010c77686f000130543a3a4163636f756e74496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001286875625f616d6f756e7418011c42616c616e63650001387368617265735f72656d6f76656418011c42616c616e6365000404b450526f746f636f6c204c6971756964697479207761732072656d6f7665642066726f6d204f6d6e69706f6f6c2e3053656c6c457865637574656424010c77686f000130543a3a4163636f756e74496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650001346875625f616d6f756e745f696e18011c42616c616e63650001386875625f616d6f756e745f6f757418011c42616c616e636500014061737365745f6665655f616d6f756e7418011c42616c616e636500014c70726f746f636f6c5f6665655f616d6f756e7418011c42616c616e63650005045053656c6c2074726164652065786563757465642e2c427579457865637574656424010c77686f000130543a3a4163636f756e74496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650001346875625f616d6f756e745f696e18011c42616c616e63650001386875625f616d6f756e745f6f757418011c42616c616e636500014061737365745f6665655f616d6f756e7418011c42616c616e636500014c70726f746f636f6c5f6665655f616d6f756e7418011c42616c616e63650006044c4275792074726164652065786563757465642e3c506f736974696f6e4372656174656418012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640001146f776e6572000130543a3a4163636f756e7449640001146173736574100128543a3a41737365744964000118616d6f756e7418011c42616c616e636500011873686172657318011c42616c616e63650001147072696365610101145072696365000704c04c5020506f736974696f6e20776173206372656174656420616e64204e465420696e7374616e6365206d696e7465642e44506f736974696f6e44657374726f79656408012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640001146f776e6572000130543a3a4163636f756e744964000804c84c5020506f736974696f6e207761732064657374726f79656420616e64204e465420696e7374616e6365206275726e65642e3c506f736974696f6e5570646174656418012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640001146f776e6572000130543a3a4163636f756e7449640001146173736574100128543a3a41737365744964000118616d6f756e7418011c42616c616e636500011873686172657318011c42616c616e63650001147072696365610101145072696365000904604c5020506f736974696f6e2077617320757064617465642e505472616461626c6553746174655570646174656408012061737365745f6964100128543a3a4173736574496400011473746174656501012c547261646162696c697479000a04a041737365742773207472616461626c6520737461746520686173206265656e20757064617465642e344173736574526566756e6465640c012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e6365000124726563697069656e74000130543a3a4163636f756e744964000b044901416d6f756e7420686173206265656e20726566756e64656420666f7220617373657420776869636820686173206e6f74206265656e20616363657074656420746f2061646420746f206f6d6e69706f6f6c2e5441737365745765696768744361705570646174656408012061737365745f6964100128543a3a4173736574496400010c6361706901011c5065726d696c6c000c049041737365742773207765696768742063617020686173206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657461010c3473705f61726974686d657469632c66697865645f706f696e74244669786564553132380000040018011075313238000065010c3c70616c6c65745f6f6d6e69706f6f6c1474797065732c547261646162696c6974790000040110626974730801087538000069010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200006d010c6070616c6c65745f7472616e73616374696f6e5f70617573651870616c6c6574144576656e74040454000108445472616e73616374696f6e50617573656408014470616c6c65745f6e616d655f627974657338011c5665633c75383e00014c66756e6374696f6e5f6e616d655f627974657338011c5665633c75383e00000448506175736564207472616e73616374696f6e4c5472616e73616374696f6e556e70617573656408014470616c6c65745f6e616d655f627974657338011c5665633c75383e00014c66756e6374696f6e5f6e616d655f627974657338011c5665633c75383e00010450556e706175736564207472616e73616374696f6e047c54686520604576656e746020656e756d206f6620746869732070616c6c657471010c3470616c6c65745f6475737465721870616c6c6574144576656e7404045400010c1844757374656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650000043c4163636f756e74206475737465642e14416464656404010c77686f000130543a3a4163636f756e7449640001048c4163636f756e7420616464656420746f206e6f6e2d6475737461626c65206c6973742e1c52656d6f76656404010c77686f000130543a3a4163636f756e7449640002049c4163636f756e742072656d6f7665642066726f6d206e6f6e2d6475737461626c65206c6973742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657475010c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c6574144576656e7408045400044900010c5c476c6f62616c4661726d41636352505a557064617465640c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400013c616363756d756c617465645f72707a61010124466978656455313238000138746f74616c5f7368617265735f7a18011c42616c616e6365000004d4476c6f62616c206661726d20616363756d756c6174656420726577617264207065722073686172652077617320757064617465642e5c5969656c644661726d4163635250565355706461746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d4964000140616363756d756c617465645f727076736101012446697865645531323800014c746f74616c5f76616c7565645f73686172657318011c42616c616e6365000104ec5969656c64206661726d20616363756d756c6174656420726577617264207065722076616c7565642073686172652077617320757064617465642e54416c6c526577617264734469737472696275746564040138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d4964000204f0476c6f62616c206661726d20686173206e6f206d6f7265207265776172647320746f206469737472696275746520696e20746865206d6f6d656e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657479010c8070616c6c65745f6f6d6e69706f6f6c5f6c69717569646974795f6d696e696e671870616c6c6574144576656e7404045400013444476c6f62616c4661726d437265617465642801086964100130476c6f62616c4661726d49640001146f776e6572000130543a3a4163636f756e744964000134746f74616c5f7265776172647318011c42616c616e636500013c7265776172645f63757272656e6379100128543a3a417373657449640001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e0001546d61785f7265776172645f7065725f706572696f6418011c42616c616e636500012c6d696e5f6465706f73697418011c42616c616e63650001546c726e615f70726963655f61646a7573746d656e7461010124466978656455313238000004704e657720676c6f62616c206661726d2077617320637265617465642e44476c6f62616c4661726d557064617465641001086964100130476c6f62616c4661726d4964000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e0001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c00012c6d696e5f6465706f73697418011c42616c616e63650001045c476c6f62616c206661726d20776173207570646174656450476c6f62616c4661726d5465726d696e61746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400010c77686f000130543a3a4163636f756e74496400013c7265776172645f63757272656e6379100128543a3a41737365744964000154756e64697374726962757465645f7265776172647318011c42616c616e63650002046c476c6f62616c206661726d20776173207465726d696e617465642e405969656c644661726d43726561746564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a417373657449640001286d756c7469706c696572610101384661726d4d756c7469706c6965720001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e000304944e6577207969656c64206661726d2077617320616464656420746f20746865206661726d2e405969656c644661726d55706461746564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001286d756c7469706c696572610101384661726d4d756c7469706c696572000404885969656c64206661726d206d756c7469706c6965722077617320757064617465642e405969656c644661726d53746f70706564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e744964000504985969656c64206661726d20666f72206061737365745f696460207761732073746f707065642e405969656c644661726d526573756d6564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001286d756c7469706c696572610101384661726d4d756c7469706c696572000604985969656c64206661726d20666f72206061737365745f6964602077617320726573756d65642e4c5969656c644661726d5465726d696e61746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e744964000704bc5969656c64206661726d20776173207465726d696e617465642066726f6d2074686520676c6f62616c206661726d2e3c5368617265734465706f73697465641c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d49640001286465706f7369745f69641801244465706f736974496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001347368617265735f616d6f756e7418011c42616c616e636500012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000804a84e6577204c5020736861726573284c5020706f736974696f6e292077657265206465706f73697465642e4453686172657352656465706f73697465641c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d49640001286465706f7369745f69641801244465706f736974496400012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001347368617265735f616d6f756e7418011c42616c616e636500012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640009040101416c7265616479206c6f636b6564204c502073686172657320776572652072656465706f736974656420746f20616e6f74686572207969656c64206661726d2e34526577617264436c61696d6564180138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400011c636c61696d656418011c42616c616e636500013c7265776172645f63757272656e6379100128543a3a417373657449640001286465706f7369745f69641801244465706f7369744964000a045452657761726473207765726520636c61696d65642e3c53686172657357697468647261776e140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e63650001286465706f7369745f69641801244465706f7369744964000b04644c502073686172657320776572652077697468647261776e2e404465706f73697444657374726f79656408010c77686f000130543a3a4163636f756e7449640001286465706f7369745f69641801244465706f7369744964000c041d01416c6c204c5020736861726573207765726520756e6c6f636b656420616e64204e465420726570726573656e74696e67206465706f736974207761732064657374726f7965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d010c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040030010c7536340000810104184f7074696f6e0404540185010108104e6f6e6500000010536f6d6504008501000001000085010c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573304c6f79616c747943757276650000080164696e697469616c5f7265776172645f70657263656e74616765610101244669786564553132380001287363616c655f636f656610010c753332000089010c2870616c6c65745f6f74631870616c6c6574144576656e740404540001102443616e63656c6c65640401206f726465725f696410011c4f7264657249640000046c416e204f7264657220686173206265656e2063616e63656c6c65641846696c6c65641401206f726465725f696410011c4f72646572496400010c77686f000130543a3a4163636f756e744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e636500010c66656518011c42616c616e63650001048c416e204f7264657220686173206265656e20636f6d706c6574656c792066696c6c65643c5061727469616c6c7946696c6c65641401206f726465725f696410011c4f72646572496400010c77686f000130543a3a4163636f756e744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e636500010c66656518011c42616c616e636500020488416e204f7264657220686173206265656e207061727469616c6c792066696c6c656418506c616365641801206f726465725f696410011c4f72646572496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650001487061727469616c6c795f66696c6c61626c65200110626f6f6c00030460416e204f7264657220686173206265656e20706c61636564047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d010c5870616c6c65745f636972637569745f627265616b65721870616c6c6574144576656e7404045400010c5c5472616465566f6c756d654c696d69744368616e67656408012061737365745f6964100128543a3a4173736574496400014874726164655f766f6c756d655f6c696d697491010128287533322c2075333229000004ac547261646520766f6c756d65206c696d6974206f6620616e20617373657420776173206368616e6765642e604164644c69717569646974794c696d69744368616e67656408012061737365745f6964100128543a3a4173736574496400013c6c69717569646974795f6c696d6974950101484f7074696f6e3c287533322c20753332293e000104b0416464206c6971756964697479206c696d6974206f6620616e20617373657420776173206368616e6765642e6c52656d6f76654c69717569646974794c696d69744368616e67656408012061737365745f6964100128543a3a4173736574496400013c6c69717569646974795f6c696d6974950101484f7074696f6e3c287533322c20753332293e000204bc52656d6f7665206c6971756964697479206c696d6974206f6620616e20617373657420776173206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574910100000408101000950104184f7074696f6e0404540191010108104e6f6e6500000010536f6d6504009101000001000099010c5470616c6c65745f726f7574655f6578656375746f721870616c6c6574144576656e7404045400010820457865637574656410012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e180128543a3a42616c616e6365000128616d6f756e745f6f7574180128543a3a42616c616e6365000004d054686520726f75746520776974682074726164657320686173206265656e207375636365737366756c6c7920657865637574656430526f7574655570646174656404012461737365745f6964739d01013c5665633c543a3a417373657449643e000104d054686520726f75746520776974682074726164657320686173206265656e207375636365737366756c6c79206578656375746564047c54686520604576656e746020656e756d206f6620746869732070616c6c65749d010000021000a1010c4c70616c6c65745f64796e616d69635f666565731870616c6c6574144576656e74040454000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5010c3870616c6c65745f7374616b696e671870616c6c6574144576656e740404540001183c506f736974696f6e437265617465640c010c77686f000130543a3a4163636f756e74496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640001147374616b6518011c42616c616e6365000004d04e6577207374616b696e6720706f736974696f6e20776173206372656174656420616e64204e465420776173206d696e7465642e285374616b6541646465641c010c77686f000130543a3a4163636f756e74496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d49640001147374616b6518011c42616c616e636500012c746f74616c5f7374616b6518011c42616c616e63650001386c6f636b65645f7265776172647318011c42616c616e6365000138736c61736865645f706f696e7473180114506f696e7400014870617961626c655f70657263656e7461676561010124466978656455313238000104c85374616b656420616d6f756e7420666f72206578697374696e6720706f736974696f6e2077617320696e637265617365642e3852657761726473436c61696d65641c010c77686f000130543a3a4163636f756e74496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000130706169645f7265776172647318011c42616c616e6365000140756e6c6f636b65645f7265776172647318011c42616c616e6365000138736c61736865645f706f696e7473180114506f696e74000158736c61736865645f756e706169645f7265776172647318011c42616c616e636500014870617961626c655f70657263656e74616765610101244669786564553132380002045452657761726473207765726520636c61696d65642e20556e7374616b65640c010c77686f000130543a3a4163636f756e74496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000138756e6c6f636b65645f7374616b6518011c42616c616e6365000304bc5374616b656420616d6f756e74207761732077697468647261776e20616e64204e465420776173206275726e65642e485374616b696e67496e697469616c697a65640401506e6f6e5f6475737461626c655f62616c616e636518011c42616c616e6365000404605374616b696e672077617320696e697469616c697a65642e54416363756d756c617465645270735570646174656408013c616363756d756c617465645f7270736101012446697865645531323800012c746f74616c5f7374616b6518011c42616c616e6365000504d45374616b696e6727732060616363756d756c617465645f7265776172645f7065725f7374616b65602077617320757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a9010c4470616c6c65745f737461626c65737761701870616c6c6574144576656e740404540001202c506f6f6c4372656174656410011c706f6f6c5f6964100128543a3a417373657449640001186173736574739d01013c5665633c543a3a417373657449643e000134616d706c696669636174696f6ead0101284e6f6e5a65726f55313600010c6665656901011c5065726d696c6c0000044c4120706f6f6c2077617320637265617465642e284665655570646174656408011c706f6f6c5f6964100128543a3a4173736574496400010c6665656901011c5065726d696c6c00010468506f6f6c2066656520686173206265656e20757064617465642e384c6971756964697479416464656410011c706f6f6c5f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400011873686172657318011c42616c616e6365000118617373657473b10101705665633c4173736574416d6f756e743c543a3a417373657449643e3e000204a84c6971756964697479206f6620616e2061737365742077617320616464656420746f206120706f6f6c2e404c697175696469747952656d6f76656414011c706f6f6c5f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400011873686172657318011c42616c616e636500011c616d6f756e7473b10101705665633c4173736574416d6f756e743c543a3a417373657449643e3e00010c66656518011c42616c616e6365000304484c69717569646974792072656d6f7665642e3053656c6c45786563757465641c010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e636500010c66656518011c42616c616e63650004048d0153656c6c2074726164652065786563757465642e20547261646520666565207061696420696e206173736574206c656176696e672074686520706f6f6c2028616c726561647920737562747261637465642066726f6d20616d6f756e745f6f7574292e2c42757945786563757465641c010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e636500010c66656518011c42616c616e636500050479014275792074726164652065786563757465642e20547261646520666565207061696420696e20617373657420656e746572696e672074686520706f6f6c2028616c726561647920696e636c7564656420696e20616d6f756e745f696e292e505472616461626c655374617465557064617465640c011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f6964100128543a3a417373657449640001147374617465b901012c547261646162696c697479000604a041737365742773207472616461626c6520737461746520686173206265656e20757064617465642e54416d706c696669636174696f6e4368616e67696e6714011c706f6f6c5f6964100128543a3a4173736574496400015463757272656e745f616d706c696669636174696f6ead0101284e6f6e5a65726f55313600014c66696e616c5f616d706c696669636174696f6ead0101284e6f6e5a65726f55313600012c73746172745f626c6f636b100144426c6f636b4e756d626572466f723c543e000124656e645f626c6f636b100144426c6f636b4e756d626572466f723c543e000704d841416d706c696669636174696f6e206f66206120706f6f6c20686173206265656e207363686564756c656420746f206368616e67652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ad0104284e6f6e5a65726f55313600000400dc000000b101000002b50100b5010c4470616c6c65745f737461626c65737761701474797065732c4173736574416d6f756e74041c4173736574496401100008012061737365745f696410011c41737365744964000118616d6f756e7418011c42616c616e63650000b9010c4470616c6c65745f737461626c65737761701474797065732c547261646162696c69747900000401106269747308010875380000bd010c3070616c6c65745f626f6e64731870616c6c6574144576656e7404045400010c30546f6b656e43726561746564100118697373756572000130543a3a4163636f756e74496400012061737365745f696410011c4173736574496400011c626f6e645f696410011c417373657449640001206d617475726974793001184d6f6d656e740000046c4120626f6e6420617373657420776173207265676973746572656418497373756564100118697373756572000130543a3a4163636f756e74496400011c626f6e645f696410011c41737365744964000118616d6f756e74180128543a3a42616c616e636500010c666565180128543a3a42616c616e6365000104504e657720626f6e642077657265206973737565642052656465656d65640c010c77686f000130543a3a4163636f756e74496400011c626f6e645f696410011c41737365744964000118616d6f756e74180128543a3a42616c616e63650002044c426f6e647320776572652072656465656d6564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1010c5870616c6c65745f6f74635f736574746c656d656e74731870616c6c6574144576656e7404045400010420457865637574656408012061737365745f6964100130417373657449644f663c543e00011870726f66697418011c42616c616e6365000004644120747261646520686173206265656e206578656375746564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c5010c2870616c6c65745f6c62701870616c6c6574144576656e740404540001182c506f6f6c43726561746564080110706f6f6c000124506f6f6c49643c543e00011064617461c9010194506f6f6c3c543a3a4163636f756e7449642c20426c6f636b4e756d626572466f723c543e3e000004b0506f6f6c207761732063726561746564206279207468652060437265617465506f6f6c60206f726967696e2e2c506f6f6c55706461746564080110706f6f6c000124506f6f6c49643c543e00011064617461c9010194506f6f6c3c543a3a4163636f756e7449642c20426c6f636b4e756d626572466f723c543e3e0001045c506f6f6c2064617461207765726520757064617465642e384c6971756964697479416464656414010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c41737365744964000120616d6f756e745f6118013042616c616e63654f663c543e000120616d6f756e745f6218013042616c616e63654f663c543e0002049c4e6577206c6971756964697479207761732070726f766964656420746f2074686520706f6f6c2e404c697175696469747952656d6f76656414010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c41737365744964000120616d6f756e745f6118013042616c616e63654f663c543e000120616d6f756e745f6218013042616c616e63654f663c543e000304fc4c6971756964697479207761732072656d6f7665642066726f6d2074686520706f6f6c20616e642074686520706f6f6c207761732064657374726f7965642e3053656c6c45786563757465641c010c77686f000130543a3a4163636f756e74496400012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000118616d6f756e7418013042616c616e63654f663c543e00012873616c655f707269636518013042616c616e63654f663c543e0001246665655f617373657410011c417373657449640001286665655f616d6f756e7418013042616c616e63654f663c543e0004043853616c652065786563757465642e2c42757945786563757465641c010c77686f000130543a3a4163636f756e74496400012461737365745f6f757410011c4173736574496400012061737365745f696e10011c41737365744964000118616d6f756e7418013042616c616e63654f663c543e0001246275795f707269636518013042616c616e63654f663c543e0001246665655f617373657410011c417373657449640001286665655f616d6f756e7418013042616c616e63654f663c543e0005044850757263686173652065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c901082870616c6c65745f6c627010506f6f6c08244163636f756e74496401002c426c6f636b4e756d6265720110002801146f776e65720001244163636f756e7449640001147374617274cd01014c4f7074696f6e3c426c6f636b4e756d6265723e00010c656e64cd01014c4f7074696f6e3c426c6f636b4e756d6265723e0001186173736574739101014828417373657449642c204173736574496429000138696e697469616c5f7765696768741001244c425057656967687400013066696e616c5f7765696768741001244c42505765696768740001307765696768745f6375727665d101013c57656967687443757276655479706500010c66656591010128287533322c20753332290001346665655f636f6c6c6563746f720001244163636f756e74496400013072657061795f74617267657418011c42616c616e63650000cd0104184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000d101082870616c6c65745f6c62703c576569676874437572766554797065000104184c696e65617200000000d5010c2870616c6c65745f78796b1870616c6c6574144576656e74040454000118384c6971756964697479416464656414010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c41737365744964000120616d6f756e745f6118011c42616c616e6365000120616d6f756e745f6218011c42616c616e63650000049c4e6577206c6971756964697479207761732070726f766964656420746f2074686520706f6f6c2e404c697175696469747952656d6f76656410010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c4173736574496400011873686172657318011c42616c616e6365000104904c6971756964697479207761732072656d6f7665642066726f6d2074686520706f6f6c2e2c506f6f6c4372656174656418010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c41737365744964000154696e697469616c5f7368617265735f616d6f756e7418011c42616c616e636500012c73686172655f746f6b656e10011c41737365744964000110706f6f6c000130543a3a4163636f756e74496400020444506f6f6c2077617320637265617465642e34506f6f6c44657374726f79656414010c77686f000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400011c61737365745f6210011c4173736574496400012c73686172655f746f6b656e10011c41737365744964000110706f6f6c000130543a3a4163636f756e7449640003044c506f6f6c207761732064657374726f7965642e3053656c6c457865637574656420010c77686f000130543a3a4163636f756e74496400012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000118616d6f756e7418011c42616c616e636500012873616c655f707269636518011c42616c616e63650001246665655f617373657410011c417373657449640001286665655f616d6f756e7418011c42616c616e6365000110706f6f6c000130543a3a4163636f756e7449640004045041737365742073616c652065786563757465642e2c427579457865637574656420010c77686f000130543a3a4163636f756e74496400012461737365745f6f757410011c4173736574496400012061737365745f696e10011c41737365744964000118616d6f756e7418011c42616c616e63650001246275795f707269636518011c42616c616e63650001246665655f617373657410011c417373657449640001286665655f616d6f756e7418011c42616c616e6365000110706f6f6c000130543a3a4163636f756e7449640005046041737365742070757263686173652065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d9010c4070616c6c65745f726566657272616c731870616c6c6574144576656e7404045400011838436f646552656769737465726564080110636f6465dd01016c526566657272616c436f64653c543a3a436f64654c656e6774683e00011c6163636f756e74000130543a3a4163636f756e74496400000488526566657272616c20636f646520686173206265656e20726567697374657265642e28436f64654c696e6b65640c011c6163636f756e74000130543a3a4163636f756e744964000110636f6465dd01016c526566657272616c436f64653c543a3a436f64654c656e6774683e000140726566657272616c5f6163636f756e74000130543a3a4163636f756e744964000104b0526566657272616c20636f646520686173206265656e206c696e6b656420746f20616e206163636f756e742e24436f6e76657274656408011066726f6de101015c4173736574416d6f756e743c543a3a417373657449643e000108746fe101015c4173736574416d6f756e743c543a3a417373657449643e000204a0417373657420686173206265656e20636f6e76657274656420746f2052657761726441737365742e1c436c61696d65640c010c77686f000130543a3a4163636f756e74496400014072656665727265725f7265776172647318011c42616c616e636500013474726164655f7265776172647318011c42616c616e6365000304405265776172647320636c61696d65642e4c417373657452657761726473557064617465640c012061737365745f6964100128543a3a417373657449640001146c6576656ce50101144c6576656c00011c72657761726473e901013c466565446973747269627574696f6e0004047c4e6577206173736574207265776172647320686173206265656e207365742e1c4c6576656c557008010c77686f000130543a3a4163636f756e7449640001146c6576656ce50101144c6576656c0005046c52656665727265722072656163686564206e6577206c6576656c2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000e101084070616c6c65745f726566657272616c732c4173736574416d6f756e74041c4173736574496401100008012061737365745f696410011c41737365744964000118616d6f756e7418011c42616c616e63650000e501084070616c6c65745f726566657272616c73144c6576656c000118104e6f6e6500000014546965723000010014546965723100020014546965723200030014546965723300040014546965723400050000e901084070616c6c65745f726566657272616c733c466565446973747269627574696f6e00000c012072656665727265726901011c5065726d696c6c0001187472616465726901011c5065726d696c6c00012065787465726e616c6901011c5065726d696c6c0000ed010c2c6f726d6c5f746f6b656e73186d6f64756c65144576656e740404540001441c456e646f7765640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f73740c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000108ec416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77c84578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e7366657210012c63757272656e63795f6964100134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2052657365727665640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000304e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e72657365727665640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656414012c63757272656e63795f6964100134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500011873746174757380013442616c616e6365537461747573000508f4536f6d652072657365727665642062616c616e63652077617320726570617472696174656420286d6f7665642066726f6d20726573657276656420746f44616e6f74686572206163636f756e74292e2842616c616e636553657410012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500060468412062616c616e6365207761732073657420627920726f6f742e40546f74616c49737375616e636553657408012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000704b854686520746f74616c2069737375616e6365206f6620616e2063757272656e637920686173206265656e207365742457697468647261776e0c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000804ec536f6d652062616c616e63657320776572652077697468647261776e2028652e672e2070617920666f72207472616e73616374696f6e20666565291c536c617368656410012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400012c667265655f616d6f756e74180128543a3a42616c616e636500013c72657365727665645f616d6f756e74180128543a3a42616c616e6365000904d4536f6d652062616c616e636573207765726520736c61736865642028652e672e2064756520746f206d69732d6265686176696f7229244465706f73697465640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a04984465706f736974656420736f6d652062616c616e636520696e746f20616e206163636f756e741c4c6f636b53657410011c6c6f636b5f6964f10101384c6f636b4964656e74696669657200012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b0454536f6d652066756e647320617265206c6f636b65642c4c6f636b52656d6f7665640c011c6c6f636b5f6964f10101384c6f636b4964656e74696669657200012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000c047c536f6d65206c6f636b65642066756e6473207765726520756e6c6f636b6564184c6f636b65640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d0474536f6d6520667265652062616c616e636520776173206c6f636b65642e20556e6c6f636b65640c012c63757272656e63795f6964100134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000e0478536f6d65206c6f636b65642062616c616e6365207761732066726565642e1849737375656408012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000f002452657363696e64656408012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365001000047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f101000003080000000800f5010c4470616c6c65745f63757272656e63696573186d6f64756c65144576656e740404540001102c5472616e7366657272656410012c63757272656e63795f696410013c43757272656e637949644f663c543e00011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0000046843757272656e6379207472616e7366657220737563636573732e3842616c616e6365557064617465640c012c63757272656e63795f696410013c43757272656e637949644f663c543e00010c77686f000130543a3a4163636f756e744964000118616d6f756e74f901012c416d6f756e744f663c543e0001045c5570646174652062616c616e636520737563636573732e244465706f73697465640c012c63757272656e63795f696410013c43757272656e637949644f663c543e00010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000204404465706f73697420737563636573732e2457697468647261776e0c012c63757272656e63795f696410013c43757272656e637949644f663c543e00010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00030444576974686472617720737563636573732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f9010000050d00fd010c306f726d6c5f76657374696e67186d6f64756c65144576656e7404045400010c5056657374696e675363686564756c6541646465640c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400014076657374696e675f7363686564756c650102015056657374696e675363686564756c654f663c543e0000046c4164646564206e65772076657374696e67207363686564756c652e1c436c61696d656408010c77686f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00010440436c61696d65642076657374696e672e5c56657374696e675363686564756c65735570646174656404010c77686f000130543a3a4163636f756e74496400020468557064617465642076657374696e67207363686564756c65732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574010208306f726d6c5f76657374696e673c56657374696e675363686564756c65082c426c6f636b4e756d62657201101c42616c616e6365011800100114737461727410012c426c6f636b4e756d626572000118706572696f6410012c426c6f636b4e756d626572000130706572696f645f636f756e7410010c7533320001287065725f706572696f644501011c42616c616e6365000005020c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f670902010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573730d02011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c616464726573730d0201104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573730d02011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c616464726573730d0201104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573730d02011048313630000118746f70696373110201245665633c483235363e00011064617461380114427974657300000d02083c7072696d69746976655f7479706573104831363000000400410101205b75383b2032305d00001102000002340015020c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d0d02011048313630000108746f0d020110483136300001407472616e73616374696f6e5f686173683401104832353600012c657869745f726561736f6e1902012845786974526561736f6e00012865787472615f6461746138011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419020c2065766d5f636f7265146572726f722845786974526561736f6e0001101c5375636365656404001d02012c4578697453756363656564000000144572726f72040021020124457869744572726f72000100185265766572740400310201284578697452657665727400020014466174616c04003502012445786974466174616c000300001d020c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e65640001002053756963696465640002000021020c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400250201184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f74686572040029020144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e000025020c2065766d5f636f7265186f70636f6465184f70636f646500000400080108753800002902040c436f77040454012d020004002d020000002d02000005020031020c2065766d5f636f7265146572726f7228457869745265766572740001042052657665727465640000000035020c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c040021020124457869744572726f72000200144f74686572040029020144436f773c277374617469632c207374723e0003000039020c4c70616c6c65745f65766d5f6163636f756e74731870616c6c6574144576656e7404045400011414426f756e6408011c6163636f756e74000130543a3a4163636f756e74496400011c616464726573730d02012845766d416464726573730000045042696e64696e672077617320637265617465642e344465706c6f796572416464656404010c77686f0d02012845766d416464726573730001044c4465706c6f796572207761732061646465642e3c4465706c6f79657252656d6f76656404010c77686f0d02012845766d41646472657373000204544465706c6f796572207761732072656d6f7665642e40436f6e7472616374417070726f76656404011c616464726573730d02012845766d4164647265737300030458436f6e74726163742077617320617070726f7665642e4c436f6e7472616374446973617070726f76656404011c616464726573730d02012845766d4164647265737300040464436f6e74726163742077617320646973617070726f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65743d020c6c70616c6c65745f78796b5f6c69717569646974795f6d696e696e671870616c6c6574144576656e7404045400013444476c6f62616c4661726d437265617465642c01086964100130476c6f62616c4661726d49640001146f776e6572000130543a3a4163636f756e744964000134746f74616c5f7265776172647318011c42616c616e636500013c7265776172645f63757272656e637910011c417373657449640001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e000148696e63656e746976697a65645f617373657410011c417373657449640001546d61785f7265776172645f7065725f706572696f6418011c42616c616e636500012c6d696e5f6465706f73697418011c42616c616e636500014070726963655f61646a7573746d656e7461010124466978656455313238000004704e657720676c6f62616c206661726d2077617320637265617465642e44476c6f62616c4661726d557064617465640801086964100130476c6f62616c4661726d496400014070726963655f61646a7573746d656e7461010124466978656455313238000104b4476c6f62616c206661726d2773206070726963655f61646a7573746d656e74602077617320757064617465642e405969656c644661726d43726561746564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d49640001286d756c7469706c696572610101384661726d4d756c7469706c69657200012861737365745f70616972410201244173736574506169720001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e0002049c4e6577207969656c64206661726d2077617320616464656420696e746f20746865206661726d2e50476c6f62616c4661726d5465726d696e61746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400010c77686f000130543a3a4163636f756e74496400013c7265776172645f63757272656e637910011c41737365744964000154756e64697374726962757465645f7265776172647318011c42616c616e63650003046c476c6f62616c206661726d20776173207465726d696e617465642e3c5368617265734465706f7369746564180138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e63650001206c705f746f6b656e10011c417373657449640001286465706f7369745f69641801244465706f7369744964000404704e6577204c5020746f6b656e7320776173206465706f73697465642e4453686172657352656465706f7369746564180138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e63650001206c705f746f6b656e10011c417373657449640001286465706f7369745f69641801244465706f7369744964000504cc4c5020746f6b656e207761732072656465706f736974656420666f722061206e6577207969656c64206661726d20656e74727934526577617264436c61696d6564180138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400011c636c61696d656418011c42616c616e636500013c7265776172645f63757272656e637910011c417373657449640001286465706f7369745f69641801244465706f736974496400060450526577617264732077617320636c61696d65642e3c53686172657357697468647261776e180138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e7449640001206c705f746f6b656e10011c41737365744964000118616d6f756e7418011c42616c616e63650001286465706f7369745f69641801244465706f7369744964000704604c5020746f6b656e73207761732077697468647261776e2e405969656c644661726d53746f70706564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400012861737365745f7061697241020124417373657450616972000804985969656c64206661726d20666f722061737365742070616972207761732073746f707065642e405969656c644661726d526573756d6564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400012861737365745f70616972410201244173736574506169720001286d756c7469706c696572610101384661726d4d756c7469706c696572000904985969656c64206661726d20666f7220617373657420706169722077617320726573756d65642e4c5969656c644661726d5465726d696e61746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400012861737365745f7061697241020124417373657450616972000a04ac5969656c64206661726d20776173207465726d696e617465642066726f6d20676c6f62616c206661726d2e405969656c644661726d55706461746564140138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400010c77686f000130543a3a4163636f756e74496400012861737365745f70616972410201244173736574506169720001286d756c7469706c696572610101384661726d4d756c7469706c696572000b04885969656c64206661726d206d756c7469706c6965722077617320757064617465642e404465706f73697444657374726f79656408010c77686f000130543a3a4163636f756e7449640001286465706f7369745f69641801244465706f7369744964000c04ac4e465420726570726573656e74696e67206465706f73697420686173206265656e2064657374726f796564047c54686520604576656e746020656e756d206f6620746869732070616c6c657441020c2870616c6c65745f78796b14747970657324417373657450616972000008012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000045020c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c6574144576656e7408045400044900010c5c476c6f62616c4661726d41636352505a557064617465640c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400013c616363756d756c617465645f72707a61010124466978656455313238000138746f74616c5f7368617265735f7a18011c42616c616e6365000004d4476c6f62616c206661726d20616363756d756c6174656420726577617264207065722073686172652077617320757064617465642e5c5969656c644661726d4163635250565355706461746564100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d4964000140616363756d756c617465645f727076736101012446697865645531323800014c746f74616c5f76616c7565645f73686172657318011c42616c616e6365000104ec5969656c64206661726d20616363756d756c6174656420726577617264207065722076616c7565642073686172652077617320757064617465642e54416c6c526577617264734469737472696275746564040138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d4964000204f0476c6f62616c206661726d20686173206e6f206d6f7265207265776172647320746f206469737472696275746520696e20746865206d6f6d656e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449020c5870616c6c65745f72656c6179636861696e5f696e666f1870616c6c6574144576656e740404540001044c43757272656e74426c6f636b4e756d6265727308015870617261636861696e5f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00015c72656c6179636861696e5f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0000085443757272656e7420626c6f636b206e756d62657273cc5b2050617261636861696e20626c6f636b206e756d6265722c2052656c6179636861696e20426c6f636b206e756d626572205d047c54686520604576656e746020656e756d206f6620746869732070616c6c65744d020c2870616c6c65745f6463611870616c6c6574144576656e7404045400012040457865637574696f6e5374617274656408010869641001285363686564756c654964000114626c6f636b100144426c6f636b4e756d626572466f723c543e000004705468652044434120657865637574696f6e2069732073746172746564245363686564756c656414010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e744964000118706572696f64100144426c6f636b4e756d626572466f723c543e000130746f74616c5f616d6f756e7418011c42616c616e63650001146f72646572510201444f726465723c543a3a417373657449643e0001049c54686520444341206973207363686564756c656420666f72206e65787420657865637574696f6e40457865637574696f6e506c616e6e65640c010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e000204885468652044434120697320706c616e6e656420666f7220626c6f636b6e756d626572345472616465457865637574656410010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650003049854686520444341207472616465206973207375636365737366756c6c792065786563757465642c54726164654661696c65640c010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000404845468652044434120747261646520657865637574696f6e206973206661696c6564285465726d696e617465640c010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e7449640001146572726f7268013444697370617463684572726f72000504ec54686520444341206973207465726d696e6174656420616e6420636f6d706c6574656c792072656d6f7665642066726f6d2074686520636861696e24436f6d706c6574656408010869641001285363686564756c65496400010c77686f000130543a3a4163636f756e744964000604e85468652044434120697320636f6d706c6574656420616e6420636f6d706c6574656c792072656d6f7665642066726f6d2074686520636861696e6852616e646f6d6e65737347656e65726174696f6e4661696c6564080114626c6f636b100144426c6f636b4e756d626572466f723c543e0001146572726f7268013444697370617463684572726f72000704410152616e646f6d6e6573732067656e65726174696f6e206661696c656420706f737369626c7920636f6d696e672066726f6d206d697373696e6720646174612061626f75742072656c617920636861696e047c54686520604576656e746020656e756d206f6620746869732070616c6c657451020c2870616c6c65745f646361147479706573144f72646572041c41737365744964011001081053656c6c14012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000124616d6f756e745f696e18011c42616c616e63650001386d696e5f616d6f756e745f6f757418011c42616c616e6365000114726f757465550201e8426f756e6465645665633c54726164653c417373657449643e2c20436f6e73745533323c4d41585f4e554d4245525f4f465f5452414445533e3e0000000c42757914012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000128616d6f756e745f6f757418011c42616c616e63650001346d61785f616d6f756e745f696e18011c42616c616e6365000114726f757465550201e8426f756e6465645665633c54726164653c417373657449643e2c20436f6e73745533323c4d41585f4e554d4245525f4f465f5452414445533e3e0001000055020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015902045300000400610201185665633c543e000059020c38687964726164785f74726169747318726f75746572145472616465041c417373657449640110000c0110706f6f6c5d020144506f6f6c547970653c417373657449643e00012061737365745f696e10011c4173736574496400012461737365745f6f757410011c4173736574496400005d020c38687964726164785f74726169747318726f7574657220506f6f6c54797065041c41737365744964011001100c58594b0000000c4c425000010028537461626c6573776170040010011c41737365744964000200204f6d6e69706f6f6c00030000610200000259020065020c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000124245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e000118726573756c749801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e2052657472795365741001107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e000118706572696f64100144426c6f636b4e756d626572466f723c543e00011c726574726965730801087538000304a0536574206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e38526574727943616e63656c6c65640801107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e000404ac43616e63656c206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e00050429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e0006043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e2c52657472794661696c65640801107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e0007085d0154686520676976656e207461736b2077617320756e61626c6520746f20626520726574726965642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b206f722074686572659c776173206e6f7420656e6f7567682077656967687420746f2072657363686564756c652069742e545065726d616e656e746c794f7665727765696768740801107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964690201404f7074696f6e3c5461736b4e616d653e000804f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e690204184f7074696f6e04045401040108104e6f6e6500000010536f6d6504000400000100006d020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320003040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616434014472656c61795f636861696e3a3a48617368000404e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f686173686902013c4f7074696f6e3c58636d486173683e000504b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657471020c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d657502015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696e7d0201204c6f636174696f6e00012c64657374696e6174696f6e7d0201204c6f636174696f6e00011c6d657373616765b102011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696e7d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e7365d9020120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696e7d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6efd0201404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696e7d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696e7d0201204c6f636174696f6e0001186173736574731d03013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6e7d0201204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374bd0201184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6e7d0201204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6e7d0201204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f727902012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6e6d03014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696e7d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696e7d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f717565726965727d0201204c6f636174696f6e0001506d617962655f61637475616c5f71756572696572fd0201404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6e7d0201204c6f636174696f6e000110636f7374bd0201184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6e7d0201204c6f636174696f6e000110636f7374bd0201184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6e7d0201204c6f636174696f6e000110636f7374bd0201184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e677d0201204c6f636174696f6e00011066656573bd020118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696e7d0201204c6f636174696f6e0001186173736574731d03013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747502102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72790201144572726f72000100144572726f720401146572726f72790201144572726f72000200007902100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d6974002700007d02102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72810201244a756e6374696f6e7300008102102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400850201484172633c5b4a756e6374696f6e3b20315d3e0001000858320400950201484172633c5b4a756e6374696f6e3b20325d3e0002000858330400990201484172633c5b4a756e6374696f6e3b20335d3e00030008583404009d0201484172633c5b4a756e6374696f6e3b20345d3e0004000858350400a10201484172633c5b4a756e6374696f6e3b20355d3e0005000858360400a50201484172633c5b4a756e6374696f6e3b20365d3e0006000858370400a90201484172633c5b4a756e6374696f6e3b20375d3e0007000858380400ad0201484172633c5b4a756e6374696f6e3b20385d3e000800008502000003010000008902008902102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e04003501010c7533320000002c4163636f756e744964333208011c6e6574776f726b8d0201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b8d0201444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b8d0201444f7074696f6e3c4e6574776f726b49643e00010c6b6579410101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040045010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c697479080108696449010118426f64794964000110706172744d010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400910201244e6574776f726b4964000900008d0204184f7074696f6e0404540191020108104e6f6e6500000010536f6d650400910200000100009102102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a00009502000003020000008902009902000003030000008902009d0200000304000000890200a10200000305000000890200a50200000306000000890200a90200000307000000890200ad0200000308000000890200b1020c2c73746167696e675f78636d0876340c58636d041043616c6c00000400b50201585665633c496e737472756374696f6e3c43616c6c3e3e0000b502000002b90200b9020c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400bd020118417373657473000000545265736572766541737365744465706f73697465640400bd020118417373657473000100585265636569766554656c65706f7274656441737365740400bd020118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365d9020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572fd0201404f7074696f6e3c4c6f636174696f6e3e000300345472616e736665724173736574080118617373657473bd02011841737365747300012c62656e65666963696172797d0201204c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473bd020118417373657473000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c0503014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040081020140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400090301445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574730d03012c417373657446696c74657200012c62656e65666963696172797d0201204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574730d03012c417373657446696c746572000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e000e003445786368616e676541737365740c0110676976650d03012c417373657446696c74657200011077616e74bd02011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574730d03012c417373657446696c74657200011c726573657276657d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574730d03012c417373657446696c746572000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f090301445175657279526573706f6e7365496e666f0001186173736574730d03012c417373657446696c74657200120030427579457865637574696f6e08011066656573c502011441737365740001307765696768745f6c696d69741903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400b102012458636d3c43616c6c3e0015002c536574417070656e6469780400b102012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473bd0201184173736574730001187469636b65747d0201204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400bd020118417373657473001c002c45787065637441737365740400bd020118417373657473001d00304578706563744f726967696e0400fd0201404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400dd0201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400f50201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f090301445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465783501010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f723501010c75333200013c6d696e5f63726174655f6d696e6f723501010c753332002200505265706f72745472616e736163745374617475730400090301445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400890201204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b910201244e6574776f726b496400012c64657374696e6174696f6e81020140496e746572696f724c6f636174696f6e00010c78636db102011c58636d3c28293e002600244c6f636b41737365740801146173736574c50201144173736574000120756e6c6f636b65727d0201204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574c502011441737365740001187461726765747d0201204c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574c502011441737365740001146f776e65727d0201204c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574c502011441737365740001186c6f636b65727d0201204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04007d0201204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69741903012c5765696768744c696d6974000130636865636b5f6f726967696efd0201404f7074696f6e3c4c6f636174696f6e3e002f0000bd02102c73746167696e675f78636d0876341461737365741841737365747300000400c10201285665633c41737365743e0000c102000002c50200c502102c73746167696e675f78636d08763414617373657414417373657400000801086964c902011c4173736574496400010c66756ecd02012c46756e676962696c6974790000c902102c73746167696e675f78636d0876341461737365741c41737365744964000004007d0201204c6f636174696f6e0000cd02102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c65040045010110753132380000002c4e6f6e46756e6769626c650400d10201344173736574496e7374616e636500010000d102102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400450101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400d50201205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000d502000003100000000800d9020c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400bd0201184173736574730001003c457865637574696f6e526573756c740400dd0201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f0400e5020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400f50201384d617962654572726f72436f646500050000dd0204184f7074696f6e04045401e1020108104e6f6e6500000010536f6d650400e1020000010000e1020000040810790200e5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e902045300000400f10201185665633c543e0000e9020c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e6465783501010c7533320001106e616d65ed020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d65ed020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f723501010c7533320001146d696e6f723501010c75333200011470617463683501010c7533320000ed020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f102000002e90200f5020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f720400f902018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f720400f902018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e00020000f9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000fd0204184f7074696f6e040454017d020108104e6f6e6500000010536f6d6504007d02000001000001030c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000005030c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000009030c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6e7d0201204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400000d03102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400bd0201184173736574730000001057696c6404001103012457696c644173736574000100001103102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f660801086964c902011c4173736574496400010c66756e1503013c57696c6446756e676962696c69747900010028416c6c436f756e74656404003501010c75333200020030416c6c4f66436f756e7465640c01086964c902011c4173736574496400010c66756e1503013c57696c6446756e676962696c697479000114636f756e743501010c753332000300001503102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000019030c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100001d03080c78636d3c56657273696f6e656441737365747300010c08563204002103013c76323a3a4d756c746941737365747300010008563304005503013c76333a3a4d756c74694173736574730003000856340400bd02012876343a3a417373657473000400002103100c78636d087632286d756c746961737365742c4d756c7469417373657473000004002503013c5665633c4d756c746941737365743e000025030000022903002903100c78636d087632286d756c74696173736574284d756c74694173736574000008010869642d03011c4173736574496400010c66756e4d03012c46756e676962696c69747900002d03100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400310301344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e000100003103100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72350301244a756e6374696f6e7300003503100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400390301204a756e6374696f6e0001000858320800390301204a756e6374696f6e0000390301204a756e6374696f6e0002000858330c00390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0003000858341000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0004000858351400390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0005000858361800390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0006000858371c00390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0007000858382000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e0000390301204a756e6374696f6e000800003903100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e04003501010c7533320000002c4163636f756e744964333208011c6e6574776f726b3d0301244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b3d0301244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b3d0301244e6574776f726b496400010c6b6579410101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040045010110753132380005002847656e6572616c4b65790400410301805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696445030118426f647949640001107061727449030120426f647950617274000800003d030c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400410301805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000041030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e000045030c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400410301805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e64657804003501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e0008002054726561737572790009000049030c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e743501010c753332000100204672616374696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6d3501010c75333200011464656e6f6d3501010c753332000400004d03100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040045010110753132380000002c4e6f6e46756e6769626c650400510301344173736574496e7374616e6365000100005103100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400450101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400d50201205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e000600005503100c78636d087633286d756c746961737365742c4d756c7469417373657473000004005903013c5665633c4d756c746941737365743e000059030000025d03005d03100c78636d087633286d756c74696173736574284d756c74694173736574000008010869646103011c4173736574496400010c66756e6503012c46756e676962696c69747900006103100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400290101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d000100006503100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040045010110753132380000002c4e6f6e46756e6769626c650400690301344173736574496e7374616e6365000100006903100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400450101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400d50201205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d000500006d03080c78636d4456657273696f6e65644c6f636174696f6e00010c08563204003103014476323a3a4d756c74694c6f636174696f6e00010008563304002901014476333a3a4d756c74694c6f636174696f6e00030008563404007d02013076343a3a4c6f636174696f6e0004000071030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d00007502011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c657475030c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001043c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000004c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657479030c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e7d0301484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f728503014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e7d0301484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e7d0301484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696e7d0301484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d03085c63756d756c75735f7072696d6974697665735f636f7265584167677265676174654d6573736167654f726967696e00010c104865726500000018506172656e740001001c5369626c696e670400810301185061726149640002000081030c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000850310346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c640004000089030c206f726d6c5f78636d186d6f64756c65144576656e740404540001041053656e74080108746f7d0201204c6f636174696f6e00011c6d657373616765b102011c58636d3c28293e0000048458434d206d6573736167652073656e742e205c5b746f2c206d6573736167655c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d030c306f726d6c5f78746f6b656e73186d6f64756c65144576656e74040454000104445472616e7366657272656441737365747310011873656e646572000130543a3a4163636f756e744964000118617373657473bd02011841737365747300010c666565c50201144173736574000110646573747d0201204c6f636174696f6e000004745472616e7366657272656420604173736574602077697468206665652e047c54686520604576656e746020656e756d206f6620746869732070616c6c657491030c4c6f726d6c5f756e6b6e6f776e5f746f6b656e73186d6f64756c65144576656e74000108244465706f73697465640801146173736574c5020114417373657400010c77686f7d0201204c6f636174696f6e000004404465706f73697420737563636573732e2457697468647261776e0801146173736574c5020114417373657400010c77686f7d0201204c6f636174696f6e00010444576974686472617720737563636573732e047c54686520604576656e746020656e756d206f6620746869732070616c6c657495030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000128404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c6573990301445665633c543a3a4163636f756e7449643e0000046c4e657720496e76756c6e657261626c65732077657265207365742e44496e76756c6e657261626c6541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640001047441206e657720496e76756c6e657261626c65207761732061646465642e4c496e76756c6e657261626c6552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400020470416e20496e76756c6e657261626c65207761732072656d6f7665642e504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000304a4546865206e756d626572206f6620646573697265642063616e6469646174657320776173207365742e404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0004046c5468652063616e64696461637920626f6e6420776173207365742e3843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0005045c41206e65772063616e646964617465206a6f696e65642e5043616e646964617465426f6e64557064617465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00060470426f6e64206f6620612063616e64696461746520757064617465642e4043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400070460412063616e646964617465207761732072656d6f7665642e4443616e6469646174655265706c616365640c010c6f6c64000130543a3a4163636f756e74496400010c6e6577000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804f4416e206163636f756e7420776173207265706c6163656420696e207468652063616e646964617465206c69737420627920616e6f74686572206f6e652e68496e76616c6964496e76756c6e657261626c65536b69707065640401286163636f756e745f6964000130543a3a4163636f756e7449640009085501416e206163636f756e742077617320756e61626c6520746f20626520616464656420746f2074686520496e76756c6e657261626c65732062656361757365207468657920646964206e6f742068617665206b657973c8726567697374657265642e204f7468657220496e76756c6e657261626c6573206d61792068617665206265656e207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574990300000200009d030c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a1030c4470616c6c65745f656d615f6f7261636c651870616c6c6574144576656e74040454000108404164646564546f57686974656c697374080118736f75726365f1010118536f757263650001186173736574739101014828417373657449642c204173736574496429000004884f7261636c652077617320616464656420746f207468652077686974656c6973742e5052656d6f76656446726f6d57686974656c697374080118736f75726365f1010118536f757263650001186173736574739101014828417373657449642c204173736574496429000104984f7261636c65207761732072656d6f7665642066726f6d207468652077686974656c6973742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a50308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000a903000002910100ad0308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e3501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d652d02016473705f72756e74696d653a3a52756e74696d65537472696e670000b10308306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0000b5030c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73b90301345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973c10301205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb903000002bd0300bd0300000408383800c1030000023800c5030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373c90301845065724469737061746368436c6173733c57656967687473506572436c6173733e0000c9030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401cd03000c01186e6f726d616ccd0301045400012c6f7065726174696f6e616ccd030104540001246d616e6461746f7279cd030104540000cd030c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963d10301384f7074696f6e3c5765696768743e0001246d61785f746f74616cd10301384f7074696f6e3c5765696768743e0001207265736572766564d10301384f7074696f6e3c5765696768743e0000d10304184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000d5030c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178d90301545065724469737061746368436c6173733c7533323e0000d9030c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000dd03082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c7536340000e103082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d652d02013452756e74696d65537472696e67000124696d706c5f6e616d652d02013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973e503011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000e503040c436f7704045401e903000400e903000000e903000002ed0300ed0300000408f1011000f1030c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574f5030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef9030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401fd03045300000400050401185665633c543e0000fd030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964f10101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e730104011c526561736f6e73000001040c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000504000002fd030009040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d04045300000400110401185665633c543e00000d040c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e74696669657201f1011c42616c616e63650118000801086964f1010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000011040000020d040015040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011904045300000400290401185665633c543e000019040c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e7408084964011d041c42616c616e636501180008010869641d0401084964000118616d6f756e7418011c42616c616e636500001d04083c687964726164785f72756e74696d654452756e74696d65486f6c64526561736f6e00010820507265696d61676504002104016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e000f00485374617465547269654d6967726174696f6e04002504019c70616c6c65745f73746174655f747269655f6d6967726174696f6e3a3a486f6c64526561736f6e0023000021040c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d6167650000000025040c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c657428486f6c64526561736f6e0001043c536c617368466f724d6967726174650000000029040000021904002d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013104045300000400350401185665633c543e000031040c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401901c42616c616e636501180008010869649001084964000118616d6f756e7418011c42616c616e63650000350400000231040039040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f6465617468080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c756545010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f757263650001504163636f756e7449644c6f6f6b75704f663c543e000110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c756545010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c697665080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c756545010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c080110646573740001504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686f990301445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656545010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e3d04014c41646a7573746d656e74446972656374696f6e00011464656c746145010128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d040c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000041040c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4504086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000049040c8070616c6c65745f7472616e73616374696f6e5f6d756c74695f7061796d656e741870616c6c65741043616c6c040454000114307365745f63757272656e637904012063757272656e6379100130417373657449644f663c543e000034a05365742073656c65637465642063757272656e637920666f7220676976656e206163636f756e742e0061015468697320616c6c6f777320746f2073657420612063757272656e637920666f7220616e206163636f756e7420696e20776869636820616c6c207472616e73616374696f6e20666565732077696c6c20626520706169642e7c4163636f756e742062616c616e63652063616e6e6f74206265207a65726f2e006d01496e2063617365206f662073756666696369656e742061737365742c207468652063686f73656e2063757272656e6379206d75737420626520696e20746865206c697374206f662061636365707465642063757272656e636965734101496e2063617365206f6620696e73756666696369656e742061737365742c207468652063686f73656e2063757272656e6379206d757374206861766520612058594b20706f6f6c207769746820444f540071015768656e2063757272656e6379206973207365742c206669786564206665652069732077697468647261776e2066726f6d20746865206163636f756e7420746f2070617920666f72207468652063757272656e6379206368616e676500f845564d206163636f756e747320617265206e6f7720616c6c6f77656420746f206368616e6765207468696572207061796d656e742063757272656e63792e00a8456d697473206043757272656e637953657460206576656e74207768656e207375636365737366756c2e306164645f63757272656e637908012063757272656e6379100130417373657449644f663c543e000114707269636561010114507269636500011cc841646420612063757272656e637920746f20746865206c697374206f662061636365707465642063757272656e636965732e00904f6e6c79206d656d6265722063616e20706572666f726d207468697320616374696f6e2e00410143757272656e6379206d757374206e6f7420626520616c72656164792061636365707465642e20436f72652061737365742069642063616e6e6f74206265206578706c696369746c792061646465642e00b0456d697473206043757272656e6379416464656460206576656e74207768656e207375636365737366756c2e3c72656d6f76655f63757272656e637904012063757272656e6379100130417373657449644f663c543e000218d452656d6f76652063757272656e63792066726f6d20746865206c697374206f6620737570706f727465642063757272656e63696573b44f6e6c792073656c6563746564206d656d626572732063616e20706572666f726d207468697320616374696f6e0074436f72652061737365742063616e6e6f742062652072656d6f7665642e00a0456d697473206043757272656e637952656d6f76656460207768656e207375636365737366756c2e5872657365745f7061796d656e745f63757272656e63790401286163636f756e745f6964000130543a3a4163636f756e744964000314bc52657365742063757272656e6379206f662074686520737065636966696564206163636f756e7420746f204844582e1501496620746865206163636f756e742069732045564d206163636f756e742c20746865207061796d656e742063757272656e637920697320726573657420746f20574554482eb84f6e6c792073656c6563746564206d656d626572732063616e20706572666f726d207468697320616374696f6e2e0090456d697473206043757272656e637953657460207768656e207375636365737366756c2e3c64697370617463685f7065726d697424011066726f6d0d02011048313630000108746f0d0201104831363000011476616c75654d040110553235360001106461746138011c5665633c75383e0001246761735f6c696d697430010c753634000120646561646c696e654d04011055323536000104760801087538000104723401104832353600010473340110483235360004105044697370617463682045564d207065726d69742ec101546865206d61696e20707572706f7365206f6620746869732066756e6374696f6e20697320746f20616c6c6f772045564d206163636f756e747320746f2070617920666f7220746865207472616e73616374696f6e2066656520696e206e6f6e2d6e61746976652063757272656e6379d0627920616c6c6f77696e67207468656d20746f2073656c662d6469737061746368207072652d7369676e6564207065726d69742ee05468652045564d20666565206973207061696420696e207468652063757272656e63792073657420666f7220746865206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d04083c7072696d69746976655f7479706573105532353600000400510401205b7536343b20345d0000510400000304000000300055040c8070616c6c65745f7472616e73616374696f6e5f6d756c74695f7061796d656e741870616c6c6574144572726f720404540001304c556e737570706f7274656443757272656e63790000048c53656c65637465642063757272656e6379206973206e6f7420737570706f727465642e2c5a65726f42616c616e63650001048c4163636f756e742062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e3c416c72656164794163636570746564000204dc43757272656e637920697320616c726561647920696e20746865206c697374206f662061636365707465642063757272656e636965732e4c436f726541737365744e6f74416c6c6f7765640003046d014974206973206e6f7420616c6c6f77656420746f2061646420436f72652041737365742061732061636365707465642063757272656e63792e20436f72652061737365742069732061636365707465642062792064657369676e2e245a65726f50726963650004047846616c6c6261636b2070726963652063616e6e6f74206265207a65726f2e5446616c6c6261636b50726963654e6f74466f756e640005047446616c6c6261636b20707269636520776173206e6f7420666f756e642e204f766572666c6f77000604344d617468206f766572666c6f775045766d4163636f756e744e6f74416c6c6f776564000704fc4974206973206e6f7420616c6c6f77656420746f206368616e6765207061796d656e742063757272656e6379206f6620616e2045564d206163636f756e742e4045766d5065726d6974457870697265640008044c45564d207065726d697420657870697265642e4045766d5065726d6974496e76616c69640009045845564d207065726d697420697320696e76616c69642e6c45766d5065726d697443616c6c457865637574696f6e4572726f72000a045c45564d207065726d69742063616c6c206661696c65642e5045766d5065726d697452756e6e65724572726f72000b045c45564d207065726d69742063616c6c206661696c65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5904083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500005d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401100453000004009d0101185665633c543e00006104083c70616c6c65745f74726561737572792c5370656e64537461747573142441737365744b696e64019030417373657442616c616e636501182c42656e656669636961727901002c426c6f636b4e756d6265720110245061796d656e74496401900018012861737365745f6b696e6490012441737365744b696e64000118616d6f756e74180130417373657442616c616e636500012c62656e656669636961727900012c42656e656669636961727900012876616c69645f66726f6d10012c426c6f636b4e756d6265720001246578706972655f617410012c426c6f636b4e756d6265720001187374617475736504015c5061796d656e7453746174653c5061796d656e7449643e00006504083c70616c6c65745f7472656173757279305061796d656e745374617465040849640190010c1c50656e64696e6700000024417474656d7074656404010869649001084964000100184661696c65640002000069040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001243470726f706f73655f7370656e6408011476616c75654501013c42616c616e63654f663c542c20493e00012c62656e65666963696172790001504163636f756e7449644c6f6f6b75704f663c543e0000409850757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c73610141206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642eb049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e003823232320436f6d706c6578697479182d204f28312900242323204576656e747300a0456d697473205b604576656e743a3a50726f706f736564605d206966207375636365737366756c2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f69643501013450726f706f73616c496e64657800013c6052656a65637420612070726f706f736564207370656e642e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c7394546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e003823232320436f6d706c6578697479182d204f28312900242323204576656e747300a0456d697473205b604576656e743a3a52656a6563746564605d206966207375636365737366756c2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f69643501013450726f706f73616c496e6465780002444c417070726f766520612070726f706f73616c2e00482323204469737061746368204f726967696e00884d757374206265205b60436f6e6669673a3a417070726f76654f726967696e605d2e002823232044657461696c73004d0141742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c646465706f7369742077696c6c2062652072657475726e65642e003823232320436f6d706c657869747920202d204f2831292e00242323204576656e747300a44e6f206576656e74732061726520656d69747465642066726f6d20746869732064697370617463682e2c7370656e645f6c6f63616c080118616d6f756e744501013c42616c616e63654f663c542c20493e00012c62656e65666963696172790001504163636f756e7449644c6f6f6b75704f663c543e000344b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e00482323204469737061746368204f726967696e0045014d757374206265205b60436f6e6669673a3a5370656e644f726967696e605d207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e002c2323232044657461696c7345014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e003823232320506172616d657465727341012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e00242323204576656e747300b4456d697473205b604576656e743a3a5370656e64417070726f766564605d206966207375636365737366756c2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f69643501013450726f706f73616c496e6465780004542d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c7300c0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e003823232320506172616d6574657273a02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c003823232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c730028232323204572726f727345012d205b604572726f723a3a50726f706f73616c4e6f74417070726f766564605d3a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686551012020617070726f76616c2071756575652c20692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468655901202070726f706f73616c20646f6573206e6f7420657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f766564542020696e2074686520666972737420706c6163652e147370656e6410012861737365745f6b696e64900144426f783c543a3a41737365744b696e643e000118616d6f756e7445010150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279000178426f783c42656e65666963696172794c6f6f6b75704f663c542c20493e3e00012876616c69645f66726f6dcd0101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000568b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e00482323204469737061746368204f726967696e001d014d757374206265205b60436f6e6669673a3a5370656e644f726967696e605d207769746820746865206053756363657373602076616c7565206265696e67206174206c65617374550160616d6f756e7460206f66206061737365745f6b696e646020696e20746865206e61746976652061737365742e2054686520616d6f756e74206f66206061737365745f6b696e646020697320636f6e766572746564d4666f7220617373657274696f6e207573696e6720746865205b60436f6e6669673a3a42616c616e6365436f6e766572746572605d2e002823232044657461696c7300490143726561746520616e20617070726f766564207370656e6420666f72207472616e7366657272696e6720612073706563696669632060616d6f756e7460206f66206061737365745f6b696e646020746f2061610164657369676e617465642062656e65666963696172792e20546865207370656e64206d75737420626520636c61696d6564207573696e672074686520607061796f75746020646973706174636861626c652077697468696e74746865205b60436f6e6669673a3a5061796f7574506572696f64605d2e003823232320506172616d657465727315012d206061737365745f6b696e64603a20416e20696e64696361746f72206f662074686520737065636966696320617373657420636c61737320746f206265207370656e742e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602eb82d206062656e6566696369617279603a205468652062656e6566696369617279206f6620746865207370656e642e55012d206076616c69645f66726f6d603a2054686520626c6f636b206e756d6265722066726f6d20776869636820746865207370656e642063616e20626520636c61696d65642e2049742063616e20726566657220746f1901202074686520706173742069662074686520726573756c74696e67207370656e6420686173206e6f74207965742065787069726564206163636f7264696e6720746f20746865450120205b60436f6e6669673a3a5061796f7574506572696f64605d2e20496620604e6f6e65602c20746865207370656e642063616e20626520636c61696d656420696d6d6564696174656c792061667465722c2020617070726f76616c2e00242323204576656e747300c8456d697473205b604576656e743a3a41737365745370656e64417070726f766564605d206966207375636365737366756c2e187061796f7574040114696e6465781001285370656e64496e64657800064c38436c61696d2061207370656e642e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c730055015370656e6473206d75737420626520636c61696d65642077697468696e20736f6d652074656d706f72616c20626f756e64732e2041207370656e64206d617920626520636c61696d65642077697468696e206f6e65d45b60436f6e6669673a3a5061796f7574506572696f64605d2066726f6d20746865206076616c69645f66726f6d6020626c6f636b2e5501496e2063617365206f662061207061796f7574206661696c7572652c20746865207370656e6420737461747573206d75737420626520757064617465642077697468207468652060636865636b5f73746174757360dc646973706174636861626c65206265666f7265207265747279696e672077697468207468652063757272656e742066756e6374696f6e2e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e74730090456d697473205b604576656e743a3a50616964605d206966207375636365737366756c2e30636865636b5f737461747573040114696e6465781001285370656e64496e64657800074c2901436865636b2074686520737461747573206f6620746865207370656e6420616e642072656d6f76652069742066726f6d207468652073746f726167652069662070726f6365737365642e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c730001015468652073746174757320636865636b20697320612070726572657175697369746520666f72207265747279696e672061206661696c6564207061796f75742e490149662061207370656e64206861732065697468657220737563636565646564206f7220657870697265642c2069742069732072656d6f7665642066726f6d207468652073746f726167652062792074686973ec66756e6374696f6e2e20496e207375636820696e7374616e6365732c207472616e73616374696f6e20666565732061726520726566756e6465642e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e747300f8456d697473205b604576656e743a3a5061796d656e744661696c6564605d20696620746865207370656e64207061796f757420686173206661696c65642e0101456d697473205b604576656e743a3a5370656e6450726f636573736564605d20696620746865207370656e64207061796f75742068617320737563636565642e28766f69645f7370656e64040114696e6465781001285370656e64496e6465780008407c566f69642070726576696f75736c7920617070726f766564207370656e642e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c73001d0141207370656e6420766f6964206973206f6e6c7920706f737369626c6520696620746865207061796f757420686173206e6f74206265656e20617474656d70746564207965742e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e747300c0456d697473205b604576656e743a3a41737365745370656e64566f69646564605d206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d0408346672616d655f737570706f72742050616c6c6574496400000400f101011c5b75383b20385d000071040c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900013070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104ac4e6f2070726f706f73616c2c20626f756e7479206f72207370656e64206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e584661696c6564546f436f6e7665727442616c616e636500050451015468652062616c616e6365206f6620746865206173736574206b696e64206973206e6f7420636f6e7665727469626c6520746f207468652062616c616e6365206f6620746865206e61746976652061737365742e305370656e6445787069726564000604b0546865207370656e6420686173206578706972656420616e642063616e6e6f7420626520636c61696d65642e2c4561726c795061796f7574000704a4546865207370656e64206973206e6f742079657420656c696769626c6520666f72207061796f75742e40416c7265616479417474656d707465640008049c546865207061796d656e742068617320616c7265616479206265656e20617474656d707465642e2c5061796f75744572726f72000904cc54686572652077617320736f6d65206973737565207769746820746865206d656368616e69736d206f66207061796d656e742e304e6f74417474656d70746564000a04a4546865207061796f757420776173206e6f742079657420617474656d707465642f636c61696d65642e30496e636f6e636c7573697665000b04c4546865207061796d656e7420686173206e656974686572206661696c6564206e6f7220737563636565646564207965742e04784572726f7220666f72207468652074726561737572792070616c6c65742e75040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c737904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578dc010c75313600011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c737904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e59070154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c737904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79040000027d04007d04083c687964726164785f72756e74696d652c52756e74696d6543616c6c0001e41853797374656d0400b50301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0001002454696d657374616d700400f50301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003002042616c616e6365730400390401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0007005c4d756c74695472616e73616374696f6e5061796d656e740400490401f10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74695472616e73616374696f6e5061796d656e742c2052756e74696d653e00cb002054726561737572790400690401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e000b001c5574696c6974790400750401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e000d0020507265696d6167650400810401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e000f00204964656e746974790400850401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0011002444656d6f637261637904002d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e00130024456c656374696f6e730400450501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e0015001c436f756e63696c04004d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e00170048546563686e6963616c436f6d6d69747465650400510501dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e00190010546970730400550501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e001b001450726f78790400590501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e001d00204d756c74697369670400610501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e001f001c556e69717565730400690501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e002000485374617465547269654d6967726174696f6e0400710501dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374617465547269654d6967726174696f6e2c2052756e74696d653e00230034417373657452656769737472790400890501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417373657452656769737472792c2052756e74696d653e00330018436c61696d730400990501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e0035003847656e65736973486973746f72790400a10501cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c47656e65736973486973746f72792c2052756e74696d653e003700204f6d6e69706f6f6c0400a50501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f6d6e69706f6f6c2c2052756e74696d653e003b00405472616e73616374696f6e50617573650400ad0501d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5472616e73616374696f6e50617573652c2052756e74696d653e003c00184475737465720400b10501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4475737465722c2052756e74696d653e003d004c4f6d6e69706f6f6c57617265686f7573654c4d0400b50501e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f6d6e69706f6f6c57617265686f7573654c4d2c2052756e74696d653e003e005c4f6d6e69706f6f6c4c69717569646974794d696e696e670400b90501f10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f6d6e69706f6f6c4c69717569646974794d696e696e672c2052756e74696d653e003f000c4f54430400bd0501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f54432c2052756e74696d653e0040003843697263756974427265616b65720400c10501cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43697263756974427265616b65722c2052756e74696d653e00410018526f757465720400c50501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526f757465722c2052756e74696d653e0043002c44796e616d6963466565730400cd0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d6963466565732c2052756e74696d653e0044001c5374616b696e670400d10501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e00450028537461626c65737761700400d50501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c537461626c65737761702c2052756e74696d653e00460014426f6e64730400d90501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f6e64732c2052756e74696d653e004700384f7463536574746c656d656e74730400dd0501cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7463536574746c656d656e74732c2052756e74696d653e0048000c4c42500400e10501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c42502c2052756e74696d653e0049000c58594b0400e90501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58594b2c2052756e74696d653e004a0024526566657272616c730400ed0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526566657272616c732c2052756e74696d653e004b0018546f6b656e730400f10501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e732c2052756e74696d653e004d002843757272656e636965730400f50501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43757272656e636965732c2052756e74696d653e004f001c56657374696e670400f90501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e0051000c45564d0400010601a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e005a0020457468657265756d0400110601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e005c002c45564d4163636f756e74730400390601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d4163636f756e74732c2052756e74696d653e005d004858594b4c69717569646974794d696e696e6704003d0601dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58594b4c69717569646974794d696e696e672c2052756e74696d653e005f003858594b57617265686f7573654c4d0400410601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58594b57617265686f7573654c4d2c2052756e74696d653e0060003852656c6179436861696e496e666f0400450601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52656c6179436861696e496e666f2c2052756e74696d653e00c9000c4443410400490601a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4443412c2052756e74696d653e004200245363686564756c65720400550601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e0005003c50617261636861696e53797374656d0400590601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0067003450617261636861696e496e666f04008d0601c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0069002c506f6c6b61646f7458636d0400910601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e006b002843756d756c757358636d04002d0701bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e006d00304d65737361676551756575650400310701c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e0072001c4f726d6c58636d0400350701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f726d6c58636d2c2052756e74696d653e0087001c58546f6b656e730400390701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58546f6b656e732c2052756e74696d653e00890044436f6c6c61746f7253656c656374696f6e0400450701d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e00a3001c53657373696f6e0400490701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e00a50024456d614f7261636c650400550701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456d614f7261636c652c2052756e74696d653e00ca000081040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657338011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736834011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736834011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736834011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e38656e737572655f75706461746564040118686173686573110201305665633c543a3a486173683e00040cc4456e7375726520746861742074686520612062756c6b206f66207072652d696d616765732069732075706772616465642e003d015468652063616c6c65722070617973206e6f20666565206966206174206c6561737420393025206f66207072652d696d616765732077657265207375636365737366756c6c7920757064617465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85040c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000158346164645f72656769737472617204011c6163636f756e740001504163636f756e7449644c6f6f6b75704f663c543e00001c7841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e307365745f6964656e74697479040110696e666f8904016c426f783c543a3a4964656e74697479496e666f726d6174696f6e3e000128290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e207365745f7375627304011073756273110501645665633c28543a3a4163636f756e7449642c2044617461293e0002248c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e38636c6561725f6964656e746974790003203901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e44726571756573745f6a756467656d656e740801247265675f696e64657835010138526567697374726172496e64657800011c6d61785f6665654501013042616c616e63654f663c543e00044094526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005286843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e1c7365745f666565080114696e64657835010138526567697374726172496e64657800010c6665654501013042616c616e63654f663c543e00061c1901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e387365745f6163636f756e745f6964080114696e64657835010138526567697374726172496e64657800010c6e65770001504163636f756e7449644c6f6f6b75704f663c543e00071cbc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e287365745f6669656c6473080114696e64657835010138526567697374726172496e6465780001186669656c6473300129013c543a3a4964656e74697479496e666f726d6174696f6e206173204964656e74697479496e666f726d6174696f6e50726f76696465723e3a3a0a4669656c64734964656e74696669657200081ca853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e4470726f766964655f6a756467656d656e741001247265675f696e64657835010138526567697374726172496e6465780001187461726765740001504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e741905015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747934011c543a3a4861736800093cb850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e5d012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f726d6174696f6e50726f7669646572605d20666f72207468617420746865206a756467656d656e742069732c202070726f76696465642e00b04e6f74653a204a756467656d656e747320646f206e6f74206170706c7920746f206120757365726e616d652e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e346b696c6c5f6964656e746974790401187461726765740001504163636f756e7449644c6f6f6b75704f663c543e000a30410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e1c6164645f73756208010c7375620001504163636f756e7449644c6f6f6b75704f663c543e000110646174619504011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c7375620001504163636f756e7449644c6f6f6b75704f663c543e000110646174619504011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c7375620001504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e586164645f757365726e616d655f617574686f726974790c0124617574686f726974790001504163636f756e7449644c6f6f6b75704f663c543e00011873756666697838011c5665633c75383e000128616c6c6f636174696f6e10010c753332000f10550141646420616e20604163636f756e744964602077697468207065726d697373696f6e20746f206772616e7420757365726e616d65732077697468206120676976656e20607375666669786020617070656e6465642e00590154686520617574686f726974792063616e206772616e7420757020746f2060616c6c6f636174696f6e6020757365726e616d65732e20546f20746f7020757020746865697220616c6c6f636174696f6e2c2074686579490173686f756c64206a75737420697373756520286f7220726571756573742076696120676f7665726e616e6365292061206e657720606164645f757365726e616d655f617574686f72697479602063616c6c2e6472656d6f76655f757365726e616d655f617574686f72697479040124617574686f726974790001504163636f756e7449644c6f6f6b75704f663c543e001004c452656d6f76652060617574686f72697479602066726f6d2074686520757365726e616d6520617574686f7269746965732e407365745f757365726e616d655f666f720c010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e000120757365726e616d6538011c5665633c75383e0001247369676e61747572651d0501704f7074696f6e3c543a3a4f6666636861696e5369676e61747572653e0011240d015365742074686520757365726e616d6520666f72206077686f602e204d7573742062652063616c6c6564206279206120757365726e616d6520617574686f726974792e00550154686520617574686f72697479206d757374206861766520616e2060616c6c6f636174696f6e602e2055736572732063616e20656974686572207072652d7369676e20746865697220757365726e616d6573206f7248616363657074207468656d206c617465722e003c557365726e616d6573206d7573743ad820202d204f6e6c7920636f6e7461696e206c6f776572636173652041534349492063686172616374657273206f72206469676974732e350120202d205768656e20636f6d62696e656420776974682074686520737566666978206f66207468652069737375696e6720617574686f72697479206265205f6c657373207468616e5f207468656020202020604d6178557365726e616d654c656e677468602e3c6163636570745f757365726e616d65040120757365726e616d65a4012c557365726e616d653c543e0012084d01416363657074206120676976656e20757365726e616d65207468617420616e2060617574686f7269747960206772616e7465642e205468652063616c6c206d75737420696e636c756465207468652066756c6c88757365726e616d652c20617320696e2060757365726e616d652e737566666978602e5c72656d6f76655f657870697265645f617070726f76616c040120757365726e616d65a4012c557365726e616d653c543e00130c610152656d6f766520616e206578706972656420757365726e616d6520617070726f76616c2e2054686520757365726e616d652077617320617070726f76656420627920616e20617574686f7269747920627574206e657665725501616363657074656420627920746865207573657220616e64206d757374206e6f77206265206265796f6e64206974732065787069726174696f6e2e205468652063616c6c206d75737420696e636c756465207468659c66756c6c20757365726e616d652c20617320696e2060757365726e616d652e737566666978602e507365745f7072696d6172795f757365726e616d65040120757365726e616d65a4012c557365726e616d653c543e0014043101536574206120676976656e20757365726e616d6520617320746865207072696d6172792e2054686520757365726e616d652073686f756c6420696e636c75646520746865207375666669782e6072656d6f76655f64616e676c696e675f757365726e616d65040120757365726e616d65a4012c557365726e616d653c543e001508550152656d6f7665206120757365726e616d65207468617420636f72726573706f6e647320746f20616e206163636f756e742077697468206e6f206964656e746974792e20457869737473207768656e20612075736572c067657473206120757365726e616d6520627574207468656e2063616c6c732060636c6561725f6964656e74697479602e04704964656e746974792070616c6c6574206465636c61726174696f6e2e89040c3c70616c6c65745f6964656e74697479186c6567616379304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c8d040190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617995040110446174610001146c6567616c950401104461746100010c776562950401104461746100011072696f749504011044617461000114656d61696c950401104461746100013c7067705f66696e6765727072696e740d0501404f7074696f6e3c5b75383b2032305d3e000114696d616765950401104461746100011c74776974746572950401104461746100008d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019104045300000400090501185665633c543e0000910400000408950495040095040c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e6500000010526177300400990400000100105261773104009d040000020010526177320400a1040000030010526177330400a5040000040010526177340400480000050010526177350400a9040000060010526177360400ad040000070010526177370400b1040000080010526177380400f1010000090010526177390400b50400000a001452617731300400b90400000b001452617731310400bd0400000c001452617731320400c10400000d001452617731330400c50400000e001452617731340400c90400000f001452617731350400cd04000010001452617731360400d502000011001452617731370400d104000012001452617731380400d504000013001452617731390400d9040000140014526177323004004101000015001452617732310400dd04000016001452617732320400e104000017001452617732330400e504000018001452617732340400e904000019001452617732350400ed0400001a001452617732360400f10400001b001452617732370400f50400001c001452617732380400f90400001d001452617732390400fd0400001e001452617733300400010500001f001452617733310400050500002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c5368615468726565323536040004000025000099040000030000000008009d04000003010000000800a104000003020000000800a504000003030000000800a904000003050000000800ad04000003060000000800b104000003070000000800b504000003090000000800b9040000030a0000000800bd040000030b0000000800c1040000030c0000000800c5040000030d0000000800c9040000030e0000000800cd040000030f0000000800d104000003110000000800d504000003120000000800d904000003130000000800dd04000003150000000800e104000003160000000800e504000003170000000800e904000003180000000800ed04000003190000000800f1040000031a0000000800f5040000031b0000000800f9040000031c0000000800fd040000031d000000080001050000031e000000080005050000031f000000080009050000029104000d0504184f7074696f6e0404540141010108104e6f6e6500000010536f6d6504004101000001000011050000021505001505000004080095040019050c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f7573000600001d0504184f7074696f6e0404540121050108104e6f6e6500000010536f6d650400210500000100002105082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040025050148656432353531393a3a5369676e61747572650000001c53723235353139040025050148737232353531393a3a5369676e617475726500010014456364736104002905014065636473613a3a5369676e617475726500020000250500000340000000080029050000034100000008002d050c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001501c70726f706f736508012070726f706f73616c31050140426f756e64656443616c6c4f663c543e00011476616c75654501013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616c3501012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e6465783501013c5265666572656e64756d496e646578000110766f7465b001644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616c31050140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c31050140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c31050140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f6861736834011c543a3a48617368000134766f74696e675f706572696f64100144426c6f636b4e756d626572466f723c543e00011464656c6179100144426c6f636b4e756d626572466f723c543e0007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f6861736834011c543a3a48617368000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e6465783501013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746f0001504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e3d050128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b0401187461726765740001504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f74650801187461726765740001504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f6861736834011c543a3a4861736800013c6d617962655f7265665f696e646578cd01015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e6465783501012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572b801344d657461646174614f776e65720001286d617962655f686173684105013c4f7074696f6e3c543a3a486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e44666f7263655f72656d6f76655f766f746508011874617267657400016c63726174653a3a4163636f756e7449644c6f6f6b75704f663c543e000114696e64657810017463726174653a3a74797065733a3a5265666572656e64756d496e64657800133cb8416c6c6f7720746f20666f7263652072656d6f7665206120766f746520666f722061207265666572656e64756d2e00290153616d65206173206072656d6f76655f6f746865725f766f7465602c20657863657074207468652073636f7065206973206f766572726964656e20627920666f7263656420666c61672ef4546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060566f746552656d6f76616c4f726967696e602e00ac4f6e6c7920616c6c6f77656420696620746865207265666572656e64756d2069732066696e69736865642e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e310510346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564080454017d040448013505010c184c656761637904011068617368340124483a3a4f757470757400000018496e6c696e65040039050134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368340124483a3a4f757470757400010c6c656e10010c7533320002000035050c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000039050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00003d050c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000410504184f7074696f6e04045401340108104e6f6e6500000010536f6d65040034000001000045050c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f746573990301445665633c543a3a4163636f756e7449643e00011476616c75654501013042616c616e63654f663c543e00004c5901566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746fe07365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e005d0155706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069734d0172657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e004c5468652060766f746573602073686f756c643a4420202d206e6f7420626520656d7074792e550120202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e6411012020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e0049014966206076616c756560206973206d6f7265207468616e206077686f60277320667265652062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e6700550149742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865a86c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e3072656d6f76655f766f7465720001146c52656d6f766520606f726967696e60206173206120766f7465722e00b8546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e00fc546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e743501010c75333200023c11015375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e005d01416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702ccc6f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e67005d014576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d5901746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e000901546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e34232320436f6d706c6578697479a44f2843202b206c6f672843292920776865726520432069732063616e6469646174655f636f756e742e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e674905012852656e6f756e63696e670003504d0152656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c3c6f7574636f6d65732065786973743a0049012d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973f02020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e61012d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e648c20206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e55012d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e2069735501202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e6101202053696d696c617220746f205b6072656d6f76655f6d656d626572605d2853656c663a3a72656d6f76655f6d656d626572292c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865795901202061726520696d6d6564696174656c7920757365642e20496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c207468653420206e65787420726f756e642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732ee05468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e0034232320436f6d706c6578697479dc20202d2052656e6f756e63696e673a3a43616e64696461746528636f756e74293a204f28636f756e74202b206c6f6728636f756e7429297020202d2052656e6f756e63696e673a3a4d656d6265723a204f2831297820202d2052656e6f756e63696e673a3a52756e6e657255703a204f2831293472656d6f76655f6d656d6265720c010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64200110626f6f6c000138726572756e5f656c656374696f6e200110626f6f6c000440590152656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f667c746865206f7574676f696e67206d656d62657220697320736c61736865642e005501496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c616365732074686555016f7574676f696e67206d656d6265722e204f74686572776973652c2069662060726572756e5f656c656374696f6e60206973206074727565602c2061206e65772070687261676d656e20656c656374696f6e2069737c737461727465642c20656c73652c206e6f7468696e672068617070656e732e00590149662060736c6173685f626f6e64602069732073657420746f20747275652c2074686520626f6e64206f6620746865206d656d626572206265696e672072656d6f76656420697320736c61736865642e20456c73652c3c69742069732072657475726e65642e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0041014e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e0034232320436f6d706c657869747905012d20436865636b2064657461696c73206f662072656d6f76655f616e645f7265706c6163655f6d656d626572282920616e6420646f5f70687261676d656e28292e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c7533320005244501436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865ac6465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e0001015468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0034232320436f6d706c65786974798c2d20436865636b2069735f646566756e63745f766f74657228292064657461696c732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4905086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e64696461746504003501010c753332000200004d050c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273990301445665633c543a3a4163636f756e7449643e0001147072696d65010101504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616c7d04017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c643501012c4d656d626572436f756e7400012070726f706f73616c7d04017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c34011c543a3a48617368000114696e6465783501013450726f706f73616c496e64657800011c617070726f7665200110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736834011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736834011c543a3a48617368000114696e6465783501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e643501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273990301445665633c543a3a4163636f756e7449643e0001147072696d65010101504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616c7d04017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c643501012c4d656d626572436f756e7400012070726f706f73616c7d04017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e643501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c34011c543a3a48617368000114696e6465783501013450726f706f73616c496e64657800011c617070726f7665200110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736834011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736834011c543a3a48617368000114696e6465783501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e643501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55050c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e38011c5665633c75383e00010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e00004059015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c6578697479982d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e272c726574726163745f7469700401106861736834011c543a3a486173680001405101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e0034232320436f6d706c6578697479202d20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e1c7469705f6e65770c0118726561736f6e38011c5665633c75383e00010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c75654501013c42616c616e63654f663c542c20493e00024cf04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c657869747921012d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052600c7469700801106861736834011c543a3a486173680001247469705f76616c75654501013c42616c616e63654f663c542c20493e000354b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e0034232320436f6d706c657869747961012d20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572745901202074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e24636c6f73655f7469700401106861736834011c543a3a486173680004345c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e0034232320436f6d706c65786974795d012d203a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460590120206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e94202074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e24736c6173685f7469700401106861736834011c543a3a486173680005289452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e0034232320436f6d706c65786974791c2d204f2831292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59050c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c0001504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970655d0501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c65676174650001504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c65676174650001504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e646578dc010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e65720001504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f787954797065000114696e646578dc010c75313600011868656967687435010144426c6f636b4e756d626572466f723c543e0001246578745f696e6465783501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c0001504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c0001504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c65676174650001504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c65676174650001504163636f756e7449644c6f6f6b75704f663c543e0001107265616c0001504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970655d0501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0504184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000061050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573990301445665633c543a3a4163636f756e7449643e00011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573990301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74650501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573990301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74650501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573990301445665633c543a3a4163636f756e7449643e00012474696d65706f696e74e4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e650504184f7074696f6e04045401e40108104e6f6e6500000010536f6d650400e4000001000069050c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016818637265617465080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400011461646d696e0001504163636f756e7449644c6f6f6b75704f663c543e000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001146f776e65720001504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400011c7769746e6573736d05013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001146f776e65720001504163636f756e7449644c6f6f6b75704f663c543e00032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d496400012c636865636b5f6f776e6572010101704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00043c5844657374726f7920612073696e676c65206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964000110646573740001504163636f756e7449644c6f6f6b75704f663c543e000544c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00b454686973207265736574732074686520617070726f766564206163636f756e74206f6620746865206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001146974656d73f001385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e65720001504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001186973737565720001504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e0001504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a65720001504163636f756e7449644c6f6f6b75704f663c543e000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d496400012064656c65676174650001504163636f756e7449644c6f6f6b75704f663c543e000d381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e004d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265f865697468657220746865206f776e6572206f662074686520606974656d60206f72207468652061646d696e206f662074686520636f6c6c656374696f6e2e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e001901496d706f7274616e74204e4f54453a205468652060617070726f76656460206163636f756e7420676574732072657365742061667465722065616368207472616e736665722e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465010101704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001146f776e65720001504163636f756e7449644c6f6f6b75704f663c543e0001186973737565720001504163636f756e7449644c6f6f6b75704f663c543e00011461646d696e0001504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a65720001504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c00012469735f66726f7a656e200110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579f8016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565fc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579f8016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6ef4015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001147072696365f4015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572010101704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00182c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520617373657420606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e18013c543a3a436f6c6c656374696f6e49640001106974656d180124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e001924a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d050c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d733501010c7533320001386974656d5f6d65746164617461733501010c753332000128617474726962757465733501010c753332000071050c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65741043616c6c04045400011858636f6e74726f6c5f6175746f5f6d6967726174696f6e0401306d617962655f636f6e6669677505015c4f7074696f6e3c4d6967726174696f6e4c696d6974733e00000c80436f6e74726f6c20746865206175746f6d61746963206d6967726174696f6e2e000d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205b60436f6e6669673a3a436f6e74726f6c4f726967696e605d2e40636f6e74696e75655f6d6967726174650c01186c696d6974737905013c4d6967726174696f6e4c696d69747300013c7265616c5f73697a655f757070657210010c7533320001307769746e6573735f7461736b7d0501404d6967726174696f6e5461736b3c543e000154b8436f6e74696e756520746865206d6967726174696f6e20666f722074686520676976656e20606c696d697473602e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c2063616e20626520616e79207369676e6564206163636f756e742e005d0154686973207472616e73616374696f6e20686173204e4f204d4f4e455441525920494e43454e54495645532e2063616c6c696e672069742077696c6c206e6f742072657761726420616e796f6e652e20416c626569742cec55706f6e207375636365737366756c20657865637574696f6e2c20746865207472616e73616374696f6e206665652069732072657475726e65642e0041015468652028706f74656e7469616c6c79206f7665722d657374696d6174656429206f66207468652062797465206c656e677468206f6620616c6c2074686520646174612072656164206d757374206265590170726f766964656420666f722075702d66726f6e74206665652d7061796d656e7420616e64207765696768696e672e20496e20657373656e63652c207468652063616c6c65722069732067756172616e746565696e6749017468617420657865637574696e67207468652063757272656e7420604d6967726174696f6e5461736b6020776974682074686520676976656e20606c696d697473602077696c6c206e6f742065786365656494607265616c5f73697a655f757070657260206279746573206f66207265616420646174612e00450154686520607769746e6573735f7461736b60206973206d6572656c7920612068656c70657220746f2070726576656e74207468652063616c6c65722066726f6d206265696e6720736c6173686564206f725d0167656e6572616c6c7920747269676765722061206d6967726174696f6e2074686174207468657920646f206e6f7420696e74656e642e205468697320706172616d65746572206973206a7573742061206d6573736167653d0166726f6d2063616c6c65722c20736179696e67207468617420746865792062656c696576656420607769746e6573735f7461736b602077617320746865206c617374207374617465206f662074686559016d6967726174696f6e2c20616e642074686579206f6e6c79207769736820666f72207468656972207472616e73616374696f6e20746f20646f20616e797468696e672c206966207468697320617373756d7074696f6e1101686f6c64732e20496e206361736520607769746e6573735f7461736b6020646f6573206e6f74206d617463682c20746865207472616e73616374696f6e206661696c732e0039014261736564206f6e2074686520646f63756d656e746174696f6e206f66205b604d6967726174696f6e5461736b3a3a6d6967726174655f756e74696c5f65786861757374696f6e605d2c207468654d017265636f6d6d656e64656420776179206f6620646f696e67207468697320697320746f2070617373206120606c696d6974602074686174206f6e6c7920626f756e64732060636f756e74602c206173207468659c6073697a6560206c696d69742063616e20616c77617973206265206f7665727772697474656e2e486d6967726174655f637573746f6d5f746f700801106b657973c10301305665633c5665633c75383e3e0001307769746e6573735f73697a6510010c75333200021009014d69677261746520746865206c697374206f6620746f70206b65797320627920697465726174696e672065616368206f66207468656d206f6e65206279206f6e652e0055015468697320646f6573206e6f74206166666563742074686520676c6f62616c206d6967726174696f6e2070726f6365737320747261636b657220285b604d6967726174696f6e50726f63657373605d292c20616e64fc73686f756c64206f6e6c79206265207573656420696e206361736520616e79206b65797320617265206c6566746f7665722064756520746f2061206275672e506d6967726174655f637573746f6d5f6368696c640c0110726f6f7438011c5665633c75383e0001286368696c645f6b657973c10301305665633c5665633c75383e3e000128746f74616c5f73697a6510010c75333200031811014d69677261746520746865206c697374206f66206368696c64206b65797320627920697465726174696e672065616368206f66207468656d206f6e65206279206f6e652e000d01416c6c206f662074686520676976656e206368696c64206b657973206d7573742062652070726573656e7420756e646572206f6e6520606368696c645f726f6f74602e0055015468697320646f6573206e6f74206166666563742074686520676c6f62616c206d6967726174696f6e2070726f6365737320747261636b657220285b604d6967726174696f6e50726f63657373605d292c20616e64fc73686f756c64206f6e6c79206265207573656420696e206361736520616e79206b65797320617265206c6566746f7665722064756520746f2061206275672e547365745f7369676e65645f6d61785f6c696d6974730401186c696d6974737905013c4d6967726174696f6e4c696d697473000404b853657420746865206d6178696d756d206c696d6974206f6620746865207369676e6564206d6967726174696f6e2e48666f7263655f7365745f70726f677265737308013070726f67726573735f746f708105013450726f67726573734f663c543e00013870726f67726573735f6368696c648105013450726f67726573734f663c543e000524c8466f72636566756c6c7920736574207468652070726f6772657373207468652072756e6e696e67206d6967726174696f6e2e005d0154686973206973206f6e6c792075736566756c20696e206f6e6520636173653a20746865206e657874206b657920746f206d69677261746520697320746f6f2062696720746f206265206d696772617465642077697468550161207369676e6564206163636f756e742c20696e20612070617261636861696e20636f6e746578742c20616e642077652073696d706c792077616e7420746f20736b69702069742e204120726561736f6e61626c6561016578616d706c65206f66207468697320776f756c6420626520603a636f64653a602c20776869636820697320626f7468207665727920657870656e7369766520746f206d6967726174652c20616e6420636f6d6d6f6e6c79a4757365642c20736f2070726f6261626c7920697420697320616c7265616479206d696772617465642e005d01496e206361736520796f75206d657373207468696e67732075702c20796f752063616e20616c736f2c20696e207072696e6369706c652c20757365207468697320746f20726573657420746865206d6967726174696f6e2070726f636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e750504184f7074696f6e0404540179050108104e6f6e6500000010536f6d6504007905000001000079050c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65743c4d6967726174696f6e4c696d697473000008011073697a6510010c7533320001106974656d10010c75333200007d050c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c6574344d6967726174696f6e5461736b040454000014013070726f67726573735f746f708105013450726f67726573734f663c543e00013870726f67726573735f6368696c648105013450726f67726573734f663c543e00011073697a6510010c753332000124746f705f6974656d7310010c75333200012c6368696c645f6974656d7310010c753332000081050c6c70616c6c65745f73746174655f747269655f6d6967726174696f6e1870616c6c65742050726f677265737304244d61784b65794c656e00010c1c546f53746172740000001c4c6173744b6579040085050164426f756e6465645665633c75382c204d61784b65794c656e3e00010020436f6d706c6574650002000085050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000089050c5470616c6c65745f61737365745f72656769737472791870616c6c65741043616c6c04045400011420726567697374657224012061737365745f6964cd0101484f7074696f6e3c543a3a417373657449643e0001106e616d65150101704f7074696f6e3c4e616d653c543a3a537472696e674c696d69743e3e00012861737365745f747970651d01012441737365745479706500014c6578697374656e7469616c5f6465706f736974f4013c4f7074696f6e3c42616c616e63653e00011873796d626f6c150101784f7074696f6e3c53796d626f6c3c543a3a537472696e674c696d69743e3e000120646563696d616c73210101284f7074696f6e3c75383e0001206c6f636174696f6e8d0501784f7074696f6e3c543a3a41737365744e61746976654c6f636174696f6e3e00013878636d5f726174655f6c696d6974f4013c4f7074696f6e3c42616c616e63653e00013469735f73756666696369656e74200110626f6f6c0000305452656769737465722061206e65772061737365742e00d84e657720617373657420697320676976656e20604e6578744173736574496460202d2073657175656e7469616c20617373657420696400390141737365742773206964206973206f7074696f6e616c20616e642069742063616e2774206265207573656420627920616e6f7468657220617373657420696620697427732070726f76696465642edc50726f7669646564206061737365745f696460206d7573742062652066726f6d2077697468696e2072657365727665642072616e67652e09014966206061737365745f69646020697320604e6f6e65602c206e657720617373657420697320676976656e20696420666f722073657175656e7469616c206964732e00410141737365742773206e616d65206973206f7074696f6e616c20616e642069742063616e2774206265207573656420627920616e6f7468657220617373657420696620697427732070726f76696465642e590241646473206d617070696e67206265747765656e20606e616d656020616e642061737369676e6564206061737365745f69646020736f2061737365742069642063616e20626520726574726965766564206279206e616d6520746f6f20284e6f74653a207468697320617070726f616368206973207573656420696e20414d4d20696d706c656d656e746174696f6e202878796b292900a4456d69747320275265676973746572656460206576656e74207768656e207375636365737366756c2e1875706461746524012061737365745f6964100128543a3a417373657449640001106e616d65150101704f7074696f6e3c4e616d653c543a3a537472696e674c696d69743e3e00012861737365745f74797065910501444f7074696f6e3c4173736574547970653e00014c6578697374656e7469616c5f6465706f736974f4013c4f7074696f6e3c42616c616e63653e00013878636d5f726174655f6c696d6974f4013c4f7074696f6e3c42616c616e63653e00013469735f73756666696369656e74950501304f7074696f6e3c626f6f6c3e00011873796d626f6c150101784f7074696f6e3c53796d626f6c3c543a3a537472696e674c696d69743e3e000120646563696d616c73210101284f7074696f6e3c75383e0001206c6f636174696f6e8d0501784f7074696f6e3c543a3a41737365744e61746976654c6f636174696f6e3e0001286055706461746520726567697374657265642061737365742e002501416c6c20706172616d65746572657320617265206f7074696f6e616c20616e642076616c7565206973206e6f74207570646174656420696620706172616d20697320604e6f6e65602e00310160646563696d616c7360202d2063616e2062652075706461746520627920605570646174654f726967696e60206f6e6c79206966206974207761736e277420736574207965742e204f6e6c7901016052656769737472794f726967696e602063616e207570646174652060646563696d616c7360206966206974207761732070726576696f75736c79207365742e00d4606c6f636174696f6e60202d2063616e2062652075706461746564206f6e6c79206279206052656769737472794f726967696e602e0098456d69747320605570646174656460206576656e74207768656e207375636365737366756c2e4472656769737465725f65787465726e616c0401206c6f636174696f6e25010158543a3a41737365744e61746976654c6f636174696f6e0004002462616e5f617373657404012061737365745f6964100128543a3a417373657449640005002c756e62616e5f617373657404012061737365745f6964100128543a3a41737365744964000600040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d0504184f7074696f6e0404540125010108104e6f6e6500000010536f6d65040025010000010000910504184f7074696f6e040454011d010108104e6f6e6500000010536f6d6504001d010000010000950504184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000099050c3470616c6c65745f636c61696d731870616c6c65741043616c6c04045400010414636c61696d040148657468657265756d5f7369676e61747572659d05013845636473615369676e6174757265000004f4436c61696d20784844582062792070726f766964696e67207369676e6564206d657373616765207769746820457468657265756d20616464726573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9d050c3470616c6c65745f636c61696d73187472616974733845636473615369676e617475726500000400290501205b75383b2036355d0000a1050c5870616c6c65745f67656e657369735f686973746f72791870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5050c3c70616c6c65745f6f6d6e69706f6f6c1870616c6c65741043616c6c040454000134246164645f746f6b656e1001146173736574100128543a3a41737365744964000134696e697469616c5f70726963656101011450726963650001287765696768745f6361706901011c5065726d696c6c000138706f736974696f6e5f6f776e6572000130543a3a4163636f756e7449640001401d01416464206e657720746f6b656e20746f206f6d6e69706f6f6c20696e207175616e746974792060616d6f756e74602061742070726963652060696e697469616c5f70726963656000c501496e697469616c206c6971756964697479206d757374206265207472616e7366657272656420746f20706f6f6c2773206163636f756e7420666f722074686973206e657720746f6b656e206d616e75616c6c79207072696f7220746f2063616c6c696e6720606164645f746f6b656e602e00e4496e697469616c206c697175696469747920697320706f6f6c2773206163636f756e742062616c616e6365206f662074686520746f6b656e2e00c8506f736974696f6e204e465420746f6b656e206973206d696e74656420666f722060706f736974696f6e5f6f776e6572602e002c506172616d65746572733a89012d20606173736574603a20546865206964656e746966696572206f6620746865206e657720617373657420616464656420746f2074686520706f6f6c2e204d757374206265207265676973746572656420696e204173736574207265676973747279802d2060696e697469616c5f7072696365603a20496e697469616c20707269636535012d2060706f736974696f6e5f6f776e6572603a206163636f756e7420696420666f722077686963682073686172652061726520646973747269627574656420696e20666f726d206f6e204e4654802d20607765696768745f636170603a206173736574207765696768742063617000a4456d6974732060546f6b656e416464656460206576656e74207768656e207375636365737366756c2e00346164645f6c69717569646974790801146173736574100128543a3a41737365744964000118616d6f756e7418011c42616c616e6365000250fc416464206c6971756964697479206f66206173736574206061737365746020696e207175616e746974792060616d6f756e746020746f204f6d6e69706f6f6c006101606164645f6c69717569646974796020616464732073706563696669656420617373657420616d6f756e7420746f204f6d6e69706f6f6c20616e6420696e2065786368616e676520676976657320746865206f726967696ef0636f72726573706f6e64696e672073686172657320616d6f756e7420696e20666f726d206f66204e46542061742063757272656e742070726963652e00850141737365742773207472616461626c65207374617465206d75737420636f6e7461696e204144445f4c495155494449545920666c61672c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e0061014e4654206973206d696e746564207573696e67204e544648616e646c657220776869636820696d706c656d656e7473206e6f6e2d66756e6769626c6573207472616974732066726f6d206672616d655f737570706f72742e00590141737365742077656967687420636170206d757374206265207265737065637465642c206f746865727769736520604173736574576569676874457863656564656460206572726f722069732072657475726e65642e790141737365742077656967687420697320726174696f206265747765656e206e6577204875624173736574207265736572766520616e6420746f74616c2072657365727665206f662048756220617373657420696e204f6d6e69706f6f6c2e00d501416464206c6971756964697479206661696c7320696620707269636520646966666572656e6365206265747765656e2073706f7420707269636520616e64206f7261636c6520707269636520697320686967686572207468616e20616c6c6f7765642062792060507269636542617272696572602e002c506172616d65746572733a65012d20606173736574603a20546865206964656e746966696572206f6620746865206e657720617373657420616464656420746f2074686520706f6f6c2e204d75737420626520616c726561647920696e2074686520706f6f6cb42d2060616d6f756e74603a20416d6f756e74206f6620617373657420616464656420746f206f6d6e69706f6f6c00b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e00606164645f6c69717569646974795f776974685f6c696d69740c01146173736574100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001406d696e5f7368617265735f6c696d697418011c42616c616e6365000d5c0101416464206c6971756964697479206f66206173736574206061737365746020696e207175616e746974792060616d6f756e746020746f204f6d6e69706f6f6c2e00704c696d69742070726f74656374696f6e206973206170706c6965642e006101606164645f6c69717569646974796020616464732073706563696669656420617373657420616d6f756e7420746f204f6d6e69706f6f6c20616e6420696e2065786368616e676520676976657320746865206f726967696ef0636f72726573706f6e64696e672073686172657320616d6f756e7420696e20666f726d206f66204e46542061742063757272656e742070726963652e00850141737365742773207472616461626c65207374617465206d75737420636f6e7461696e204144445f4c495155494449545920666c61672c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e0061014e4654206973206d696e746564207573696e67204e544648616e646c657220776869636820696d706c656d656e7473206e6f6e2d66756e6769626c6573207472616974732066726f6d206672616d655f737570706f72742e00590141737365742077656967687420636170206d757374206265207265737065637465642c206f746865727769736520604173736574576569676874457863656564656460206572726f722069732072657475726e65642e790141737365742077656967687420697320726174696f206265747765656e206e6577204875624173736574207265736572766520616e6420746f74616c2072657365727665206f662048756220617373657420696e204f6d6e69706f6f6c2e00d501416464206c6971756964697479206661696c7320696620707269636520646966666572656e6365206265747765656e2073706f7420707269636520616e64206f7261636c6520707269636520697320686967686572207468616e20616c6c6f7765642062792060507269636542617272696572602e002c506172616d65746572733a65012d20606173736574603a20546865206964656e746966696572206f6620746865206e657720617373657420616464656420746f2074686520706f6f6c2e204d75737420626520616c726561647920696e2074686520706f6f6cb42d2060616d6f756e74603a20416d6f756e74206f6620617373657420616464656420746f206f6d6e69706f6f6c85012d20606d696e5f7368617265735f6c696d6974603a20546865206d696e20616d6f756e74206f662064656c74612073686172652061737365742074686520757365722073686f756c64207265636569766520696e2074686520706f736974696f6e00b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e004072656d6f76655f6c697175696469747908012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000118616d6f756e7418011c42616c616e636500034c110152656d6f7665206c6971756964697479206f66206173736574206061737365746020696e207175616e746974792060616d6f756e74602066726f6d204f6d6e69706f6f6c0061016072656d6f76655f6c6971756964697479602072656d6f766573207370656369666965642073686172657320616d6f756e742066726f6d20676976656e20506f736974696f6e496420284e465420696e7374616e6365292e00910141737365742773207472616461626c65207374617465206d75737420636f6e7461696e2052454d4f56455f4c495155494449545920666c61672c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e005d01696620616c6c207368617265732066726f6d20676976656e20706f736974696f6e206172652072656d6f7665642c20706f736974696f6e2069732064657374726f79656420616e64204e4654206973206275726e65642e00e10152656d6f7665206c6971756964697479206661696c7320696620707269636520646966666572656e6365206265747765656e2073706f7420707269636520616e64206f7261636c6520707269636520697320686967686572207468616e20616c6c6f7765642062792060507269636542617272696572602e00e50144796e616d6963207769746864726177616c20666565206973206170706c696564206966207769746864726177616c206973206e6f7420736166652e2049742069732063616c63756c61746564207573696e672073706f7420707269636520616e642065787465726e616c207072696365206f7261636c652edc5769746864726177616c20697320636f6e736964657265642073616665207768656e2074726164696e672069732064697361626c65642e002c506172616d65746572733a31012d2060706f736974696f6e5f6964603a20546865206964656e746966696572206f6620706f736974696f6e207768696368206c69717569646974792069732072656d6f7665642066726f6d2ec82d2060616d6f756e74603a20416d6f756e74206f66207368617265732072656d6f7665642066726f6d206f6d6e69706f6f6c00bc456d69747320604c697175696469747952656d6f76656460206576656e74207768656e207375636365737366756c2e006c72656d6f76655f6c69717569646974795f776974685f6c696d69740c012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000118616d6f756e7418011c42616c616e63650001246d696e5f6c696d697418011c42616c616e6365000e58110152656d6f7665206c6971756964697479206f66206173736574206061737365746020696e207175616e746974792060616d6f756e74602066726f6d204f6d6e69706f6f6c00704c696d69742070726f74656374696f6e206973206170706c6965642e0061016072656d6f76655f6c6971756964697479602072656d6f766573207370656369666965642073686172657320616d6f756e742066726f6d20676976656e20506f736974696f6e496420284e465420696e7374616e6365292e00910141737365742773207472616461626c65207374617465206d75737420636f6e7461696e2052454d4f56455f4c495155494449545920666c61672c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e005d01696620616c6c207368617265732066726f6d20676976656e20706f736974696f6e206172652072656d6f7665642c20706f736974696f6e2069732064657374726f79656420616e64204e4654206973206275726e65642e00e10152656d6f7665206c6971756964697479206661696c7320696620707269636520646966666572656e6365206265747765656e2073706f7420707269636520616e64206f7261636c6520707269636520697320686967686572207468616e20616c6c6f7765642062792060507269636542617272696572602e00e50144796e616d6963207769746864726177616c20666565206973206170706c696564206966207769746864726177616c206973206e6f7420736166652e2049742069732063616c63756c61746564207573696e672073706f7420707269636520616e642065787465726e616c207072696365206f7261636c652edc5769746864726177616c20697320636f6e736964657265642073616665207768656e2074726164696e672069732064697361626c65642e002c506172616d65746572733a31012d2060706f736974696f6e5f6964603a20546865206964656e746966696572206f6620706f736974696f6e207768696368206c69717569646974792069732072656d6f7665642066726f6d2ec82d2060616d6f756e74603a20416d6f756e74206f66207368617265732072656d6f7665642066726f6d206f6d6e69706f6f6c05012d20606d696e5f6c696d6974603a20546865206d696e20616d6f756e74206f6620617373657420746f2062652072656d6f76656420666f7220746865207573657200bc456d69747320604c697175696469747952656d6f76656460206576656e74207768656e207375636365737366756c2e00487361637269666963655f706f736974696f6e04012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d496400041c9c536163726966696365204c5020706f736974696f6e20696e206661766f72206f6620706f6f6c2e003d014120706f736974696f6e2069732064657374726f79656420616e64206c6971756964697479206f776e6564206279204c50206265636f6d657320706f6f6c206f776e6564206c69717569646974792e00bc4f6e6c79206f776e6572206f6620706f736974696f6e2063616e20706572666f726d207468697320616374696f6e2e0068456d6974732060506f736974696f6e44657374726f796564602e1073656c6c10012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001386d696e5f6275795f616d6f756e7418011c42616c616e6365000540b44578656375746520612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e009050726963652069732064657465726d696e656420627920746865204f6d6e69706f6f6c2e007c487562206173736574206973207472616465642073657061726174656c792e00050241737365742773207472616461626c6520737461746573206d75737420636f6e7461696e2053454c4c20666c616720666f722061737365745f696e20616e642042555920666c616720666f722061737365745f6f75742c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e002c506172616d65746572733aa82d206061737365745f696e603a204944206f6620617373657420736f6c6420746f2074686520706f6f6cbc2d206061737365745f6f7574603a204944206f6620617373657420626f756768742066726f6d2074686520706f6f6c802d2060616d6f756e74603a20416d6f756e74206f6620617373657420736f6c64d82d20606d696e5f6275795f616d6f756e74603a204d696e696d756d20616d6f756e7420726571756972656420746f207265636569766500ac456d697473206053656c6c457865637574656460206576656e74207768656e207375636365737366756c2e000c62757910012461737365745f6f7574100128543a3a4173736574496400012061737365745f696e100128543a3a41737365744964000118616d6f756e7418011c42616c616e636500013c6d61785f73656c6c5f616d6f756e7418011c42616c616e6365000640b44578656375746520612073776170206f66206061737365745f6f75746020666f72206061737365745f696e602e009050726963652069732064657465726d696e656420627920746865204f6d6e69706f6f6c2e007c487562206173736574206973207472616465642073657061726174656c792e00050241737365742773207472616461626c6520737461746573206d75737420636f6e7461696e2053454c4c20666c616720666f722061737365745f696e20616e642042555920666c616720666f722061737365745f6f75742c206f746865727769736520604e6f74416c6c6f77656460206572726f722069732072657475726e65642e002c506172616d65746572733aa82d206061737365745f696e603a204944206f6620617373657420736f6c6420746f2074686520706f6f6cbc2d206061737365745f6f7574603a204944206f6620617373657420626f756768742066726f6d2074686520706f6f6c802d2060616d6f756e74603a20416d6f756e74206f6620617373657420736f6c64bc2d20606d61785f73656c6c5f616d6f756e74603a204d6178696d756d20616d6f756e7420746f20626520736f6c642e00a8456d6974732060427579457865637574656460206576656e74207768656e207375636365737366756c2e00607365745f61737365745f7472616461626c655f737461746508012061737365745f6964100128543a3a4173736574496400011473746174656501012c547261646162696c697479000720785570646174652061737365742773207472616461626c652073746174652e002c506172616d65746572733a582d206061737365745f6964603a206173736574206964502d20607374617465603a206e657720737461746500cc456d69747320605472616461626c6553746174655570646174656460206576656e74207768656e207375636365737366756c2e0050726566756e645f726566757365645f61737365740c012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e6365000124726563697069656e74000130543a3a4163636f756e744964000824b0526566756e6420676976656e20616d6f756e74206f6620617373657420746f206120726563697069656e742e0059024120726566756e64206973206e6565646564207768656e206120746f6b656e206973207265667573656420746f20626520616464656420746f204f6d6e69706f6f6c2c20616e6420696e697469616c206c6971756964697479206f662074686520617373657420686173206265656e20616c7265616479207472616e7366657272656420746f20706f6f6c2773206163636f756e742e008d015472616e736665722063616e206265206578656375746564206f6e6c79206966206173736574206973206e6f7420696e204f6d6e69706f6f6c20616e6420706f6f6c27732062616c616e6365206861732073756666696369656e7420616d6f756e742e00c84f6e6c792060417574686f726974794f726967696e602063616e20706572666f726d2074686973206f7065726174696f6e2e0054456d69747320604173736574526566756e64656460507365745f61737365745f7765696768745f63617008012061737365745f6964100128543a3a4173736574496400010c6361706901011c5065726d696c6c0009206455706461746520617373657427732077656967687420636170002c506172616d65746572733a582d206061737365745f6964603a2061737365742069645c2d2060636170603a206e6577207765696768742063617000d0456d697473206041737365745765696768744361705570646174656460206576656e74207768656e207375636365737366756c2e006c77697468647261775f70726f746f636f6c5f6c697175696469747910012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001147072696365a90501482842616c616e63652c2042616c616e63652900011064657374000130543a3a4163636f756e744964000b2c6c52656d6f7665732070726f746f636f6c206c69717569646974792e00850150726f746f636f6c206c6971756964697479206973206c69717569646974792066726f6d207361637269666963656420706f736974696f6e732e20496e206f7264657220746f2072656d6f76652070726f746f636f6c206c69717569646974792c79017765206e65656420746865206b6e6f7720746865207072696365206f662074686520706f736974696f6e206174207468652074696d65206f66207361637269666963652e2048656e636520746869732073706563696669632063616c6c2e00b44f6e6c792060417574686f726974794f726967696e602063616e20706572666f726d20746869732063616c6c2e0079014e6f746520746861742073616372696669636520706f736974696f6e2077696c6c206265206465707265636174656420696e206675747572652e205468657265206973206e6f206c6f6e6765722061206e65656420666f7220746861742e006101497420776f726b73207468652073616d65207761792061732072656d6f7665206c69717569646974792063616c6c2c2062757420706f736974696f6e2069732074656d706f72617279207265636f6e73747275637465642e003072656d6f76655f746f6b656e08012061737365745f6964100128543a3a4173736574496400012c62656e6566696369617279000130543a3a4163636f756e744964000c2c7052656d6f76657320746f6b656e2066726f6d204f6d6e69706f6f6c2e0045014173736574277320747261646162696c697479206d7573742062652046524f5a454e2c206f7468657277697365206041737365744e6f7446726f7a656e60206572726f722069732072657475726e65642e00610152656d61696e696e6720736861726573206d7573742062656c6f6e6720746f2070726f746f636f6c2c206f7468657277697365206053686172657352656d61696e696e6760206572726f722069732072657475726e65642e00790150726f746f636f6c2773206c6971756964697479206973207472616e7366657272656420746f207468652062656e6566696369617279206163636f756e7420616e642068756220617373657420616d6f756e74206973206275726e65642e00b44f6e6c792060417574686f726974794f726967696e602063616e20706572666f726d20746869732063616c6c2e00ac456d6974732060546f6b656e52656d6f76656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea90500000408181800ad050c6070616c6c65745f7472616e73616374696f6e5f70617573651870616c6c65741043616c6c0404540001084470617573655f7472616e73616374696f6e08012c70616c6c65745f6e616d6538011c5665633c75383e00013466756e6374696f6e5f6e616d6538011c5665633c75383e0000004c756e70617573655f7472616e73616374696f6e08012c70616c6c65745f6e616d6538011c5665633c75383e00013466756e6374696f6e5f6e616d6538011c5665633c75383e000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb1050c3470616c6c65745f6475737465721870616c6c65741043616c6c04045400010c30647573745f6163636f756e7408011c6163636f756e74000130543a3a4163636f756e74496400012c63757272656e63795f6964100134543a3a43757272656e637949640000145c4475737420737065636966696564206163636f756e742e75014946206163636f756e742062616c616e6365206973203c206d696e2e206578697374656e7469616c206465706f736974206f6620676976656e2063757272656e63792c20616e64206163636f756e7420697320616c6c6f77656420746f5d016265206475737465642c207468652072656d61696e696e672062616c616e6365206973207472616e7366657272656420746f2073656c6563746564206163636f756e742028757375616c6c79207472656173757279292e00e443616c6c657220697320726577617264656420776974682063686f73656e2072657761726420696e206e61746976652063757272656e63792e5c6164645f6e6f6e6475737461626c655f6163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400010c5501416464206163636f756e7420746f206c697374206f66206e6f6e2d6475737461626c65206163636f756e742e204163636f756e7420776869686320617265206578636c756465642066726f6d2075647374696e672e290149662073756368206163636f756e742073686f756c6420626520647573746564202d20604163636f756e74426c61636b6c697374656460206572726f722069732072657475726e65642e884f6e6c7920726f6f742063616e20706572666f726d207468697320616374696f6e2e6872656d6f76655f6e6f6e6475737461626c655f6163636f756e7404011c6163636f756e74000130543a3a4163636f756e744964000204690152656d6f7665206163636f756e742066726f6d206c697374206f66206e6f6e2d6475737461626c65206163636f756e74732e2054686174206d65616e73206163636f756e742063616e2062652064757374656420616761696e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb5050c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c65741043616c6c080454000449000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb9050c8070616c6c65745f6f6d6e69706f6f6c5f6c69717569646974795f6d696e696e671870616c6c65741043616c6c040454000130486372656174655f676c6f62616c5f6661726d200134746f74616c5f7265776172647318011c42616c616e6365000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e00013c7265776172645f63757272656e6379100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e7449640001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c00012c6d696e5f6465706f73697418011c42616c616e63650001546c726e615f70726963655f61646a7573746d656e7461010124466978656455313238000070fc4372656174652061206e6577206c6971756964697479206d696e696e672070726f6772616d20776974682070726f766964656420706172616d65746572732e004501606f776e657260206163636f756e742068617320746f2068617665206174206c656173742060746f74616c5f72657761726473602062616c616e63652e2054686573652066756e64732077696c6c206265a47472616e736665727265642066726f6d20606f776e65726020746f206661726d206163636f756e742e00f0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a4372656174654f726967696e602e55012121215741524e3a2060543a3a4372656174654f726967696e602068617320706f776572206f7665722066756e6473206f6620606f776e6572602773206163636f756e7420616e642069742073686f756c64206265d0636f6e6669677572656420746f2074727573746564206f726967696e20652e67205375646f206f7220476f7665726e616e63652e002c506172616d65746572733a55012d20606f726967696e603a206163636f756e7420616c6c6f77656420746f20637265617465206e6577206c6971756964697479206d696e696e672070726f6772616d28726f6f742c20676f7665726e616e6365292e35012d2060746f74616c5f72657761726473603a20746f74616c207265776172647320706c616e6e656420746f20646973747269627574652e20546865736520726577617264732077696c6c206265dc6469737472696275746564206265747765656e20616c6c207969656c64206661726d7320696e2074686520676c6f62616c206661726d2e59012d2060706c616e6e65645f7969656c64696e675f706572696f6473603a20706c616e6e6564206e756d626572206f6620706572696f647320746f20646973747269627574652060746f74616c5f72657761726473602e29015741524e3a2054484953204953204e4f54204841524420444541444c494e452e204e6f7420616c6c2072657761726473206861766520746f20626520646973747269627574656420696e5d0160706c616e6e65645f7969656c64696e675f706572696f6473602e205265776172647320617265206469737472696275746564206261736564206f6e2074686520736974756174696f6e20696e20746865207969656c6441016661726d7320616e642063616e20626520646973747269627574656420696e2061206c6f6e6765722c2074686f756768206e6576657220696e20612073686f727465722c2074696d65206672616d652e59012d2060626c6f636b735f7065725f706572696f64603a20206e756d626572206f6620626c6f636b7320696e20612073696e676c6520706572696f642e204d696e2e206e756d626572206f6620626c6f636b732070657230706572696f6420697320312ec02d20607265776172645f63757272656e6379603a207061796f66662063757272656e6379206f6620726577617264732e39012d20606f776e6572603a206c69712e206d696e696e67206661726d206f776e65722e2054686973206163636f756e742077696c6c2062652061626c6520746f206d616e6167652063726561746564646c6971756964697479206d696e696e672070726f6772616d2e29012d20607969656c645f7065725f706572696f64603a2070657263656e746167652072657475726e206f6e20607265776172645f63757272656e637960206f6620616c6c206661726d732e91012d20606d696e5f6465706f736974603a206d696e696d756d20616d6f756e74206f66204c502073686172657320746f206265206465706f736974656420696e746f20746865206c6971756964697479206d696e696e67206279206561636820757365722e4d012d20606c726e615f70726963655f61646a7573746d656e74603a2070726963652061646a7573746d656e74206265747765656e20605b4c524e415d6020616e6420607265776172645f63757272656e6379602e00a8456d6974732060476c6f62616c4661726d4372656174656460207768656e207375636365737366756c2e00547465726d696e6174655f676c6f62616c5f6661726d040138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640002349c5465726d696e617465206578697374696e67206c69712e206d696e696e672070726f6772616d2e00a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e0011015741524e3a20546f207375636365737366756c6c79207465726d696e617465206120676c6f62616c206661726d2c206661726d206861766520746f20626520656d707479e028616c6c207969656c64206661726d7320696e2074686520676c6f62616c206661726d206d757374206265207465726d696e61746564292e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722edc2d2060676c6f62616c5f6661726d5f6964603a206964206f6620676c6f62616c206661726d20746f206265207465726d696e617465642e00cc456d6974732060476c6f62616c4661726d5465726d696e6174656460206576656e74207768656e207375636365737366756c2e00446372656174655f7969656c645f6661726d100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012061737365745f6964100128543a3a417373657449640001286d756c7469706c696572610101384661726d4d756c7469706c6965720001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e000348dc437265617465207969656c64206661726d20666f7220676976656e206061737365745f69646020696e20746865206f6d6e69706f6f6c2e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e00ec41737365742077697468206061737365745f6964602068617320746f206265207265676973746572656420696e20746865206f6d6e69706f6f6c2e55014174206d6f7374206f6e65206061637469766560207969656c64206661726d2063616e20657869737420696e206f6e6520676c6f62616c206661726d20666f72207468652073616d65206061737365745f6964602e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420746f2077686963682061207969656c64206661726d2077696c6c2062652061646465642e1d012d206061737365745f6964603a206964206f66206120617373657420696e20746865206f6d6e69706f6f6c2e205969656c64206661726d2077696c6c20626520637265617465646101666f72207468697320617373657420616e6420757365722077696c6c2062652061626c6520746f206c6f636b204c502073686172657320696e746f2074686973207969656c64206661726d20696d6d6564696174656c792ea02d20606d756c7469706c696572603a207969656c64206661726d2773206d756c7469706c6965722e5d012d20606c6f79616c74795f6375727665603a20637572766520746f2063616c63756c617465206c6f79616c7479206d756c7469706c69657220746f2064697374726962757465207265776172647320746f207573657273e0776974682074696d6520696e63656e746976652e20604e6f6e6560206d65616e73206e6f206c6f79616c7479206d756c7469706c6965722e00bc456d69747320605969656c644661726d4372656174656460206576656e74207768656e207375636365737366756c2e00447570646174655f7969656c645f6661726d0c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012061737365745f6964100128543a3a417373657449640001286d756c7469706c696572610101384661726d4d756c7469706c6965720004307c557064617465207969656c64206661726d2773206d756c7469706c6965722e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420696e207768696368207969656c64206661726d2077696c6c20626520757064617465642e21012d206061737365745f6964603a206964206f6620746865206173736574206964656e74696679696e67207969656c64206661726d20696e2074686520676c6f62616c206661726d2eb02d20606d756c7469706c696572603a206e6577207969656c64206661726d2773206d756c7469706c6965722e00bc456d69747320605969656c644661726d5570646174656460206576656e74207768656e207375636365737366756c2e003c73746f705f7969656c645f6661726d080138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012061737365745f6964100128543a3a41737365744964000540b853746f70206c6971756964697479206d696d696e6720666f72207370656369666963207969656c64206661726d2e003101546869732066756e6374696f6e20636c61696d7320726577617264732066726f6d2060476c6f62616c4661726d60206c6173742074696d6520616e642073746f70207969656c64206661726d2101696e63656e746976697a6174696f6e2066726f6d20612060476c6f62616c4661726d602e2055736572732077696c6c2062652061626c6520746f206f6e6c79207769746864726177c8736861726573287769746820636c61696d696e67292061667465722063616c6c696e6720746869732066756e6374696f6e2ee0606465706f7369745f736861726573282960206973206e6f7420616c6c6f776564206f6e2073746f70706564207969656c64206661726d2e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e05012d2060676c6f62616c5f6661726d5f6964603a206661726d20696420696e207768696368207969656c64206661726d2077696c6c2062652063616e63656c65642e21012d206061737365745f6964603a206964206f6620746865206173736574206964656e74696679696e67207969656c64206661726d20696e2074686520676c6f62616c206661726d2e00bc456d69747320605969656c644661726d53746f7070656460206576656e74207768656e207375636365737366756c2e0044726573756d655f7969656c645f6661726d100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a417373657449640001286d756c7469706c696572610101384661726d4d756c7469706c69657200064cf8526573756d6520696e63656e746976697a6174696f6e206f662074686520617373657420726570726573656e746564206279207969656c64206661726d2e002d01546869732066756e6374696f6e20726573756d6520696e63656e746976697a6174696f6e206f66207468652061737365742066726f6d207468652060476c6f62616c4661726d6020616e643101726573746f72652066756c6c2066756e6374696f6e616c697479206f7220746865207969656c64206661726d2e2055736572732077696c6c2062652061626c6520746f206465706f7369742c64636c61696d20616e6420776974686472617720616761696e2e0011015741524e3a205969656c64206661726d28616e6420757365727329206973204e4f5420726577617264656420666f722074696d65206974207761732073746f707065642e00a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420696e207768696368207969656c64206661726d2077696c6c20626520726573756d65642ed82d20607969656c645f6661726d5f6964603a206964206f6620746865207969656c64206661726d20746f20626520726573756d65642e21012d206061737365745f6964603a206964206f6620746865206173736574206964656e74696679696e67207969656c64206661726d20696e2074686520676c6f62616c206661726d2e982d20606d756c7469706c696572603a207969656c64206661726d206d756c7469706c6965722e00bc456d69747320605969656c644661726d526573756d656460206576656e74207768656e207375636365737366756c2e00507465726d696e6174655f7969656c645f6661726d0c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012061737365745f6964100128543a3a41737365744964000750545465726d696e617465207969656c64206661726d2e008101546869732066756e6374696f6e206d61726b732061207969656c64206661726d20617320726561647920746f2062652072656d6f7665642066726f6d2073746f72616765207768656e206974277320656d7074792e2055736572732077696c6c650162652061626c6520746f206f6e6c792077697468647261772073686172657328776974686f757420636c61696d696e6720726577617264732066726f6d207969656c64206661726d292e20556e7061696420726577617264737d0177696c6c206265207472616e73666572726564206261636b20746f20676c6f62616c206661726d20616e642069742077696c6c206265207573656420746f206469737472696275746520746f206f74686572207969656c64206661726d732e00dc5969656c64206661726d206d7573742062652073746f70706564206265666f72652069742063616e206265207465726d696e617465642e0071014f6e6c7920676c6f62616c206661726d2773206f776e65722063616e20706572666f726d207468697320616374696f6e2e205969656c64206661726d20737461797320696e207468652073746f7261676520756e74696c20697427736d01656d70747928616c6c206661726d20656e7472696573206172652077697468647261776e292e204c6173742077697468647261776e2066726f6d207969656c64206661726d20747269676765722072656d6f76696e672066726f6d307468652073746f726167652e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e31012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420696e207768696368207969656c64206661726d2073686f756c64206265207465726d696e617465642ed42d20607969656c645f6661726d5f6964603a206964206f66207969656c64206661726d20746f206265207465726d696e617465642ed42d206061737365745f6964603a206964206f6620746865206173736574206964656e74696679696e67207969656c64206661726d2e00c8456d69747320605969656c644661726d5465726d696e6174656460206576656e74207768656e207375636365737366756c2e00386465706f7369745f7368617265730c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000838ec4465706f736974206f6d6e69706f6f6c20706f736974696f6e284c50207368617265732920746f2061206c6971756964697479206d696e696e672e007101546869732066756e6374696f6e207472616e7366657273206f6d6e69706f6f6c20706f736974696f6e2066726f6d20606f726967696e6020746f2070616c6c65742773206163636f756e7420616e64206d696e74204e465420666f724501606f726967696e60206163636f756e742e204d696e746564204e465420726570726573656e7473206465706f73697420696e20746865206c6971756964697479206d696e696e672e20557365722063616e21016465706f736974206f6d6e69706f6f6c20706f736974696f6e20617320612077686f6c6528616c6c20746865204c502073686172657320696e2074686520706f736974696f6e292e002c506172616d65746572733a41012d20606f726967696e603a206f776e6572206f6620746865206f6d6e69706f6f6c20706f736974696f6e20746f206465706f73697420696e746f20746865206c6971756964697479206d696e696e672e3d012d2060676c6f62616c5f6661726d5f6964603a206964206f6620676c6f62616c206661726d20746f20776869636820757365722077616e747320746f206465706f736974204c50207368617265732ec82d20607969656c645f6661726d5f6964603a206964206f66207969656c64206661726d20746f206465706f73697420746f2e5d012d2060706f736974696f6e5f6964603a206964206f6620746865206f6d6e69706f6f6c20706f736974696f6e20746f206265206465706f736974656420696e746f20746865206c6971756964697479206d696e696e672e00b8456d69747320605368617265734465706f736974656460206576656e74207768656e207375636365737366756c2e004072656465706f7369745f7368617265730c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d49640001286465706f7369745f69641801244465706f736974496400093cf052656465706f736974204c502073686172657320696e2074686520616c7265616479206c6f636b6564206f6d6e69706f6f6c20706f736974696f6e2e005101546869732066756e6374696f6e20637265617465207969656c64206661726d20656e74727920666f72206578697374696e67206465706f7369742e20416d6f756e74206f662072656465706f7369746564204c502d017368617265732069732073616d6520617320616d6f756e74207368617265732077686963682061726520616c7265616479206465706f736974656420696e20746865206465706f7369742e00b8546869732066756e6374696f6e20444f45534e275420637265617465206e6577206465706f736974284e4654292e002c506172616d65746572733ab82d20606f726967696e603a206f776e6572206f6620746865206465706f73697420746f2072656465706f7369742e55012d2060676c6f62616c5f6661726d5f6964603a206964206f662074686520676c6f62616c206661726d20746f20776869636820757365722077616e747320746f2072656465706f736974204c50207368617265732ee02d20607969656c645f6661726d5f6964603a206964206f6620746865207969656c64206661726d20746f2072656465706f73697420746f2edc2d20606465706f7369745f6964603a206964656e746966696572206f6620746865206465706f73697420746f2072656465706f7369742e00c0456d697473206053686172657352656465706f736974656460206576656e74207768656e207375636365737366756c2e0034636c61696d5f726577617264730801286465706f7369745f69641801244465706f73697449640001347969656c645f6661726d5f696410012c5969656c644661726d4964000a306101436c61696d20726577617264732066726f6d206c6971756964697479206d696e696e672070726f6772616d20666f72206465706f73697420726570726573656e7465642062792074686520606465706f7369745f6964602e006d01546869732066756e6374696f6e2063616c63756c617465207573657220726577617264732066726f6d206c6971756964697479206d696e696e6720616e64207472616e73666572207265776172647320746f20606f726967696e60fc6163636f756e742e20436c61696d696e67206d756c7469706c652074696d65207468652073616d6520706572696f64206973206e6f7420616c6c6f7765642e002c506172616d65746572733a742d20606f726967696e603a206f776e6572206f66206465706f7369742edc2d20606465706f7369745f6964603a206964206f6620746865206465706f73697420746f20636c61696d207265776172647320666f722ef82d20607969656c645f6661726d5f6964603a206964206f6620746865207969656c64206661726d20746f20636c61696d20726577617264732066726f6d2e00b0456d6974732060526577617264436c61696d656460206576656e74207768656e207375636365737366756c2e003c77697468647261775f7368617265730801286465706f7369745f69641801244465706f73697449640001347969656c645f6661726d5f696410012c5969656c644661726d4964000b505501546869732066756e6374696f6e20636c61696d207265776172647320616e64207769746864726177204c50207368617265732066726f6d207969656c64206661726d2e204f6d6e69706f6f6c20706f736974696f6e51016973207472616e7366657272656420746f206f726967696e206f6e6c792069662074686973206973206c61737420776974686472617720696e20746865206465706f73697420616e64206465706f736974206973510164657374726f7965642e20546869732066756e6374696f6e20636c61696d2072657761726473206f6e6c79206966207969656c64206661726d206973206e6f74207465726d696e6174656420616e642075736572bc6469646e277420616c726561647920636c61696d207265776172647320696e2063757272656e7420706572696f642e004d01556e636c61696d61626c65207265776172647320726570726573656e74732072657761726473207768696368207573657220776f6e27742062652061626c6520746f20636c61696d2062656361757365206f66490165786974696e67206561726c7920616e6420746865736520726577617264732077696c6c206265207472616e73666572726564206261636b20746f20676c6f62616c206661726d20666f72206675747572653c7265646973747269627574696f6e2e002c506172616d65746572733a742d20606f726967696e603a206f776e6572206f66206465706f7369742edc2d20606465706f7369745f6964603a206964206f6620746865206465706f73697420746f20636c61696d207265776172647320666f722ef82d20607969656c645f6661726d5f6964603a206964206f6620746865207969656c64206661726d20746f20636c61696d20726577617264732066726f6d2e0018456d6974733ac42a2060526577617264436c61696d656460206576656e7420696620636c61696d65642072657761726473206973203e2030a42a206053686172657357697468647261776e60206576656e74207768656e207375636365737366756c5d012a20604465706f73697444657374726f79656460206576656e74207768656e207468697320776173206c6173742077697468647261772066726f6d20746865206465706f73697420616e64206465706f736974207761732864657374726f7965642e00487570646174655f676c6f62616c5f6661726d100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d4964000160706c616e6e65645f7969656c64696e675f706572696f647310014863726174653a3a506572696f644f663c543e0001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c00012c6d696e5f6465706f73697418011c42616c616e6365000c38d4546869732065787472696e736963207570646174657320676c6f62616c206661726d2773206d61696e20706172616d65746572732e00f0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a4372656174654f726967696e602e55012121215741524e3a2060543a3a4372656174654f726967696e602068617320706f776572206f7665722066756e6473206f6620606f776e6572602773206163636f756e7420616e642069742073686f756c64206265d0636f6e6669677572656420746f2074727573746564206f726967696e20652e67205375646f206f7220476f7665726e616e63652e002c506172616d65746572733a55012d20606f726967696e603a206163636f756e7420616c6c6f77656420746f20637265617465206e6577206c6971756964697479206d696e696e672070726f6772616d28726f6f742c20676f7665726e616e6365292ed02d2060676c6f62616c5f6661726d5f6964603a206964206f662074686520676c6f62616c206661726d20746f207570646174652e59012d2060706c616e6e65645f7969656c64696e675f706572696f6473603a20706c616e6e6564206e756d626572206f6620706572696f647320746f20646973747269627574652060746f74616c5f72657761726473602e29012d20607969656c645f7065725f706572696f64603a2070657263656e746167652072657475726e206f6e20607265776172645f63757272656e637960206f6620616c6c206661726d732e91012d20606d696e5f6465706f736974603a206d696e696d756d20616d6f756e74206f66204c502073686172657320746f206265206465706f736974656420696e746f20746865206c6971756964697479206d696e696e67206279206561636820757365722e00c0456d6974732060476c6f62616c4661726d5570646174656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ebd050c2870616c6c65745f6f74631870616c6c65741043616c6c0404540001102c706c6163655f6f7264657214012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650001487061727469616c6c795f66696c6c61626c65200110626f6f6c000048584372656174652061206e6577204f5443206f7264657204202c506172616d65746572733aa42d206061737365745f696e603a204173736574207768696368206973206265696e6720626f75676874a02d206061737365745f6f7574603a204173736574207768696368206973206265696e6720736f6c64d82d2060616d6f756e745f696e603a20416d6f756e74207468617420746865206f72646572206973207365656b696e6720746f20627579c02d2060616d6f756e745f6f7574603a20416d6f756e74207468617420746865206f726465722069732073656c6c696e6749012d20607061727469616c6c795f66696c6c61626c65603a20466c616720696e6469636174696e6720776865746865722075736572732063616e2066696c6c20746865206f72646572207061727469616c6c79003056616c69646174696f6e733a742d2061737365745f696e206d757374206265207265676973746572656445012d20616d6f756e745f696e206d75737420626520686967686572207468616e20746865206578697374656e7469616c206465706f736974206f662061737365745f696e206d756c7469706c6965642062797820204578697374656e7469616c4465706f7369744d756c7469706c6965724d012d20616d6f756e745f6f7574206d75737420626520686967686572207468616e20746865206578697374656e7469616c206465706f736974206f662061737365745f6f7574206d756c7469706c6965642062797820204578697374656e7469616c4465706f7369744d756c7469706c696572001c4576656e74733a842d2060506c6163656460206576656e74207768656e207375636365737366756c2e487061727469616c5f66696c6c5f6f726465720801206f726465725f696410011c4f726465724964000124616d6f756e745f696e18011c42616c616e636500013c7446696c6c20616e204f5443206f7264657220287061727469616c6c792904202c506172616d65746572733a742d20606f726465725f6964603a204944206f6620746865206f72646572e82d2060616d6f756e745f696e603a20416d6f756e74207769746820776869636820746865206f72646572206973206265696e672066696c6c6564003056616c69646174696f6e733a882d206f72646572206d757374206265207061727469616c6c795f66696c6c61626c658d012d20616674657220746865207061727469616c5f66696c6c2c207468652072656d61696e696e67206f726465722e616d6f756e745f696e206d75737420626520686967686572207468616e20746865206578697374656e7469616c206465706f736974e020206f662061737365745f696e206d756c7469706c696564206279204578697374656e7469616c4465706f7369744d756c7469706c69657291012d20616674657220746865207061727469616c5f66696c6c2c207468652072656d61696e696e67206f726465722e616d6f756e745f6f7574206d75737420626520686967686572207468616e20746865206578697374656e7469616c206465706f736974e420206f662061737365745f6f7574206d756c7469706c696564206279204578697374656e7469616c4465706f7369744d756c7469706c696572001c4576656e74733aa0605061727469616c6c7946696c6c656460206576656e74207768656e207375636365737366756c2e2866696c6c5f6f726465720401206f726465725f696410011c4f72646572496400021c7846696c6c20616e204f5443206f726465722028636f6d706c6574656c792904202c506172616d65746572733a742d20606f726465725f6964603a204944206f6620746865206f72646572001c4576656e74733a7c6046696c6c656460206576656e74207768656e207375636365737366756c2e3063616e63656c5f6f726465720401206f726465725f696410011c4f72646572496400032c6043616e63656c20616e206f70656e204f5443206f7264657204202c506172616d65746572733a742d20606f726465725f6964603a204944206f6620746865206f72646572982d20606173736574603a204173736574207768696368206973206265696e672066696c6c6564a02d2060616d6f756e74603a20416d6f756e74207768696368206973206265696e672066696c6c6564003056616c69646174696f6e733a5c2d2063616c6c6572206973206f72646572206f776e657200a0456d697473206043616e63656c6c656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec1050c5870616c6c65745f636972637569745f627265616b65721870616c6c65741043616c6c04045400010c587365745f74726164655f766f6c756d655f6c696d697408012061737365745f6964100128543a3a4173736574496400014874726164655f766f6c756d655f6c696d697491010128287533322c20753332290000249053657420747261646520766f6c756d65206c696d697420666f7220616e2061737365742e002c506172616d65746572733a21012d20606f726967696e603a20546865206469737061746368206f726967696e20666f7220746869732063616c6c2e204d7573742062652060546563686e6963616c4f726967696e60a02d206061737365745f6964603a20546865206964656e746966696572206f6620616e20617373657429012d206074726164655f766f6c756d655f6c696d6974603a204e657720747261646520766f6c756d65206c696d697420726570726573656e74656420617320612070657263656e7461676500d8456d69747320605472616465566f6c756d654c696d69744368616e67656460206576656e74207768656e207375636365737366756c2e005c7365745f6164645f6c69717569646974795f6c696d697408012061737365745f6964100128543a3a4173736574496400013c6c69717569646974795f6c696d6974950101484f7074696f6e3c287533322c20753332293e0001249453657420616464206c6971756964697479206c696d697420666f7220616e2061737365742e002c506172616d65746572733a21012d20606f726967696e603a20546865206469737061746368206f726967696e20666f7220746869732063616c6c2e204d7573742062652060546563686e6963616c4f726967696e60a02d206061737365745f6964603a20546865206964656e746966696572206f6620616e20617373657435012d20606c69717569646974795f6c696d6974603a204f7074696f6e616c20616464206c6971756964697479206c696d697420726570726573656e74656420617320612070657263656e7461676500dc456d69747320604164644c69717569646974794c696d69744368616e67656460206576656e74207768656e207375636365737366756c2e00687365745f72656d6f76655f6c69717569646974795f6c696d697408012061737365745f6964100128543a3a4173736574496400013c6c69717569646974795f6c696d6974950101484f7074696f6e3c287533322c20753332293e000224a05365742072656d6f7665206c6971756964697479206c696d697420666f7220616e2061737365742e002c506172616d65746572733a21012d20606f726967696e603a20546865206469737061746368206f726967696e20666f7220746869732063616c6c2e204d7573742062652060546563686e6963616c4f726967696e60a02d206061737365745f6964603a20546865206964656e746966696572206f6620616e20617373657441012d20606c69717569646974795f6c696d6974603a204f7074696f6e616c2072656d6f7665206c6971756964697479206c696d697420726570726573656e74656420617320612070657263656e7461676500e8456d697473206052656d6f76654c69717569646974794c696d69744368616e67656460206576656e74207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5050c5470616c6c65745f726f7574655f6578656375746f721870616c6c65741043616c6c0404540001141073656c6c14012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e180128543a3a42616c616e63650001386d696e5f616d6f756e745f6f7574180128543a3a42616c616e6365000114726f757465610201585665633c54726164653c543a3a417373657449643e3e000034fc457865637574657320612073656c6c2077697468206120736572696573206f66207472616465732073706563696669656420696e2074686520726f7574652e010154686520707269636520666f7220656163682074726164652069732064657465726d696e65642062792074686520636f72726573706f6e64696e6720414d4d2e00942d20606f726967696e603a20546865206578656375746f72206f6620746865207472616465c42d206061737365745f696e603a20546865206964656e746966696572206f662074686520617373657420746f2073656c6cd42d206061737365745f6f7574603a20546865206964656e746966696572206f662074686520617373657420746f2072656365697665bc2d2060616d6f756e745f696e603a2054686520616d6f756e74206f66206061737365745f696e6020746f2073656c6c05012d20606d696e5f616d6f756e745f6f7574603a20546865206d696e696d756d20616d6f756e74206f66206061737365745f6f75746020746f20726563656976652ed1022d2060726f757465603a20536572696573206f66205b6054726164653c417373657449643e605d20746f2062652065786563757465642e2041205b6054726164653c417373657449643e605d2073706563696669657320746865206173736574207061697220286061737365745f696e602c206061737365745f6f7574602920616e642074686520414d4d202860706f6f6c602920696e207768696368207468652074726164652069732065786563757465642edc09092020204966206e6f74207370656369666965642c207468616e20746865206f6e2d636861696e20726f75746520697320757365642e190109092020204966206e6f206f6e2d636861696e2069732070726573656e742c207468656e206f6d6e69706f6f6c20726f75746520697320757365642061732064656661756c740098456d6974732060526f757465457865637574656460207768656e207375636365737366756c2e0c62757914012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000128616d6f756e745f6f7574180128543a3a42616c616e63650001346d61785f616d6f756e745f696e180128543a3a42616c616e6365000114726f757465610201585665633c54726164653c543a3a417373657449643e3e000134f845786563757465732061206275792077697468206120736572696573206f66207472616465732073706563696669656420696e2074686520726f7574652e010154686520707269636520666f7220656163682074726164652069732064657465726d696e65642062792074686520636f72726573706f6e64696e6720414d4d2e00942d20606f726967696e603a20546865206578656375746f72206f662074686520747261646529012d206061737365745f696e603a20546865206964656e746966696572206f662074686520617373657420746f206265207377617070656420746f20627579206061737365745f6f757460c42d206061737365745f6f7574603a20546865206964656e746966696572206f662074686520617373657420746f20627579c02d2060616d6f756e745f6f7574603a2054686520616d6f756e74206f66206061737365745f6f75746020746f2062757911012d20606d61785f616d6f756e745f696e603a20546865206d617820616d6f756e74206f66206061737365745f696e6020746f207370656e64206f6e20746865206275792ed1022d2060726f757465603a20536572696573206f66205b6054726164653c417373657449643e605d20746f2062652065786563757465642e2041205b6054726164653c417373657449643e605d2073706563696669657320746865206173736574207061697220286061737365745f696e602c206061737365745f6f7574602920616e642074686520414d4d202860706f6f6c602920696e207768696368207468652074726164652069732065786563757465642edc09092020204966206e6f74207370656369666965642c207468616e20746865206f6e2d636861696e20726f75746520697320757365642e190109092020204966206e6f206f6e2d636861696e2069732070726573656e742c207468656e206f6d6e69706f6f6c20726f75746520697320757365642061732064656661756c740098456d6974732060526f757465457865637574656460207768656e207375636365737366756c2e247365745f726f75746508012861737365745f70616972c90501544173736574506169723c543a3a417373657449643e0001246e65775f726f757465610201585665633c54726164653c543a3a417373657449643e3e000254bc5365747320746865206f6e2d636861696e20726f75746520666f72206120676976656e20617373657420706169722e00f8546865206e657720726f7574652069732076616c696461746564206279206265696e6720657865637574656420696e2061206472792d72756e206d6f64650085014966207468657265206973206e6f20726f757465206578706c696369746c792073657420666f7220616e20617373657420706169722c207468656e2077652075736520746865206f6d6e69706f6f6c20726f7574652061732064656661756c742e0029015768656e2061206e657720726f757465206973207365742c20776520636f6d7061726520697420746f20746865206578697374696e6720286f722064656661756c742920726f7574652ea10154686520636f6d70617269736f6e2068617070656e732062792063616c63756c6174696e672073656c6c20616d6f756e745f6f75747320666f722074686520726f757465732c2062757420616c736f20666f722074686520696e76657273656420726f757465732e00650154686520726f7574652069732073746f72656420696e20616e206f726465726564206d616e6e65722c206261736564206f6e20746865206f646572206f66207468652069647320696e2074686520617373657420706169722e00f449662074686520726f75746520697320736574207375636365737366756c6c792c207468656e2074686520666565206973207061796564206261636b2e00a82d20606f726967696e603a20546865206f726967696e206f662074686520726f757465207365747465722d012d206061737365745f70616972603a20546865206964656e746966696572206f66207468652061737365742d7061697220666f722077686963682074686520726f75746520697320736574e1022d20606e65775f726f757465603a20536572696573206f66205b6054726164653c417373657449643e605d20746f2062652065786563757465642e2041205b6054726164653c417373657449643e605d2073706563696669657320746865206173736574207061697220286061737365745f696e602c206061737365745f6f7574602920616e642074686520414d4d202860706f6f6c602920696e207768696368207468652074726164652069732065786563757465642e0094456d6974732060526f7574655570646174656460207768656e207375636365737366756c2e0029014661696c7320776974682060526f75746555706461746549734e6f745375636365737366756c60206572726f72207768656e206661696c656420746f207365742074686520726f7574650048666f7263655f696e736572745f726f75746508012861737365745f70616972c90501544173736574506169723c543a3a417373657449643e0001246e65775f726f757465610201585665633c54726164653c543a3a417373657449643e3e0003389101466f72636520696e736572747320746865206f6e2d636861696e20726f75746520666f72206120676976656e20617373657420706169722c20736f207468657265206973206e6f20616e792076616c69646174696f6e20666f722074686520726f757465009843616e206f6e6c792062652063616c6c656420627920746563686e6963616c206f726967696e00650154686520726f7574652069732073746f72656420696e20616e206f726465726564206d616e6e65722c206261736564206f6e20746865206f646572206f66207468652069647320696e2074686520617373657420706169722e00f449662074686520726f75746520697320736574207375636365737366756c6c792c207468656e2074686520666565206973207061796564206261636b2e00a82d20606f726967696e603a20546865206f726967696e206f662074686520726f757465207365747465722d012d206061737365745f70616972603a20546865206964656e746966696572206f66207468652061737365742d7061697220666f722077686963682074686520726f75746520697320736574e1022d20606e65775f726f757465603a20536572696573206f66205b6054726164653c417373657449643e605d20746f2062652065786563757465642e2041205b6054726164653c417373657449643e605d2073706563696669657320746865206173736574207061697220286061737365745f696e602c206061737365745f6f7574602920616e642074686520414d4d202860706f6f6c602920696e207768696368207468652074726164652069732065786563757465642e0094456d6974732060526f7574655570646174656460207768656e207375636365737366756c2e002073656c6c5f616c6c10012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a417373657449640001386d696e5f616d6f756e745f6f7574180128543a3a42616c616e6365000114726f757465610201585665633c54726164653c543a3a417373657449643e3e000438fc457865637574657320612073656c6c2077697468206120736572696573206f66207472616465732073706563696669656420696e2074686520726f7574652ec449742073656c6c7320616c6c20726564756369626c6520757365722062616c616e6365206f66206061737365745f696e60010154686520707269636520666f7220656163682074726164652069732064657465726d696e65642062792074686520636f72726573706f6e64696e6720414d4d2e00942d20606f726967696e603a20546865206578656375746f72206f6620746865207472616465c42d206061737365745f696e603a20546865206964656e746966696572206f662074686520617373657420746f2073656c6cd42d206061737365745f6f7574603a20546865206964656e746966696572206f662074686520617373657420746f207265636569766505012d20606d696e5f616d6f756e745f6f7574603a20546865206d696e696d756d20616d6f756e74206f66206061737365745f6f75746020746f20726563656976652ed1022d2060726f757465603a20536572696573206f66205b6054726164653c417373657449643e605d20746f2062652065786563757465642e2041205b6054726164653c417373657449643e605d2073706563696669657320746865206173736574207061697220286061737365745f696e602c206061737365745f6f7574602920616e642074686520414d4d202860706f6f6c602920696e207768696368207468652074726164652069732065786563757465642edc09092020204966206e6f74207370656369666965642c207468616e20746865206f6e2d636861696e20726f75746520697320757365642e190109092020204966206e6f206f6e2d636861696e2069732070726573656e742c207468656e206f6d6e69706f6f6c20726f75746520697320757365642061732064656661756c740098456d6974732060526f757465457865637574656460207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9050c38687964726164785f74726169747318726f7574657224417373657450616972041c4173736574496401100008012061737365745f696e10011c4173736574496400012461737365745f6f757410011c417373657449640000cd050c4c70616c6c65745f64796e616d69635f666565731870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed1050c3870616c6c65745f7374616b696e671870616c6c65741043616c6c04045400011448696e697469616c697a655f7374616b696e6700001c45015374616b696e672070616c6c657420696e697469616c697a6174696f6e2e20546869732063616c6c2077696c6c2072657365727665642060706f746027732062616c616e636520746f2070726576656e7405016163636f756e742064757374696e6720616e6420737461727420636f6c6c656374696e6720666565732066726f6d2074726164657320617320726577617264732e00690160706f7460e2809973206163636f756e742068617320746f206861766520612062616c616e63652077686963682077696c6c20626520726573657276656420746f2070726576656e74206163636f756e742064757374696e672e00c4456d69747320605374616b696e67496e697469616c697a656460206576656e74207768656e207375636365737366756c2e00147374616b65040118616d6f756e7418011c42616c616e6365000138ac5374616b652060616d6f756e746020696e746f2061206e6577207374616b696e6720706f736974696f6e2e005901607374616b6560206c6f636b73207370656369666965642060616d6f756e746020696e746f207374616b696e6720616e642063726561746573206e6577204e465420726570726573656e74696e67207374616b696e6724706f736974696f6e2e390155736572732063616e207374616b6520604e617469766541737365744964602062616c616e6365207768696368206973206e6f7420766573746564206f7220616c7265616479207374616b65642e0031015374616b696e672070616c6c6574206d75737420626520696e697469616c697a6564206f74686572776973652065787472696e7369632077696c6c206661696c2077697468206572726f722e002c506172616d65746572733a51012d2060616d6f756e74603a20416d6f756e74206f66206e617469766520617373657420746f206265207374616b65642e2060616d6f756e74602063616e277420626520766573746564206f7220616c7265616479187374616b656400b8456d6974732060506f736974696f6e4372656174656460206576656e74207768656e207375636365737366756c2e0038696e6372656173655f7374616b6508012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000118616d6f756e7418011c42616c616e63650002405d0145787472696e73696320746f20696e637265617365207374616b656420616d6f756e74206f66206578697374696e67207374616b696e6720706f736974696f6e206279207370656369666965642060616d6f756e74602e00550160696e6372656173655f7374616b656020696e63726561736573207374616b656420616d6f756e74206f6620706f736974696f6e207370656369666965642062792060706f7374696f6e5f696460206279207468657c60616d6f756e7460207370656369666965642062792074686520757365722e35015374616b696e6720706f736974696f6e206d75737420657869737420616e6420606f726967696e602068617320746f20626520746865206f776e6572206f662074686520706f736974696f6e2ef855736572732063616e207374616b6520746f6b656e7320776869636820617265206e6f7420766573746564206f7220616c7265616479207374616b65642e3501506f736974696f6e277320706172616d7320652e6720706f696e747320617265207570646174656420746f206f6666736574207374616b6520696e63726561736520616e642072657761726473f4616363756d756c6174656420756e74696c207468697320706f696e7420617265207061696420616e64206c6f636b656420746f2074686520757365722e002c506172616d65746572733a39012d2060706f736974696f6e5f6964603a20546865206964656e746966696572206f662074686520706f736974696f6e207768696368207374616b652077696c6c20626520696e637265617365642e71012d2060616d6f756e74603a20416d6f756e74206f66206e617469766520617373657420746f20626520616464656420746f207374616b656420616d6f756e742e2060616d6f756e74602063616e277420626520766573746564206f7238616c7265616479207374616b656400a4456d69747320605374616b65416464656460206576656e74207768656e207375636365737366756c2e0014636c61696d04012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000338e0436c61696d207265776172647320616363756d756c6174656420666f72207370656369666963207374616b696e6720706f736974696f6e2e00510146756e6374696f6e2063616c63756c6174657320616d6f756e74206f66207265776172647320746f2070617920666f7220737065636966696564207374616b696e6720706f736974696f6e206261736564206f6e5d0174686520616d6f756e74206f6620706f696e747320706f736974696f6e20616363756d756c617465642e2046756e6374696f6e20616c736f20756e6c6f636b7320616c6c207468652072657761726473206c6f636b6564e066726f6d2060696e6372656173655f7374616b6560206261736564206f6e2074686520616d6f756e74206f662074686520706f696e74732e0069015468697320616374696f6e2069732070656e616c697a65642062792072656d6f76696e6720616c6c2074686520706f696e747320616e642072657475726e696e6720616c6c6f636174656420756e7061696420726577617264734c666f72207265646973747269627574696f6e2e002c506172616d65746572733a15012d2060706f736974696f6e5f6964603a20546865206964656e746966696572206f662074686520706f736974696f6e20746f20636c61696d207265776172647320666f722e00b4456d697473206052657761726473436c61696d656460206576656e74207768656e207375636365737366756c2e001c756e7374616b6504012c706f736974696f6e5f6964180144543a3a506f736974696f6e4974656d4964000430490146756e6374696f6e207061797320726577617264732c20756e6c6f636b7320616c6c20746865207374616b65642061737365747320616e642064657374726f7973207374616b696e6720706f736974696f6e6c7370656369666965642062792060706f736974696f6e5f6964602e00590146756e6374696f6e2063616c63756c6174657320616e642070617973206c617465737420726577617264732c20756e6c6f636b7320616c6c20746865206c6f636b6564207265776172647320616e64207374616b65642101746f6b656e7320666f72207374616b696e6720706f736974696f6e20616e64206275726e73204e465420726570726573656e74696e67207374616b696e6720706f736974696f6e2e2101556e7061696420616c6c6f63617465642072657761726473206172652072657475726e656420746f20746865205374616b696e6720666f72207265646973747269627574696f6e2e002c506172616d65746572733a01012d2060706f736974696f6e5f6964603a20546865206964656e746966696572206f662074686520706f736974696f6e20746f2062652064657374726f7965642e00f4456d697473206052657761726473436c61696d65646020616e642060556e7374616b656460206576656e7473207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5050c4470616c6c65745f737461626c65737761701870616c6c65741043616c6c0404540001282c6372656174655f706f6f6c10012c73686172655f6173736574100128543a3a417373657449640001186173736574739d01013c5665633c543a3a417373657449643e000134616d706c696669636174696f6edc010c75313600010c6665656901011c5065726d696c6c000038bc437265617465206120737461626c6520706f6f6c207769746820676976656e206c697374206f66206173736574732e00f8416c6c20617373657473206d75737420626520636f72726563746c79207265676973746572656420696e2060543a3a41737365745265676973747279602e51014e6f74652074686174207468697320646f6573206e6f7420736565642074686520706f6f6c2077697468206c69717569646974792e2055736520606164645f6c69717569646974796020746f2070726f7669646548696e697469616c206c69717569646974792e002c506172616d65746572733a982d20606f726967696e603a204d75737420626520543a3a417574686f726974794f726967696ed42d206073686172655f6173736574603a2050726572656769737465726564207368617265206173736574206964656e746966696572742d2060617373657473603a204c697374206f6620417373657420696473942d2060616d706c696669636174696f6e603a20506f6f6c20616d706c696669636174696f6ef02d2060666565603a2066656520746f206265206170706c696564206f6e20747261646520616e64206c6971756964697479206f7065726174696f6e7300a0456d6974732060506f6f6c4372656174656460206576656e74206966207375636365737366756c2e3c7570646174655f706f6f6c5f66656508011c706f6f6c5f6964100128543a3a4173736574496400010c6665656901011c5065726d696c6c0001284855706461746520706f6f6c2773206665652e00cc696620706f6f6c20646f6573206e6f742065786973742c2060506f6f6c4e6f74466f756e64602069732072657475726e65642e002c506172616d65746572733a982d20606f726967696e603a204d75737420626520543a3a417574686f726974794f726967696e6c2d2060706f6f6c5f6964603a20706f6f6c20746f20757064617465542d2060666565603a206e657720706f6f6c20666565009c456d69747320604665655570646174656460206576656e74206966207375636365737366756c2e507570646174655f616d706c696669636174696f6e10011c706f6f6c5f6964100128543a3a4173736574496400014c66696e616c5f616d706c696669636174696f6edc010c75313600012c73746172745f626c6f636b100144426c6f636b4e756d626572466f723c543e000124656e645f626c6f636b100144426c6f636b4e756d626572466f723c543e0002247055706461746520706f6f6c277320616d706c696669636174696f6e2e002c506172616d65746572733a982d20606f726967696e603a204d75737420626520543a3a417574686f726974794f726967696e6c2d2060706f6f6c5f6964603a20706f6f6c20746f20757064617465e02d20606675747572655f616d706c696669636174696f6e603a206e6577206465736972656420706f6f6c20616d706c696669636174696f6e1d012d20606675747572655f626c6f636b603a2066757475726520626c6f636b206e756d626572207768656e2074686520616d706c696669636174696f6e206973207570646174656400c4456d6974732060416d706c696669636174696f6e5570646174656460206576656e74206966207375636365737366756c2e346164645f6c697175696469747908011c706f6f6c5f6964100128543a3a41737365744964000118617373657473b10101705665633c4173736574416d6f756e743c543a3a417373657449643e3e0003407c416464206c697175696469747920746f2073656c656374656420706f6f6c2e00350146697273742063616c6c206f6620606164645f6c697175696469747960206d7573742070726f766964652022696e697469616c206c697175696469747922206f6620616c6c206173736574732e0085014966207468657265206973206c697175696469747920616c726561647920696e2074686520706f6f6c2c204c502063616e2070726f76696465206c6971756964697479206f6620616e79206e756d626572206f6620706f6f6c206173736574732e00b44c50206d75737420686176652073756666696369656e7420616d6f756e74206f6620656163682061737365742e00bc4f726967696e20697320676976656e20636f72726573706f6e64696e6720616d6f756e74206f66207368617265732e002c506172616d65746572733a782d20606f726967696e603a206c69717569646974792070726f7669646572502d2060706f6f6c5f6964603a20506f6f6c204964c82d2060617373657473603a20617373657420696420616e64206c697175696469747920616d6f756e742070726f766964656400b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e506164645f6c69717569646974795f73686172657310011c706f6f6c5f6964100128543a3a4173736574496400011873686172657318011c42616c616e636500012061737365745f6964100128543a3a417373657449640001406d61785f61737365745f616d6f756e7418011c42616c616e63650004381d01416464206c697175696469747920746f2073656c656374656420706f6f6c20676976656e20657861637420616d6f756e74206f662073686172657320746f20726563656976652e00390153696d696c617220746f20606164645f6c69717569646974796020627574204c502073706563696669657320657861637420616d6f756e74206f662073686172657320746f20726563656976652e00dd01546869732066756e6374696f6e616c6974792069732075736564206d61696e6c79206279206f6e2d636861696e20726f7574696e67207768656e20612073776170206265747765656e204f6d6e69706f6f6c20617373657420616e6420737461626c6520617373657420697320706572666f726d65642e002c506172616d65746572733a782d20606f726967696e603a206c69717569646974792070726f7669646572502d2060706f6f6c5f6964603a20506f6f6c2049649c2d2060736861726573603a20616d6f756e74206f662073686172657320746f2072656365697665e82d206061737365745f6964603a206173736574206964206f6620616e20617373657420746f2070726f76696465206173206c6971756964697479e82d20606d61785f61737365745f616d6f756e74603a20736c697070616765206c696d69742e204d617820616d6f756e74206f662061737365742e00b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e6872656d6f76655f6c69717569646974795f6f6e655f617373657410011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f6964100128543a3a4173736574496400013073686172655f616d6f756e7418011c42616c616e63650001386d696e5f616d6f756e745f6f757418011c42616c616e63650005409052656d6f7665206c69717569646974792066726f6d2073656c656374656420706f6f6c2e00c8576974686472617773206c6971756964697479206f662073656c65637465642061737365742066726f6d206120706f6f6c2e003101536861726520616d6f756e74206973206275726e656420616e64204c5020726563656976657320636f72726573706f6e64696e6720616d6f756e74206f662063686f73656e2061737365742e00b0576974686472617720666565206973206170706c69656420746f2074686520617373657420616d6f756e742e002c506172616d65746572733a782d20606f726967696e603a206c69717569646974792070726f7669646572502d2060706f6f6c5f6964603a20506f6f6c204964902d206061737365745f6964603a206964206f6620617373657420746f2072656365697665b82d202773686172655f616d6f756e74273a20616d6f756e74206f662073686172657320746f207769746864726177b42d20276d696e5f616d6f756e745f6f7574273a206d696e696d756d20616d6f756e7420746f207265636569766500bc456d69747320604c697175696469747952656d6f76656460206576656e74207768656e207375636365737366756c2e5477697468647261775f61737365745f616d6f756e7410011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f6964100128543a3a41737365744964000118616d6f756e7418011c42616c616e63650001406d61785f73686172655f616d6f756e7418011c42616c616e63650006304d0152656d6f7665206c69717569646974792066726f6d2073656c656374656420706f6f6c2062792073706563696679696e6720657861637420616d6f756e74206f6620617373657420746f20726563656976652e00c90153696d696c617220746f206072656d6f76655f6c69717569646974795f6f6e655f61737365746020627574204c502073706563696669657320657861637420616d6f756e74206f6620617373657420746f207265636569766520696e7374656164206f6620736861726520616d6f756e742e002c506172616d65746572733a782d20606f726967696e603a206c69717569646974792070726f7669646572502d2060706f6f6c5f6964603a20506f6f6c204964902d206061737365745f6964603a206964206f6620617373657420746f2072656365697665982d2027616d6f756e74273a20616d6f756e74206f6620617373657420746f20726563656976650d012d20276d61785f73686172655f616d6f756e74273a20536c697070616765206c696d69742e204d617820616d6f756e74206f662073686172657320746f206275726e2e00bc456d69747320604c697175696469747952656d6f76656460206576656e74207768656e207375636365737366756c2e1073656c6c14011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f696e100128543a3a4173736574496400012461737365745f6f7574100128543a3a41737365744964000124616d6f756e745f696e18011c42616c616e63650001386d696e5f6275795f616d6f756e7418011c42616c616e6365000730b44578656375746520612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e002c506172616d65746572733a802d20606f726967696e603a206f726967696e206f66207468652063616c6c6572642d2060706f6f6c5f6964603a204964206f66206120706f6f6ca82d206061737365745f696e603a204944206f6620617373657420736f6c6420746f2074686520706f6f6cbc2d206061737365745f6f7574603a204944206f6620617373657420626f756768742066726f6d2074686520706f6f6cd42d2060616d6f756e745f696e603a20416d6f756e74206f6620617373657420746f20626520736f6c6420746f2074686520706f6f6cd82d20606d696e5f6275795f616d6f756e74603a204d696e696d756d20616d6f756e7420726571756972656420746f207265636569766500ac456d697473206053656c6c457865637574656460206576656e74207768656e207375636365737366756c2e000c62757914011c706f6f6c5f6964100128543a3a4173736574496400012461737365745f6f7574100128543a3a4173736574496400012061737365745f696e100128543a3a41737365744964000128616d6f756e745f6f757418011c42616c616e636500013c6d61785f73656c6c5f616d6f756e7418011c42616c616e6365000830b44578656375746520612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e002c506172616d65746572733a2c2d20606f726967696e603a642d2060706f6f6c5f6964603a204964206f66206120706f6f6cbc2d206061737365745f6f7574603a204944206f6620617373657420626f756768742066726f6d2074686520706f6f6ca82d206061737365745f696e603a204944206f6620617373657420736f6c6420746f2074686520706f6f6ce02d2060616d6f756e745f6f7574603a20416d6f756e74206f6620617373657420746f20726563656976652066726f6d2074686520706f6f6cd82d20606d61785f73656c6c5f616d6f756e74603a204d6178696d756d20616d6f756e7420616c6c6f77656420746f20626520736f6c6400a8456d6974732060427579457865637574656460206576656e74207768656e207375636365737366756c2e00607365745f61737365745f7472616461626c655f73746174650c011c706f6f6c5f6964100128543a3a4173736574496400012061737365745f6964100128543a3a417373657449640001147374617465b901012c547261646162696c697479000900040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed9050c3070616c6c65745f626f6e64731870616c6c65741043616c6c0404540001081469737375650c012061737365745f696410011c41737365744964000118616d6f756e74180128543a3a42616c616e63650001206d617475726974793001184d6f6d656e74000054644973737565206e65772066756e6769626c6520626f6e64732ed44e6577206173736574206964206973207265676973746572656420616e642061737369676e656420746f2074686520626f6e64732e5901546865206e756d626572206f6620626f6e6473207468652069737375657220726563656976657320697320313a3120746f207468652060616d6f756e7460206f662074686520756e6465726c79696e672061737365745c6d696e7573207468652070726f746f636f6c206665652e190154686520626f6e64206173736574206973207265676973746572656420776974682074686520656d70747920737472696e6720666f7220746865206173736574206e616d652c0501616e642077697468207468652073616d65206578697374656e7469616c206465706f736974206173206f662074686520756e6465726c79696e672061737365742eec426f6e64732063616e2062652072656465656d656420666f722074686520756e6465726c79696e67206173736574206f6e6365206d61747572652e2d0150726f746f636f6c20666565206973206170706c69656420746f2074686520616d6f756e742c20616e64207472616e7366657272656420746f2060543a3a4665655265636569766572602e69015768656e2069737375696e67206e657720626f6e647320776974682074686520756e6465726c79696e6720617373657420616e64206d617475726974792074686174206d617463686573206578697374696e6720626f6e64732c3d016e657720616d6f756e74206f66207468657365206578697374696e6720626f6e6473206973206973737565642c20696e7374656164206f66207265676973746572696e67206e657720626f6e64732e0d014974277320706f737369626c6520746f206973737565206e657720626f6e647320666f7220626f6e647320746861742061726520616c7265616479206d61747572652e002c506172616d65746572733af42d20606f726967696e603a20697373756572206f66206e657720626f6e64732c206e6565647320746f2062652060543a3a49737375654f726967696e60842d206061737365745f6964603a20756e6465726c79696e67206173736574206964b82d2060616d6f756e74603a2074686520616d6f756e74206f662074686520756e6465726c79696e672061737365741d012d20606d61747572697479603a20556e69782074696d6520696e206d696c6c697365636f6e64732c207768656e2074686520626f6e64732077696c6c206265206d61747572652e003501456d6974732060426f6e64546f6b656e4372656174656460206576656e74207768656e207375636365737366756c20616e64206e657720626f6e6473207765726520726567697374657265642ea8456d6974732060426f6e647349737375656460206576656e74207768656e207375636365737366756c2e001872656465656d08011c626f6e645f696410011c41737365744964000118616d6f756e74180128543a3a42616c616e63650001309852656465656d20626f6e647320666f722074686520756e6465726c79696e672061737365742e750154686520616d6f756e74206f662074686520756e6465726c79696e672061737365742074686520606f726967696e6020726563656976657320697320313a3120746f207468652060616d6f756e7460206f662074686520626f6e64732ec8416e796f6e652077686f20686f6c64732074686520626f6e64732069732061626c6520746f2072656465656d207468656d2eb8426f6e64732063616e20626520626f7468207061727469616c6c79206f722066756c6c792072656465656d65642e002c506172616d65746572733a582d20606f726967696e603a206163636f756e742069646c2d206061737365745f6964603a20626f6e6420617373657420696419012d2060616d6f756e74603a2074686520616d6f756e74206f662074686520626f6e647320746f2072656465656d20666f722074686520756e6465726c79696e6720617373657400b0456d6974732060426f6e647352656465656d656460206576656e74207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd050c5870616c6c65745f6f74635f736574746c656d656e74731870616c6c65741043616c6c04045400010440736574746c655f6f74635f6f726465720c01186f74635f696410011c4f726465724964000118616d6f756e7418011c42616c616e6365000114726f757465610201605665633c54726164653c417373657449644f663c543e3e3e000050b0436c6f736520616e206578697374696e67204f544320617262697472616765206f70706f7274756e6974792e00d445786563757465732061207472616465206265747765656e20616e204f5443206f7264657220616e6420736f6d6520726f7574652e5501496620746865204f5443206f72646572206973207061727469616c6c792066696c6c61626c652c207468652065787472696e736963206661696c7320696620746865206578697374696e6720617262697472616765d46f70706f7274756e697479206973206e6f7420636c6f736564206f722072656475636564206166746572207468652074726164652e6101496620746865204f5443206f72646572206973206e6f74207061727469616c6c792066696c6c61626c652c206661696c73206966207468657265206973206e6f2070726f666974206166746572207468652074726164652e001101604f726967696e602063616c6c696e6720746869732065787472696e736963206973206e6f7420706179696e67206f7220726563656976696e6720616e797468696e672e0025015468652070726f666974206d61646520627920636c6f73696e672074686520617262697472616765206973207472616e7366657272656420746f20604665655265636569766572602e002c506172616d65746572733a39012d20606f726967696e603a205369676e6564206f7220756e7369676e6564206f726967696e2e20556e7369676e6564206f726967696e20646f65736e27742070617920746865205458206665652cac0909096275742063616e206265207375626d6974746564206f6e6c79206279206120636f6c6c61746f722e11012d20606f74635f6964603a204944206f6620746865204f5443206f726465722077697468206578697374696e6720617262697472616765206f70706f7274756e6974792eb82d2060616d6f756e74603a20416d6f756e74206e656365737361727920746f20636c6f736520746865206172622e21012d2060726f757465603a2054686520726f75746520776520747261646520616761696e73742e20526571756972656420666f7220746865206665652063616c63756c6174696f6e2e009c456d6974732060457865637574656460206576656e74207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee1050c2870616c6c65745f6c62701870616c6c65741043616c6c0404540001182c6372656174655f706f6f6c2c0128706f6f6c5f6f776e6572000130543a3a4163636f756e74496400011c61737365745f6110011c4173736574496400013861737365745f615f616d6f756e7418011c42616c616e636500011c61737365745f6210011c4173736574496400013861737365745f625f616d6f756e7418011c42616c616e6365000138696e697469616c5f7765696768741001244c425057656967687400013066696e616c5f7765696768741001244c42505765696768740001307765696768745f6375727665d101013c57656967687443757276655479706500010c66656591010128287533322c20753332290001346665655f636f6c6c6563746f72000130543a3a4163636f756e74496400013072657061795f74617267657418011c42616c616e6365000084fc4372656174652061206e6577206c697175696469747920626f6f74737472617070696e6720706f6f6c20666f7220676976656e20617373657420706169722e00d8466f7220616e7920617373657420706169722c206f6e6c79206f6e6520706f6f6c2063616e20657869737420617420612074696d652e000101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a437265617465506f6f6c4f726967696e602e550154686520706f6f6c2069732063726561746564207769746820696e697469616c206c69717569646974792070726f7669646564206279207468652060706f6f6c5f6f776e6572602077686f206d75737420686176655873756666696369656e742066756e647320667265652e00a10154686520706f6f6c2073746172747320756e696e697469616c697a656420616e64207570646174655f706f6f6c2063616c6c2073686f756c642062652063616c6c6564206f6e6365206372656174656420746f207365742074686520737461727420626c6f636b2e003901546869732066756e6374696f6e2073686f756c6420626520646973706174636865642066726f6d20676f7665726e696e6720656e746974792060543a3a437265617465506f6f6c4f726967696e60002c506172616d65746572733ac42d2060706f6f6c5f6f776e6572603a2074686520667574757265206f776e6572206f6620746865206e657720706f6f6c2e21012d206061737365745f61603a207b2061737365745f69642c20616d6f756e74207d20417373657420494420616e6420696e697469616c206c697175696469747920616d6f756e742e21012d206061737365745f62603a207b2061737365745f69642c20616d6f756e74207d20417373657420494420616e6420696e697469616c206c697175696469747920616d6f756e742ea1012d2060696e697469616c5f776569676874603a20496e697469616c20776569676874206f66207468652061737365745f612e20315f3030305f30303020636f72726573706f6e64696e6720746f20312520616e64203130305f3030305f30303020746f20313030259c746869732073686f756c6420626520686967686572207468616e2066696e616c2077656967687491012d206066696e616c5f776569676874603a2046696e616c20776569676874206f66207468652061737365745f612e20315f3030305f30303020636f72726573706f6e64696e6720746f20312520616e64203130305f3030305f30303020746f2031303025a0746869732073686f756c64206265206c6f776572207468616e20696e697469616c2077656967687441012d20607765696768745f6375727665603a20546865207765696768742066756e6374696f6e207573656420746f2075706461746520746865204c425020776569676874732e2043757272656e746c792c0d017468657265206973206f6e6c79206f6e65207765696768742066756e6374696f6e20696d706c656d656e7465642c20746865206c696e6561722066756e6374696f6e2e3d012d2060666565603a205468652074726164696e67206665652063686172676564206f6e20657665727920747261646520646973747269627574656420746f20606665655f636f6c6c6563746f72602e25012d20606665655f636f6c6c6563746f72603a20546865206163636f756e7420746f2077686963682074726164696e6720666565732077696c6c206265207472616e736665727265642e9d012d206072657061795f746172676574603a2054686520616d6f756e74206f6620746f6b656e7320746f20726570617920746f207365706172617465206665655f636f6c6c6563746f72206163636f756e742e20556e74696c207468697320616d6f756e74206973f4726561636865642c206665652077696c6c20626520696e6372656173656420746f2032302520616e642074616b656e2066726f6d2074686520706f6f6c00a8456d6974732060506f6f6c4372656174656460206576656e74207768656e207375636365737366756c2e009d014245574152453a205765206172652074616b696e6720746865206665652066726f6d2074686520616363756d756c617465642061737365742e2049662074686520616363756d756c6174656420617373657420697320736f6c6420746f2074686520706f6f6c2c79017468652066656520636f7374206973207472616e7366657272656420746f2074686520706f6f6c2e2049662069747320626f756768742066726f6d2074686520706f6f6c207468652062757965722062656172732074686520636f73742e69015468697320696e6372656173657320746865207072696365206f662074686520736f6c64206173736574206f6e2065766572792074726164652e204d616b65207375726520746f206f6e6c792072756e207468697320776974686c70726576696f75736c7920696c6c6971756964206173736574732e407570646174655f706f6f6c5f6461746124011c706f6f6c5f6964000124506f6f6c49643c543e000128706f6f6c5f6f776e6572010101504f7074696f6e3c543a3a4163636f756e7449643e0001147374617274cd0101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00010c656e64cd0101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000138696e697469616c5f776569676874cd0101444f7074696f6e3c4c42505765696768743e00013066696e616c5f776569676874cd0101444f7074696f6e3c4c42505765696768743e00010c666565950101484f7074696f6e3c287533322c20753332293e0001346665655f636f6c6c6563746f72010101504f7074696f6e3c543a3a4163636f756e7449643e00013072657061795f746172676574f4013c4f7074696f6e3c42616c616e63653e0001486c55706461746520706f6f6c2064617461206f66206120706f6f6c2e000d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206f776e65722e00050154686520706f6f6c2063616e2062652075706461746564206f6e6c79206966207468652073616c6520686173206e6f7420616c726561647920737461727465642e0019014174206c65617374206f6e65206f662074686520666f6c6c6f77696e67206f7074696f6e616c20706172616d65746572732068617320746f206265207370656369666965642e002c506172616d65746572733ad82d2060706f6f6c5f6964603a20546865206964656e746966696572206f662074686520706f6f6c20746f20626520757064617465642e25012d20607374617274603a20546865206e6577207374617274696e672074696d65206f66207468652073616c652e205468697320706172616d65746572206973206f7074696f6e616c2e15012d2060656e64603a20546865206e657720656e64696e672074696d65206f66207468652073616c652e205468697320706172616d65746572206973206f7074696f6e616c2e1d012d2060696e697469616c5f776569676874603a20546865206e657720696e697469616c207765696768742e205468697320706172616d65746572206973206f7074696f6e616c2e0d012d206066696e616c5f776569676874603a20546865206e65772066696e616c207765696768742e205468697320706172616d65746572206973206f7074696f6e616c2e41012d2060666565603a20546865206e65772074726164696e67206665652063686172676564206f6e2065766572792074726164652e205468697320706172616d65746572206973206f7074696f6e616c2e41012d20606665655f636f6c6c6563746f72603a20546865206e6577207265636569766572206f662074726164696e6720666565732e205468697320706172616d65746572206973206f7074696f6e616c2e00a8456d6974732060506f6f6c5570646174656460206576656e74207768656e207375636365737366756c2e346164645f6c6971756964697479080120616d6f756e745f61e505015c28417373657449642c2042616c616e63654f663c543e29000120616d6f756e745f62e505015c28417373657449642c2042616c616e63654f663c543e2900023060416464206c697175696469747920746f206120706f6f6c2e004d0141737365747320746f206164642068617320746f206d617463682074686520706f6f6c206173736574732e204174206c65617374206f6e6520616d6f756e742068617320746f206265206e6f6e2d7a65726f2e000d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206f776e65722e002c506172616d65746572733a9c2d2060706f6f6c5f6964603a20546865206964656e746966696572206f662074686520706f6f6c01012d2060616d6f756e745f61603a20546865206964656e746966696572206f662074686520617373657420616e642074686520616d6f756e7420746f206164642e1d012d2060616d6f756e745f62603a20546865206964656e746966696572206f6620746865207365636f6e6420617373657420616e642074686520616d6f756e7420746f206164642e00b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e4072656d6f76655f6c697175696469747904011c706f6f6c5f6964000124506f6f6c49643c543e00032c4d015472616e7366657220616c6c20746865206c69717569646974792066726f6d206120706f6f6c206261636b20746f2074686520706f6f6c206f776e657220616e642064657374726f792074686520706f6f6c2ec054686520706f6f6c20646174612061726520616c736f2072656d6f7665642066726f6d207468652073746f726167652e00b054686520706f6f6c2063616e27742062652064657374726f79656420647572696e67207468652073616c652e000d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206f776e65722e002c506172616d65746572733a01012d2060616d6f756e745f61603a20546865206964656e746966696572206f662074686520617373657420616e642074686520616d6f756e7420746f206164642e00a4456d69747320274c697175696469747952656d6f76656427207768656e207375636365737366756c2e1073656c6c10012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000118616d6f756e7418013042616c616e63654f663c543e0001246d61785f6c696d697418013042616c616e63654f663c543e000438845472616465206061737365745f696e6020666f72206061737365745f6f7574602e005501457865637574657320612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e2050726963652069732064657465726d696e65642062792074686520706f6f6c20616e64206973250161666665637465642062792074686520616d6f756e7420616e642070726f706f7274696f6e206f662074686520706f6f6c2061737365747320616e642074686520776569676874732e00d054726164696e6720606665656020697320646973747269627574656420746f2074686520606665655f636f6c6c6563746f72602e002c506172616d65746572733a65012d206061737365745f696e603a20546865206964656e746966696572206f6620746865206173736574206265696e67207472616e736665727265642066726f6d20746865206163636f756e7420746f2074686520706f6f6c2e69012d206061737365745f6f7574603a20546865206964656e746966696572206f6620746865206173736574206265696e67207472616e736665727265642066726f6d2074686520706f6f6c20746f20746865206163636f756e742e902d2060616d6f756e74603a2054686520616d6f756e74206f66206061737365745f696e60ed012d20606d61785f6c696d6974603a206d696e696d756d20616d6f756e74206f66206061737365745f6f757460202f20616d6f756e74206f662061737365745f6f757420746f206265206f627461696e65642066726f6d2074686520706f6f6c20696e2065786368616e676520666f72206061737365745f696e602e0094456d697473206053656c6c457865637574656460207768656e207375636365737366756c2e0c62757910012461737365745f6f757410011c4173736574496400012061737365745f696e10011c41737365744964000118616d6f756e7418013042616c616e63654f663c543e0001246d61785f6c696d697418013042616c616e63654f663c543e000538845472616465206061737365745f696e6020666f72206061737365745f6f7574602e005501457865637574657320612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e2050726963652069732064657465726d696e65642062792074686520706f6f6c20616e64206973350161666665637465642062792074686520616d6f756e7420616e64207468652070726f706f7274696f6e206f662074686520706f6f6c2061737365747320616e642074686520776569676874732e00d054726164696e6720606665656020697320646973747269627574656420746f2074686520606665655f636f6c6c6563746f72602e002c506172616d65746572733a65012d206061737365745f696e603a20546865206964656e746966696572206f6620746865206173736574206265696e67207472616e736665727265642066726f6d20746865206163636f756e7420746f2074686520706f6f6c2e69012d206061737365745f6f7574603a20546865206964656e746966696572206f6620746865206173736574206265696e67207472616e736665727265642066726f6d2074686520706f6f6c20746f20746865206163636f756e742e982d2060616d6f756e74603a2054686520616d6f756e74206f66206061737365745f6f7574602e4d012d20606d61785f6c696d6974603a206d6178696d756d20616d6f756e74206f66206061737365745f696e6020746f20626520736f6c6420696e2065786368616e676520666f72206061737365745f6f7574602e0090456d6974732060427579457865637574656460207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee50500000408101800e9050c2870616c6c65745f78796b1870616c6c65741043616c6c0404540001142c6372656174655f706f6f6c10011c61737365745f6110011c41737365744964000120616d6f756e745f6118011c42616c616e636500011c61737365745f6210011c41737365744964000120616d6f756e745f6218011c42616c616e636500002494437265617465206e657720706f6f6c20666f7220676976656e20617373657420706169722e005101526567697374657273206e657720706f6f6c20666f7220676976656e2061737365742070616972202860617373657420616020616e64206061737365742062602920696e2061737365742072656769737472792e710141737365742072656769737472792063726561746573206e6577206964206f722072657475726e732070726576696f75736c792063726561746564206f6e65206966207375636820706f6f6c2065786973746564206265666f72652e00f0506f6f6c2069732063726561746564207769746820696e697469616c206c69717569646974792070726f766964656420627920606f726967696e602e7901536861726573206172652069737375656420776974682073706563696669656420696e697469616c20707269636520616e6420726570726573656e74732070726f706f7274696f6e206f6620617373657420696e2074686520706f6f6c2e00a8456d6974732060506f6f6c4372656174656460206576656e74207768656e207375636365737366756c2e346164645f6c697175696469747910011c61737365745f6110011c4173736574496400011c61737365745f6210011c41737365744964000120616d6f756e745f6118011c42616c616e6365000148616d6f756e745f625f6d61785f6c696d697418011c42616c616e6365000114d0416464206c697175696469747920746f2070726576696f75736c792063726561746564206173736574207061697220706f6f6c2e0094536861726573206172652069737375656420776974682063757272656e742070726963652e00b4456d69747320604c6971756964697479416464656460206576656e74207768656e207375636365737366756c2e4072656d6f76655f6c69717569646974790c011c61737365745f6110011c4173736574496400011c61737365745f6210011c417373657449640001406c69717569646974795f616d6f756e7418011c42616c616e6365000218310152656d6f7665206c69717569646974792066726f6d207370656369666963206c697175696469747920706f6f6c20696e2074686520666f726d206f66206275726e696e67207368617265732e00d04966206c697175696469747920696e2074686520706f6f6c207265616368657320302c2069742069732064657374726f7965642e00a4456d69747320274c697175696469747952656d6f76656427207768656e207375636365737366756c2eb4456d6974732027506f6f6c44657374726f79656427207768656e20706f6f6c2069732064657374726f7965642e1073656c6c14012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000118616d6f756e7418011c42616c616e63650001246d61785f6c696d697418011c42616c616e6365000120646973636f756e74200110626f6f6c00031c74547261646520617373657420696e20666f72206173736574206f75742e006501457865637574657320612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e2050726963652069732064657465726d696e656420627920746865206c697175696469747920706f6f6c2e00e901606d61785f6c696d697460202d206d696e696d756d20616d6f756e74206f66206061737365745f6f757460202f20616d6f756e74206f662061737365745f6f757420746f206265206f627461696e65642066726f6d2074686520706f6f6c20696e2065786368616e676520666f72206061737365745f696e602e0094456d697473206053656c6c457865637574656460207768656e207375636365737366756c2e0c62757914012461737365745f6f757410011c4173736574496400012061737365745f696e10011c41737365744964000118616d6f756e7418011c42616c616e63650001246d61785f6c696d697418011c42616c616e6365000120646973636f756e74200110626f6f6c00041c74547261646520617373657420696e20666f72206173736574206f75742e006501457865637574657320612073776170206f66206061737365745f696e6020666f72206061737365745f6f7574602e2050726963652069732064657465726d696e656420627920746865206c697175696469747920706f6f6c2e004901606d61785f6c696d697460202d206d6178696d756d20616d6f756e74206f66206061737365745f696e6020746f20626520736f6c6420696e2065786368616e676520666f72206061737365745f6f7574602e0090456d6974732060427579457865637574656460207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed050c4070616c6c65745f726566657272616c731870616c6c65741043616c6c0404540001143472656769737465725f636f6465040110636f6465dd01016c526566657272616c436f64653c543a3a436f64654c656e6774683e0000346c5265676973746572206e657720726566657272616c20636f64652e008c606f726967696e6020706179732074686520726567697374726174696f6e206665652ea860636f6465602069732061737369676e656420746f2074686520676976656e20606163636f756e74602e00e44c656e677468206f66207468652060636f646560206d757374206265206174206c656173742060543a3a4d696e436f64654c656e677468602eb44d6178696d756d206c656e677468206973206c696d6974656420746f2060543a3a436f64654c656e677468602e910160636f646560206d75737420636f6e7461696e206f6e6c7920616c66612d6e756d65726963206368617261637465727320616e6420616c6c20636861726163746572732077696c6c20626520636f6e76657274656420746f20757070657220636173652e002c506172616d65746572733ae42d2060636f6465603a20436f646520746f2072656769737465722e204d75737420666f6c6c6f7720746865207265737472696374696f6e732e00b4456d6974732060436f64655265676973746572656460206576656e74207768656e207375636365737366756c2e246c696e6b5f636f6465040110636f6465dd01016c526566657272616c436f64653c543a3a436f64654c656e6774683e000128684c696e6b206120636f646520746f20616e206163636f756e742e00290160436f646560206d7573742062652076616c6964207265676973746572656420636f64652e204f74686572776973652060496e76616c6964436f6465602069732072657475726e65642e00f45369676e6572206163636f756e74206973206c696e6b656420746f2074686520726566657272616c206163636f756e74206f662074686520636f64652e002c506172616d65746572733ad02d2060636f6465603a20436f646520746f2075736520746f206c696e6b20746865207369676e6572206163636f756e7420746f2e00a4456d6974732060436f64654c696e6b656460206576656e74207768656e207375636365737366756c2e1c636f6e7665727404012061737365745f6964100128543a3a41737365744964000218c0436f6e76657274206163637275656420617373657420616d6f756e7420746f207265776172642063757272656e63792e002c506172616d65746572733adc2d206061737365745f6964603a204964206f6620616e20617373657420746f20636f6e7665727420746f2052657761726441737365742e00a0456d6974732060436f6e76657274656460206576656e74207768656e207375636365737366756c2e34636c61696d5f7265776172647300032464436c61696d20616363756d756c617465642072657761726473004901494620746865726520697320616e7920617373657420696e207468652072657761726420706f742c20616c6c20697320636f6e76657274656420746f2052657761726443757272656e63792066697273742e00190152657761726420616d6f756e742069732063616c63756c61746564206261736564206f6e2074686520736861726573206f6620746865207369676e6572206163636f756e742e00d501696620746865207369676e6572206163636f756e74206973207265666572726572206163636f756e742c20746f74616c20616363756d756c61746564207265776172647320697320757064617465642061732077656c6c206173207265666572726572206c6576656c20696620726561636865642e0098456d6974732060436c61696d656460206576656e74207768656e207375636365737366756c2e547365745f7265776172645f70657263656e746167650c012061737365745f6964100128543a3a417373657449640001146c6576656ce50101144c6576656c00011c72657761726473e901013c466565446973747269627574696f6e00042070536574206173736574207265776172642070657263656e7461676573002c506172616d65746572733a582d206061737365745f6964603a206173736574206964402d20606c6576656c603a206c6576656c8c2d206072657761726473603a20726577617264206665652070657263656e746167657300c8456d69747320604173736574526577617264735570646174656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1050c2c6f726d6c5f746f6b656e73186d6f64756c651043616c6c040454000114207472616e736665720c01106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e7445010128543a3a42616c616e6365000034d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722ee049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d20627920746865fc605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c01016465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e307472616e736665725f616c6c0c01106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e637949640001286b6565705f616c697665200110626f6f6c00014cd05472616e7366657220616c6c2072656d61696e696e672062616c616e636520746f2074686520676976656e206163636f756e742e00f04e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655ff862616c616e6365732e2054686973206d65616e73207468617420616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c09016465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f74206265207472616e73666572726564206279fc746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564f86163636f756e742c20796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79b07265666572656e636520636f756e746572732c2073746f72616765206465706f736974732c206574632e2e2e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652ef02d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60050120206f7065726174696f6e2073686f756c642073656e6420616c6c206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67050120207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72207472616e736665722065766572797468696e6709012020657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e4c7472616e736665725f6b6565705f616c6976650c01106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e7445010128543a3a42616c616e636500022c050153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665728477696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e38666f7263655f7472616e73666572100118736f7572636500018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e7445010128543a3a42616c616e6365000324110145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365646163636f756e74206d6179206265207370656369666965642e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e009c2d2060736f75726365603a205468652073656e646572206f6620746865207472616e736665722ea02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e7c2d206063757272656e63795f6964603a2063757272656e637920747970652eac2d2060616d6f756e74603a20667265652062616c616e636520616d6f756e7420746f207472616e6665722e2c7365745f62616c616e636510010c77686f00018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f6964100134543a3a43757272656e637949640001206e65775f6672656545010128543a3a42616c616e63650001306e65775f726573657276656445010128543a3a42616c616e636500042090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e000901546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e206974cc77696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d0d012860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865d06578697374656e7469616c206465706f7369742c2069742077696c6c20726561702074686520604163636f756e74496e666f602e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef5050c4470616c6c65745f63757272656e63696573186d6f64756c651043616c6c04045400010c207472616e736665720c01106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696410013c43757272656e637949644f663c543e000118616d6f756e744501013042616c616e63654f663c543e000010f45472616e7366657220736f6d652062616c616e636520746f20616e6f74686572206163636f756e7420756e646572206063757272656e63795f6964602e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e607472616e736665725f6e61746976655f63757272656e63790801106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e744501013042616c616e63654f663c543e000110c45472616e7366657220736f6d65206e61746976652063757272656e637920746f20616e6f74686572206163636f756e742e00e4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e656460206279207468652c7472616e736163746f722e387570646174655f62616c616e63650c010c77686f00018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696410013c43757272656e637949644f663c543e000118616d6f756e74f901012c416d6f756e744f663c543e00020ccc75706461746520616d6f756e74206f66206163636f756e74206077686f6020756e646572206063757272656e63795f6964602e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef9050c306f726d6c5f76657374696e67186d6f64756c651043616c6c04045400011014636c61696d0000003c7665737465645f7472616e736665720801106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c650102015056657374696e675363686564756c654f663c543e000100607570646174655f76657374696e675f7363686564756c657308010c77686f00018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500014476657374696e675f7363686564756c6573fd0501645665633c56657374696e675363686564756c654f663c543e3e00020024636c61696d5f666f720401106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000300040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd0500000201020001060c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c616464726573730d0201104831363000011476616c756518013042616c616e63654f663c543e000004e057697468647261772062616c616e63652066726f6d2045564d20696e746f2063757272656e63792f62616c616e6365732070616c6c65742e1063616c6c240118736f757263650d020110483136300001187461726765740d02011048313630000114696e70757438011c5665633c75383e00011476616c75654d040110553235360001246761735f6c696d697430010c75363400013c6d61785f6665655f7065725f6761734d040110553235360001606d61785f7072696f726974795f6665655f7065725f676173050601304f7074696f6e3c553235363e0001146e6f6e6365050601304f7074696f6e3c553235363e00012c6163636573735f6c697374090601585665633c28483136302c205665633c483235363e293e0001045d01497373756520616e2045564d2063616c6c206f7065726174696f6e2e20546869732069732073696d696c617220746f2061206d6573736167652063616c6c207472616e73616374696f6e20696e20457468657265756d2e18637265617465200118736f757263650d02011048313630000110696e697438011c5665633c75383e00011476616c75654d040110553235360001246761735f6c696d697430010c75363400013c6d61785f6665655f7065725f6761734d040110553235360001606d61785f7072696f726974795f6665655f7065725f676173050601304f7074696f6e3c553235363e0001146e6f6e6365050601304f7074696f6e3c553235363e00012c6163636573735f6c697374090601585665633c28483136302c205665633c483235363e293e0002085101497373756520616e2045564d20637265617465206f7065726174696f6e2e20546869732069732073696d696c617220746f206120636f6e7472616374206372656174696f6e207472616e73616374696f6e20696e24457468657265756d2e1c63726561746532240118736f757263650d02011048313630000110696e697438011c5665633c75383e00011073616c743401104832353600011476616c75654d040110553235360001246761735f6c696d697430010c75363400013c6d61785f6665655f7065725f6761734d040110553235360001606d61785f7072696f726974795f6665655f7065725f676173050601304f7074696f6e3c553235363e0001146e6f6e6365050601304f7074696f6e3c553235363e00012c6163636573735f6c697374090601585665633c28483136302c205665633c483235363e293e0003047c497373756520616e2045564d2063726561746532206f7065726174696f6e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e050604184f7074696f6e040454014d040108104e6f6e6500000010536f6d6504004d04000001000009060000020d06000d06000004080d0211020011060c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e1506012c5472616e73616374696f6e000004845472616e7361637420616e20457468657265756d207472616e73616374696f6e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15060c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400190601444c65676163795472616e73616374696f6e0000001c45495032393330040029060148454950323933305472616e73616374696f6e0001001c45495031353539040035060148454950313535395472616e73616374696f6e0002000019060c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e63654d040110553235360001246761735f70726963654d040110553235360001246761735f6c696d69744d04011055323536000118616374696f6e1d0601445472616e73616374696f6e416374696f6e00011476616c75654d04011055323536000114696e70757438011442797465730001247369676e6174757265210601505472616e73616374696f6e5369676e617475726500001d060c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04000d02011048313630000000184372656174650001000021060c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476250601545472616e73616374696f6e5265636f76657279496400010472340110483235360001047334011048323536000025060c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f7665727949640000040030010c753634000029060c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f696430010c7536340001146e6f6e63654d040110553235360001246761735f70726963654d040110553235360001246761735f6c696d69744d04011055323536000118616374696f6e1d0601445472616e73616374696f6e416374696f6e00011476616c75654d04011055323536000114696e707574380114427974657300012c6163636573735f6c6973742d0601284163636573734c6973740001306f64645f795f706172697479200110626f6f6c0001047234011048323536000104733401104832353600002d0600000231060031060c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573730d02011c4164647265737300013073746f726167655f6b657973110201245665633c483235363e000035060c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f696430010c7536340001146e6f6e63654d040110553235360001606d61785f7072696f726974795f6665655f7065725f6761734d0401105532353600013c6d61785f6665655f7065725f6761734d040110553235360001246761735f6c696d69744d04011055323536000118616374696f6e1d0601445472616e73616374696f6e416374696f6e00011476616c75654d04011055323536000114696e707574380114427974657300012c6163636573735f6c6973742d0601284163636573734c6973740001306f64645f795f706172697479200110626f6f6c00010472340110483235360001047334011048323536000039060c4c70616c6c65745f65766d5f6163636f756e74731870616c6c65741043616c6c0404540001184062696e645f65766d5f6164647265737300002ca442696e6473206120537562737472617465206164647265737320746f2045564d20616464726573732e6d0141667465722062696e64696e672c207468652045564d2069732061626c6520746f20636f6e7665727420616e2045564d206164647265737320746f20746865206f726967696e616c2053756273747261746520616464726573732ead01576974686f75742062696e64696e672c207468652045564d20636f6e766572747320616e2045564d206164647265737320746f2061207472756e63617465642053756273747261746520616464726573732c20776869636820646f65736e277420636f72726573706f6e6458746f20746865206f726967696e20616464726573732e00050142696e64696e6720616e2061646472657373206973206e6f74206e656365737361727920666f7220696e746572616374696e672077697468207468652045564d2e002c506172616d65746572733ac02d20606f726967696e603a20537562737472617465206163636f756e742062696e64696e6720616e206164647265737300b8456d697473206045766d4163636f756e74426f756e6460206576656e74207768656e207375636365737366756c2e546164645f636f6e74726163745f6465706c6f79657204011c616464726573730d02012845766d4164647265737300011c61014164647320616e2045564d206164647265737320746f20746865206c697374206f662061646472657373657320746861742061726520616c6c6f77656420746f206465706c6f7920736d61727420636f6e7472616374732e002c506172616d65746572733a49012d20606f726967696e603a20537562737472617465206163636f756e742077686974656c697374696e6720616e20616464726573732e204d7573742062652060436f6e74726f6c6c65724f726967696e602eb02d206061646472657373603a2045564d206164647265737320746861742069732077686974656c697374656400b0456d69747320604465706c6f796572416464656460206576656e74207768656e207375636365737366756c2e6072656d6f76655f636f6e74726163745f6465706c6f79657204011c616464726573730d02012845766d4164647265737300021c750152656d6f76657320616e2045564d20616464726573732066726f6d20746865206c697374206f662061646472657373657320746861742061726520616c6c6f77656420746f206465706c6f7920736d61727420636f6e7472616374732e002c506172616d65746572733a99012d20606f726967696e603a20537562737472617465206163636f756e742072656d6f76696e67207468652045564d20616464726573732066726f6d207468652077686974656c6973742e204d7573742062652060436f6e74726f6c6c65724f726967696e602eec2d206061646472657373603a2045564d206164647265737320746861742069732072656d6f7665642066726f6d207468652077686974656c69737400b8456d69747320604465706c6f79657252656d6f76656460206576656e74207768656e207375636365737366756c2e6872656e6f756e63655f636f6e74726163745f6465706c6f79657200031ca10152656d6f76657320746865206163636f756e7427732045564d20616464726573732066726f6d20746865206c697374206f662061646472657373657320746861742061726520616c6c6f77656420746f206465706c6f7920736d61727420636f6e7472616374732ed9014261736564206f6e207468652062657374207072616374696365732c20746869732065787472696e7369632063616e2062652063616c6c656420627920616e792077686974656c6973746564206163636f756e7420746f2072656e6f756e6365207468656972206f776e207065726d697373696f6e2e002c506172616d65746572733a31012d20606f726967696e603a20537562737472617465206163636f756e742072656d6f76696e672074686569722045564d20616464726573732066726f6d207468652077686974656c6973742e00b8456d69747320604465706c6f79657252656d6f76656460206576656e74207768656e207375636365737366756c2e40617070726f76655f636f6e747261637404011c616464726573730d02012845766d416464726573730004244901416464732061646472657373206f662074686520636f6e747261637420746f20746865206c697374206f6620617070726f76656420636f6e74726163747320746f206d616e6167652062616c616e6365732e00fc4566666563746976656c7920676976696e6720697420616c6c6f77616e636520746f20666f7220616e792062616c616e63657320616e6420746f6b656e732e002c506172616d65746572733aa02d20606f726967696e603a20204d7573742062652060436f6e74726f6c6c65724f726967696e602ecc2d206061646472657373603a20436f6e7472616374206164647265737320746861742077696c6c20626520617070726f76656400bc456d6974732060436f6e7472616374417070726f76656460206576656e74207768656e207375636365737366756c2e4c646973617070726f76655f636f6e747261637404011c616464726573730d02012845766d4164647265737300051c5d0152656d6f7665732061646472657373206f662074686520636f6e74726163742066726f6d20746865206c697374206f6620617070726f76656420636f6e74726163747320746f206d616e6167652062616c616e6365732e002c506172616d65746572733aa02d20606f726967696e603a20204d7573742062652060436f6e74726f6c6c65724f726967696e602ed82d206061646472657373603a20436f6e7472616374206164647265737320746861742077696c6c20626520646973617070726f76656400c8456d6974732060436f6e7472616374446973617070726f76656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d060c6c70616c6c65745f78796b5f6c69717569646974795f6d696e696e671870616c6c65741043616c6c040454000130486372656174655f676c6f62616c5f6661726d240134746f74616c5f7265776172647318011c42616c616e6365000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e000148696e63656e746976697a65645f617373657410011c4173736574496400013c7265776172645f63757272656e637910011c417373657449640001146f776e6572000130543a3a4163636f756e7449640001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c00012c6d696e5f6465706f73697418011c42616c616e636500014070726963655f61646a7573746d656e7461010124466978656455313238000074f4437265617465206e6577206c6971756964697479206d696e696e672070726f6772616d20776974682070726f766964656420706172616d65746572732e003d01606f776e657260206163636f756e742068617320746f2068617665206174206c656173742060746f74616c5f72657761726473602062616c616e63652e20546869732066756e642077696c6c206265a47472616e736665727265642066726f6d20606f776e65726020746f206661726d206163636f756e742e6501496e2063617365206f6620607265776172645f63757272656e63796020697320696e73756666696369656e742061737365742c206661726d277320606f776e6572602068617320746f20706179206578697374656e7469616c1d016465706f73697420666f7220676c6f62616c206661726d206163636f756e7420616e6420666f72206c6971756964697479206d696e696e672060706f7460206163636f756e742e00f0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a4372656174654f726967696e602e55012121215741524e3a2060543a3a4372656174654f726967696e602068617320706f776572206f7665722066756e6473206f6620606f776e6572602773206163636f756e7420616e642069742073686f756c64206265d0636f6e6669677572656420746f2074727573746564206f726967696e20652e67205375646f206f7220476f7665726e616e63652e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e31012d2060746f74616c5f72657761726473603a20746f74616c207265776172647320706c616e6e656420746f20646973747269627574652e205468697320726577617264732077696c6c206265dc6469737472696275746564206265747765656e20616c6c207969656c64206661726d7320696e2074686520676c6f62616c206661726d2e59012d2060706c616e6e65645f7969656c64696e675f706572696f6473603a20706c616e6e6564206e756d626572206f6620706572696f647320746f20646973747269627574652060746f74616c5f72657761726473602e29015741524e3a2054484953204953204e4f54204841524420444541444c494e452e204e6f7420616c6c2072657761726473206861766520746f20626520646973747269627574656420696e5d0160706c616e6e65645f7969656c64696e675f706572696f6473602e205265776172647320617265206469737472696275746564206261736564206f6e2074686520736974756174696f6e20696e20746865207969656c6461016661726d7320616e642063616e20626520646973747269627574656420696e2061206c6f6e6765722074696d65206672616d6520627574206e6576657220696e207468652073686f727465722074696d65206672616d652e59012d2060626c6f636b735f7065725f706572696f64603a20206e756d626572206f6620626c6f636b7320696e20612073696e676c6520706572696f642e204d696e2e206e756d626572206f6620626c6f636b732070657230706572696f6420697320312e65012d2060696e63656e746976697a65645f6173736574603a20617373657420746f20626520696e63656e746976697a656420696e2058594b20706f6f6c732e20416c6c207969656c64206661726d7320616464656420696e746f11016c69712e206d696e696e672070726f6772616d206861766520746f20686176652060696e63656e746976697a65645f61737365746020696e20746865697220706169722ec02d20607265776172645f63757272656e6379603a207061796f66662063757272656e6379206f6620726577617264732e942d20606f776e6572603a206c69712e206d696e696e672070726f6772616d206f776e65722e39012d20607969656c645f7065725f706572696f64603a2070657263656e746167652072657475726e206f6e20607265776172645f63757272656e637960206f6620616c6c206661726d7320702e612e09012d20606d696e5f6465706f736974603a206d696e696d756d20616d6f756e742077686963682063616e206265206465706f736974656420746f20746865206661726d542d206070726963655f61646a7573746d656e74603ac0456d6974732060476c6f62616c4661726d4372656174656460206576656e74207768656e207375636365737366756c2e487570646174655f676c6f62616c5f6661726d080138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400014070726963655f61646a7573746d656e74610101244669786564553132380001289c55706461746520676c6f62616c206661726d2773207072696365732061646a7573746d656e742e00a84f6e6c79206661726d2773206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722ecc2d2060676c6f62616c5f6661726d5f6964603a206964206f662074686520676c6f62616c206661726d20746f20757064617465d02d206070726963655f61646a7573746d656e74603a206e65772076616c756520666f722070726963652061646a7573746d656e7400c0456d6974732060476c6f62616c4661726d5570646174656460206576656e74207768656e207375636365737366756c2e547465726d696e6174655f676c6f62616c5f6661726d040138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400022c9c5465726d696e617465206578697374696e67206c69712e206d696e696e672070726f6772616d2e00a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e00d1015741524e3a20546f207375636365737366756c6c79207465726d696e6174652061206661726d2c206661726d206861766520746f20626520656d70747928616c6c207969656c64206661726d7320696e20686520676c6f62616c206661726d206d757374206265207465726d696e61746564292e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722edc2d2060676c6f62616c5f6661726d5f6964603a206964206f6620676c6f62616c206661726d20746f206265207465726d696e617465642e00cc456d6974732060476c6f62616c4661726d5465726d696e6174656460206576656e74207768656e207375636365737366756c2e446372656174655f7969656c645f6661726d100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012861737365745f70616972410201244173736574506169720001286d756c7469706c696572610101384661726d4d756c7469706c6965720001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e000348bc416464207969656c64206661726d20666f7220676976656e206061737365745f70616972602058594b20706f6f6c2e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e0055014f6e6c792058594b732077697468206061737365745f706169726020776974682060696e63656e746976697a65645f6173736574602063616e20626520616464656420696e746f20746865206661726d2e2058594b1501706f6f6c20666f72206061737365745f70616972602068617320746f20657869737420746f207375636365737366756c6c7920637265617465207969656c64206661726d2e21015969656c64206661726d20666f722073616d65206061737365745f70616972602063616e206578697374206f6e6c79206f6e636520696e2074686520676c6f62616c206661726d2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e01012d20606661726d5f6964603a20676c6f62616c206661726d20696420746f2077686963682061207969656c64206661726d2077696c6c2062652061646465642e5d012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d2e204c69712e206d696e696e672077696c6c20626520616c6c6f77656420666f72207468697331016061737365745f706169726020616e64206f6e65206f66207468652061737365747320696e207468652070616972206d7573742062652060696e63656e746976697a65645f6173736574602e982d20606d756c7469706c696572603a207969656c64206661726d206d756c7469706c6965722e5d012d20606c6f79616c74795f6375727665603a20637572766520746f2063616c63756c617465206c6f79616c7479206d756c7469706c69657220746f2064697374726962757465207265776172647320746f207573657273e0776974682074696d6520696e63656e746976652e20604e6f6e6560206d65616e73206e6f206c6f79616c7479206d756c7469706c6965722e00bc456d69747320605969656c644661726d4372656174656460206576656e74207768656e207375636365737366756c2e447570646174655f7969656c645f6661726d0c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012861737365745f70616972410201244173736574506169720001286d756c7469706c696572610101384661726d4d756c7469706c69657200042c74557064617465207969656c64206661726d206d756c7469706c6965722e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420696e207768696368207969656c64206661726d2077696c6c20626520757064617465642e05012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d20696e20676c6f62616c206661726d2ea82d20606d756c7469706c696572603a206e6577207969656c64206661726d206d756c7469706c6965722e00bc456d69747320605969656c644661726d5570646174656460206576656e74207768656e207375636365737366756c2e3c73746f705f7969656c645f6661726d080138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d496400012861737365745f706169724102012441737365745061697200053ca453746f70206c69712e206d696d696e6720666f72207370656369666963207969656c64206661726d2e003501546869732066756e6374696f6e20636c61696d7320726577617264732066726f6d2060476c6f62616c4661726d60206c6173742074696d6520616e642073746f7073207969656c64206661726d2101696e63656e746976697a6174696f6e2066726f6d20612060476c6f62616c4661726d602e2055736572732077696c6c2062652061626c6520746f206f6e6c79207769746864726177c8736861726573287769746820636c61696d696e67292061667465722063616c6c696e6720746869732066756e6374696f6e2e4101606465706f7369745f73686172657328296020616e642060636c61696d5f7265776172647328296020617265206e6f7420616c6c6f776564206f6e2063616e63656c6564207969656c64206661726d2e0420a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e05012d2060676c6f62616c5f6661726d5f6964603a206661726d20696420696e207768696368207969656c64206661726d2077696c6c2062652063616e63656c65642ef82d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d20696e20746865206661726d2e00bc456d69747320605969656c644661726d53746f7070656460206576656e74207768656e207375636365737366756c2e44726573756d655f7969656c645f6661726d100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012861737365745f70616972410201244173736574506169720001286d756c7469706c696572610101384661726d4d756c7469706c696572000644a4526573756d65207969656c64206661726d20666f722073746f70706564207969656c64206661726d2e005501546869732066756e6374696f6e20726573756d6520696e63656e746976697a6174696f6e2066726f6d2060476c6f62616c4661726d6020616e6420726573746f72652066756c6c2066756e6374696f6e616c6974792101666f72207969656c64206661726d2e2055736572732077696c6c2062652061626c6520746f206465706f7369742c20636c61696d20616e6420776974686472617720616761696e2e00e45741524e3a205969656c64206661726d206973204e4f5420726577617264656420666f722074696d65206974207761732073746f707065642e00a04f6e6c79206661726d206f776e65722063616e20706572666f726d207468697320616374696f6e2e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d20696420696e207768696368207969656c64206661726d2077696c6c20626520726573756d65642ec82d20607969656c645f6661726d5f6964603a206964206f66207969656c64206661726d20746f20626520726573756d65642e05012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d20696e20676c6f62616c206661726d2ec82d20606d756c7469706c696572603a207969656c64206661726d206d756c7469706c69657220696e20746865206661726d2e00bc456d69747320605969656c644661726d526573756d656460206576656e74207768656e207375636365737366756c2e507465726d696e6174655f7969656c645f6661726d0c0138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012861737365745f706169724102012441737365745061697200074c4452656d6f7665207969656c64206661726d008101546869732066756e6374696f6e206d61726b732061207969656c64206661726d20617320726561647920746f2062652072656d6f7665642066726f6d2073746f72616765207768656e206974277320656d7074792e2055736572732077696c6c650162652061626c6520746f206f6e6c792077697468647261772073686172657328776974686f757420636c61696d696e6720726577617264732066726f6d207969656c64206661726d292e20556e706169642072657761726473710177696c6c206265207472616e73666572726564206261636b20746f20676c6f62616c206661726d20616e642077696c6c206265207573656420746f206469737472696275746520746f206f74686572207969656c64206661726d732e00e05969656c64206661726d206d7573742062652073746f70706564206265666f72652063616c6c696e6720746869732066756e6374696f6e2e0071014f6e6c7920676c6f62616c206661726d2773206f776e65722063616e20706572666f726d207468697320616374696f6e2e205969656c64206661726d20737461797320696e207468652073746f7261676520756e74696c20697427736d01656d70747928616c6c206661726d20656e7472696573206172652077697468647261776e292e204c6173742077697468647261776e2066726f6d207969656c64206661726d20747269676765722072656d6f76696e672066726f6d307468652073746f726167652e002c506172616d65746572733a802d20606f726967696e603a20676c6f62616c206661726d2773206f776e65722e1d012d2060676c6f62616c5f6661726d5f6964603a206661726d2069642066726f6d207768696368207969656c64206661726d2073686f756c64206265207465726d696e617465642ed42d20607969656c645f6661726d5f6964603a206964206f66207969656c64206661726d20746f206265207465726d696e617465642e15012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d20696e2074686520676c6f62616c206661726d2e00c8456d69747320605969656c644661726d5465726d696e6174656460206576656e74207768656e207375636365737366756c2e386465706f7369745f736861726573100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012861737365745f70616972410201244173736574506169720001347368617265735f616d6f756e7418011c42616c616e63650008388c4465706f736974204c502073686172657320746f2061206c69712e206d696e696e672e005101546869732066756e6374696f6e207472616e7366657273204c50207368617265732066726f6d20606f726967696e6020746f2070616c6c65742773206163636f756e7420616e64206d696e74206e667420666f720d01606f726967696e60206163636f756e742e204d696e746564206e667420726570726573656e7473206465706f73697420696e20746865206c69712e206d696e696e672e002c506172616d65746572733a2d012d20606f726967696e603a206163636f756e74206465706f736974696e67204c50207368617265732e2054686973206163636f756e742068617320746f2068617665206174206c6561737474607368617265735f616d6f756e7460206f66204c50207368617265732e3d012d2060676c6f62616c5f6661726d5f6964603a206964206f6620676c6f62616c206661726d20746f20776869636820757365722077616e747320746f206465706f736974204c50207368617265732ec82d20607969656c645f6661726d5f6964603a206964206f66207969656c64206661726d20746f206465706f73697420746f2e1d012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67204c502073686172657320757365722077616e747320746f206465706f7369742ef42d20607368617265735f616d6f756e74603a20616d6f756e74206f66204c502073686172657320757365722077616e747320746f206465706f7369742e00b8456d69747320605368617265734465706f736974656460206576656e74207768656e207375636365737366756c2e4072656465706f7369745f736861726573100138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400012861737365745f70616972410201244173736574506169720001286465706f7369745f69641801244465706f736974496400093ce452656465706f73697420616c7265616479206c6f636b6564204c502073686172657320746f20616e6f74686572207969656c64206661726d2e006501546869732066756e6374696f6e20637265617465207969656c64206661726d20656e74727920666f72206578697374696e67206465706f7369742e204c502073686172657320617265206e6f74207472616e73666572726564d4616e6420616d6f756e74206f66204c5020736861726573206973206261736564206f6e206578697374696e67206465706f7369742e00a4546869732066756e6374696f6e20444f45534e275420637265617465206e6577206465706f7369742e002c506172616d65746572733a31012d20606f726967696e603a206163636f756e74206465706f736974696e67204c50207368617265732e2054686973206163636f756e74206861766520746f2068617665206174206c65617374ac2d2060676c6f62616c5f6661726d5f6964603a20676c6f62616c206661726d206964656e7469666965722ee42d20607969656c645f6661726d5f6964603a207969656c64206661726d206964656e7469666965722072656465706f736974696e6720746f2e19012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67204c502073686172657320757365722077616e7420746f206465706f7369742ea82d20606465706f7369745f6964603a206964656e746966696572206f6620746865206465706f7369742e00c0456d697473206053686172657352656465706f736974656460206576656e74207768656e207375636365737366756c2e34636c61696d5f726577617264730801286465706f7369745f69641801244465706f73697449640001347969656c645f6661726d5f696410012c5969656c644661726d4964000a2c0d01436c61696d20726577617264732066726f6d206c69712e206d696e696e6720666f72206465706f73697420726570726573656e74656420627920606e66745f6964602e005901546869732066756e6374696f6e2063616c63756c617465207573657220726577617264732066726f6d206c69712e206d696e696e6720616e64207472616e73666572207265776172647320746f20606f726967696e60e86163636f756e742e20436c61696d696e6720696e207468652073616d6520706572696f6420697320616c6c6f776564206f6e6c79206f6e63652e002c506172616d65746572733aa82d20606f726967696e603a206163636f756e74206f776e6572206f66206465706f736974286e6674292ef82d20606465706f7369745f6964603a206e667420696420726570726573656e74696e67206465706f73697420696e20746865207969656c64206661726d2efc2d20607969656c645f6661726d5f6964603a207969656c64206661726d206964656e74696669657220746f20636c61696d20726577617264732066726f6d2e00b0456d6974732060526577617264436c61696d656460206576656e74207768656e207375636365737366756c2e3c77697468647261775f7368617265730c01286465706f7369745f69641801244465706f73697449640001347969656c645f6661726d5f696410012c5969656c644661726d496400012861737365745f7061697241020124417373657450616972000b5815015769746864726177204c50207368617265732066726f6d206c69712e206d696e696e6720776974682072657761726420636c61696d696e6720696620706f737369626c652e0015014c697374206f6620706f737369626c65206361736573206f66207472616e7366657273206f66204c502073686172657320616e6420636c61696d656420726577617264733a0051012a207969656c64206661726d20697320616374697665287969656c64206661726d206973206e6f742073746f7070656429202d20636c61696d20616e64207472616e736665722072657761726473286966206974d87761736e277420636c61696d656420696e207468697320706572696f642920616e64207472616e73666572204c50207368617265732eec2a206c69712e206d696e696e672069732073746f70706564202d20636c61696d20616e64207472616e736665722072657761726473286966206974d87761736e277420636c61696d656420696e207468697320706572696f642920616e64207472616e73666572204c50207368617265732e05012a207969656c64206661726d20776173207465726d696e61746564202d206f6e6c79204c50207368617265732077696c6c206265207472616e736665727265642eec2a206661726d20776173207465726d696e61746564202d206f6e6c79204c50207368617265732077696c6c206265207472616e736665727265642e00350155736572277320756e636c61696d61626c6520726577617264732077696c6c206265207472616e73666572726564206261636b20746f20676c6f62616c206661726d2773206163636f756e742e002c506172616d65746572733aa82d20606f726967696e603a206163636f756e74206f776e6572206f66206465706f736974286e6674292ef82d20606465706f7369745f6964603a206e667420696420726570726573656e74696e67206465706f73697420696e20746865207969656c64206661726d2e05012d20607969656c645f6661726d5f6964603a207969656c64206661726d206964656e74696669657220746f206469746864726177207368617265732066726f6d2e05012d206061737365745f70616972603a2061737365742070616972206964656e74696679696e67207969656c64206661726d20696e20676c6f62616c206661726d2e0018456d6974733a842a2060526577617264436c61696d65646020696620636c61696d2068617070656ea42a206053686172657357697468647261776e60206576656e74207768656e207375636365737366756c040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41060c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c65741043616c6c080454000449000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e45060c5870616c6c65745f72656c6179636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49060c2870616c6c65745f6463611870616c6c65741043616c6c040454000108207363686564756c650801207363686564756c654d0601d45363686564756c653c543a3a4163636f756e7449642c20543a3a417373657449642c20426c6f636b4e756d626572466f723c543e3e00015473746172745f657865637574696f6e5f626c6f636bcd0101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e0000603d01437265617465732061206e6577204443412028446f6c6c61722d436f737420417665726167696e6729207363686564756c6520616e6420706c616e7320746865206e65787420657865637574696f6e60666f72207468652073706563696669656420626c6f636b2e002d0149662074686520626c6f636b206973206e6f74207370656369666965642c2074686520657865637574696f6e20697320706c616e6e656420666f7220746865206e65787420626c6f636b2e490149662074686520676976656e20626c6f636b2069732066756c6c2c2074686520657865637574696f6e2077696c6c20626520706c616e6e656420696e207468652073756273657175656e7420626c6f636b2e0051014f6e636520746865207363686564756c6520697320637265617465642c20746865207370656369666965642060746f74616c5f616d6f756e74602077696c6c20626520726573657276656420666f72204443412e1d01546865207265736572766174696f6e2063757272656e63792077696c6c206265207468652060616d6f756e745f696e602063757272656e6379206f6620746865206f726465722e00e054726164657320617265206578656375746564206173206c6f6e67206173207468657265206973206275646765742072656d61696e696e67ac66726f6d2074686520696e697469616c2060746f74616c5f616d6f756e746020616c6c6f636174696f6e2e00550149662061207472616465206661696c732064756520746f20736c697070616765206c696d6974206f722070726963652073746162696c697479206572726f72732c2069742077696c6c20626520726574726965642ed4496620746865206e756d626572206f662072657472696573207265616368657320746865206d6178696d756d20616c6c6f7765642cb0746865207363686564756c652077696c6c206265207465726d696e61746564207065726d616e656e746c792ef8496e207468652063617365206f662061207375636365737366756c2074726164652c2074686520726574727920636f756e7465722069732072657365742e002c506172616d65746572733a682d20606f726967696e603a207363686564756c65206f776e6572782d20607363686564756c65603a207363686564756c652064657461696c7329012d206073746172745f657865637574696f6e5f626c6f636b603a20666972737420706f737369626c6520657865637574696f6e20626c6f636b20666f7220746865207363686564756c6500fc456d69747320605363686564756c65646020616e642060457865637574696f6e506c616e6e656460206576656e74207768656e207375636365737366756c2e00247465726d696e61746508012c7363686564756c655f69641001285363686564756c6549640001506e6578745f657865637574696f6e5f626c6f636bcd0101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00012c09015465726d696e61746573206120444341207363686564756c6520616e642072656d6f766520697420636f6d706c6574656c792066726f6d2074686520636861696e2e004101546869732063616e2062652063616c6c656420627920626f7468207363686564756c65206f776e6572206f722074686520636f6e666967757265642060543a3a546563686e6963616c4f726967696e60002c506172616d65746572733a682d20606f726967696e603a207363686564756c65206f776e6572702d20607363686564756c655f6964603a207363686564756c6520696415012d20606e6578745f657865637574696f6e5f626c6f636b603a20626c6f636b206e756d62657220776865726520746865207363686564756c6520697320706c616e6e65642e00a4456d69747320605465726d696e6174656460206576656e74207768656e207375636365737366756c2e00040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d060c2870616c6c65745f646361147479706573205363686564756c650c244163636f756e74496401001c4173736574496401102c426c6f636b4e756d6265720110001c01146f776e65720001244163636f756e744964000118706572696f6410012c426c6f636b4e756d626572000130746f74616c5f616d6f756e7418011c42616c616e636500012c6d61785f72657472696573210101284f7074696f6e3c75383e00014c73746162696c6974795f7468726573686f6c645106013c4f7074696f6e3c5065726d696c6c3e000120736c6970706167655106013c4f7074696f6e3c5065726d696c6c3e0001146f72646572510201384f726465723c417373657449643e0000510604184f7074696f6e0404540169010108104e6f6e6500000010536f6d6504006901000001000055060c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000128207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963950101ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963950101ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963950101ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963950101ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c7d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e247365745f72657472790c01107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0006305901536574206120726574727920636f6e66696775726174696f6e20666f722061207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069742077696c6c5501626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c2069742473756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3c7365745f72657472795f6e616d65640c010869640401205461736b4e616d6500011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0007305d01536574206120726574727920636f6e66696775726174696f6e20666f722061206e616d6564207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069745d0177696c6c20626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c3069742073756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3063616e63656c5f72657472790401107461736b910101785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e000804a852656d6f7665732074686520726574727920636f6e66696775726174696f6e206f662061207461736b2e4863616e63656c5f72657472795f6e616d656404010869640401205461736b4e616d65000904bc43616e63656c2074686520726574727920636f6e66696775726174696f6e206f662061206e616d6564207461736b2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174615d06015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653801345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d06089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174616106015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174656906015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765737106016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573790601a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000061060c4c706f6c6b61646f745f7072696d6974697665730876375c50657273697374656456616c69646174696f6e446174610804480134044e01100010012c706172656e745f6865616465060120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74340104480001306d61785f706f765f73697a6510010c753332000065060c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e000069060c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465736d06014442547265655365743c5665633c75383e3e00006d06042042547265655365740404540138000400c103000000710600000275060075060860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d65737361676500007906042042547265654d617008044b0181030456017d0600040085060000007d0600000281060081060860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e0000850600000289060089060000040881037d06008d060c5873746167696e675f70617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91060c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001381073656e64080110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d65737361676595060154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765f90601b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6e7d020134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6ecd0101484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6d030158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6d030158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69741903012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69741903012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f617373657473140110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69741903012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f6173736574730801186173736574731d030150426f783c56657273696f6e65644173736574733e00012c62656e65666963696172796d030158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e8c7472616e736665725f6173736574735f7573696e675f747970655f616e645f7468656e1c0110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574731d030150426f783c56657273696f6e65644173736574733e0001506173736574735f7472616e736665725f7479706525070144426f783c5472616e73666572547970653e00013872656d6f74655f666565735f696429070154426f783c56657273696f6e6564417373657449643e000148666565735f7472616e736665725f7479706525070144426f783c5472616e73666572547970653e000148637573746f6d5f78636d5f6f6e5f6465737495060154426f783c56657273696f6e656458636d3c28293e3e0001307765696768745f6c696d69741903012c5765696768744c696d6974000dc055015472616e73666572206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207573696e67206578706c69636974207472616e7366657268747970657320666f722061737365747320616e6420666565732e0059016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206d61792062652074656c65706f727461626c6520746f206064657374602e2043616c6c6572206d757374ec70726f766964652074686520606173736574735f7472616e736665725f747970656020746f206265207573656420666f722060617373657473603a5101202d20605472616e73666572547970653a3a4c6f63616c52657365727665603a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a44657374696e6174696f6e52657365727665603a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a52656d6f746552657365727665287265736572766529603a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f206072657365727665606101202020636861696e20746f206d6f76652072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f74686572550120202058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e205479706963616c6c79942020207468652072656d6f746520607265736572766560206973204173736574204875622e4501202d20605472616e73666572547970653a3a54656c65706f7274603a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746fe82020206d696e742f74656c65706f72742061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0055014f6e207468652064657374696e6174696f6e20636861696e2c2061732077656c6c20617320616e7920696e7465726d65646961727920686f70732c2060427579457865637574696f6e60206973207573656420746f210162757920657865637574696f6e207573696e67207472616e73666572726564206061737365747360206964656e746966696564206279206072656d6f74655f666565735f6964602e59014d616b65207375726520656e6f756768206f662074686520737065636966696564206072656d6f74655f666565735f69646020617373657420697320696e636c7564656420696e2074686520676976656e206c69737461016f662060617373657473602e206072656d6f74655f666565735f6964602073686f756c6420626520656e6f75676820746f2070617920666f7220607765696768745f6c696d6974602e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0045016072656d6f74655f666565735f696460206d61792075736520646966666572656e74207472616e736665722074797065207468616e2072657374206f6620606173736574736020616e642063616e2062659c737065636966696564207468726f7567682060666565735f7472616e736665725f74797065602e0061015468652063616c6c6572206e6565647320746f207370656369667920776861742073686f756c642068617070656e20746f20746865207472616e7366657272656420617373657473206f6e6365207468657920726561636841017468652060646573746020636861696e2e205468697320697320646f6e65207468726f756768207468652060637573746f6d5f78636d5f6f6e5f646573746020706172616d657465722c207768696368fc636f6e7461696e732074686520696e737472756374696f6e7320746f2065786563757465206f6e2060646573746020617320612066696e616c20737465702e7c20205468697320697320757375616c6c792061732073696d706c652061733a510120206058636d28766563215b4465706f7369744173736574207b206173736574733a2057696c6428416c6c436f756e746564286173736574732e6c656e282929292c2062656e6566696369617279207d5d29602c3101202062757420636f756c6420626520736f6d657468696e67206d6f72652065786f746963206c696b652073656e64696e6720746865206061737365747360206576656e20667572746865722e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d3d01202072656c617920746f2070617261636861696e2c206f72206028706172656e74733a20322c2028476c6f62616c436f6e73656e737573282e2e292c202e2e29296020746f2073656e642066726f6df4202070617261636861696e206163726f737320612062726964676520746f20616e6f746865722065636f73797374656d2064657374696e6174696f6e2e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e3d012d20606173736574735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e73666572207468652060617373657473602e2d012d206072656d6f74655f666565735f6964603a204f6e65206f662074686520696e636c7564656420606173736574736020746f206265206265207573656420746f2070617920666565732e49012d2060666565735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e736665722074686520606665657360206173736574732e59012d2060637573746f6d5f78636d5f6f6e5f64657374603a205468652058434d20746f206265206578656375746564206f6e2060646573746020636861696e20617320746865206c6173742073746570206f6620746865590120207472616e736665722c20776869636820616c736f2064657465726d696e657320776861742068617070656e7320746f2074686520617373657473206f6e207468652064657374696e6174696f6e20636861696e2e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9506080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204009906015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400c506015076333a3a58636d3c52756e74696d6543616c6c3e0003000856340400b102015076343a3a58636d3c52756e74696d6543616c6c3e0004000099060c0c78636d0876320c58636d042c52756e74696d6543616c6c000004009d0601745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00009d06000002a10600a1060c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404002103012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002103012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002103012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a5060120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574732103012c4d756c746941737365747300012c62656e6566696369617279310301344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732103012c4d756c746941737365747300011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c05030168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040035030154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374310301344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b50601404d756c7469417373657446696c7465720001286d61785f6173736574733501010c75333200012c62656e6566696369617279310301344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b50601404d756c7469417373657446696c7465720001286d61785f6173736574733501010c75333200011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e000e003445786368616e6765417373657408011067697665b50601404d756c7469417373657446696c74657200011c726563656976652103012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b50601404d756c7469417373657446696c74657200011c72657365727665310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b50601404d756c7469417373657446696c74657200011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374310301344d756c74694c6f636174696f6e000118617373657473b50601404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573290301284d756c746941737365740001307765696768745f6c696d6974c106012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009906014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009906014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732103012c4d756c74694173736574730001187469636b6574310301344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000a5060c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304002103012c4d756c74694173736574730001003c457865637574696f6e526573756c740400a90601504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000a90604184f7074696f6e04045401ad060108104e6f6e6500000010536f6d650400ad060000010000ad060000040810b10600b106100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000b506100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504002103012c4d756c74694173736574730000001057696c640400b906013857696c644d756c7469417373657400010000b906100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869642d03011c4173736574496400010c66756ebd06013c57696c6446756e676962696c69747900010000bd06100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000c1060c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000c5060c0c78636d0876330c58636d041043616c6c00000400c90601585665633c496e737472756374696f6e3c43616c6c3e3e0000c906000002cd0600cd060c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404005503012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404005503012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404005503012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365d1060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572e50601544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574735503012c4d756c746941737365747300012c62656e6566696369617279290101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574735503012c4d756c746941737365747300011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c0503014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04002d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400e90601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473ed0601404d756c7469417373657446696c74657200012c62656e6566696369617279290101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473ed0601404d756c7469417373657446696c74657200011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e000e003445786368616e676541737365740c011067697665ed0601404d756c7469417373657446696c74657200011077616e745503012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473ed0601404d756c7469417373657446696c74657200011c72657365727665290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473ed0601404d756c7469417373657446696c74657200011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fe90601445175657279526573706f6e7365496e666f000118617373657473ed0601404d756c7469417373657446696c74657200120030427579457865637574696f6e080110666565735d0301284d756c746941737365740001307765696768745f6c696d69741903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400c506012458636d3c43616c6c3e0015002c536574417070656e6469780400c506012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574735503012c4d756c74694173736574730001187469636b6574290101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404005503012c4d756c7469417373657473001c002c457870656374417373657404005503012c4d756c7469417373657473001d00304578706563744f726967696e0400e50601544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400dd0201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400f50201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fe90601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465783501010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f723501010c75333200013c6d696e5f63726174655f6d696e6f723501010c753332002200505265706f72745472616e736163745374617475730400e90601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400310101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b3d0101244e6574776f726b496400012c64657374696e6174696f6e2d010154496e746572696f724d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e002600244c6f636b417373657408011461737365745d0301284d756c74694173736574000120756e6c6f636b6572290101344d756c74694c6f636174696f6e0027002c556e6c6f636b417373657408011461737365745d0301284d756c74694173736574000118746172676574290101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365745d0301284d756c746941737365740001146f776e6572290101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365745d0301284d756c746941737365740001186c6f636b6572290101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400290101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69741903012c5765696768744c696d6974000130636865636b5f6f726967696ee50601544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000d1060c0c78636d08763320526573706f6e7365000118104e756c6c0000001841737365747304005503012c4d756c74694173736574730001003c457865637574696f6e526573756c740400dd0201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f0400d5060198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400f50201384d617962654572726f72436f646500050000d5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d906045300000400e10601185665633c543e0000d9060c0c78636d0876332850616c6c6574496e666f0000180114696e6465783501010c7533320001106e616d65dd060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d65dd060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f723501010c7533320001146d696e6f723501010c75333200011470617463683501010c7533320000dd060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000e106000002d90600e50604184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000e9060c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6e290101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f7765696768742801185765696768740000ed06100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504005503012c4d756c74694173736574730000001057696c640400f106013857696c644d756c7469417373657400010000f106100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f6608010869646103011c4173736574496400010c66756ef506013c57696c6446756e676962696c69747900010028416c6c436f756e74656404003501010c75333200020030416c6c4f66436f756e7465640c010869646103011c4173736574496400010c66756ef506013c57696c6446756e676962696c697479000114636f756e743501010c75333200030000f506100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000f906080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400fd06015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304000d07015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404001907015076343a3a58636d3c52756e74696d6543616c6c3e00040000fd060c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400010701745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000010700000205070005070c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404002103012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002103012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002103012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a5060120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574732103012c4d756c746941737365747300012c62656e6566696369617279310301344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732103012c4d756c746941737365747300011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c09070168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040035030154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374310301344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b50601404d756c7469417373657446696c7465720001286d61785f6173736574733501010c75333200012c62656e6566696369617279310301344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b50601404d756c7469417373657446696c7465720001286d61785f6173736574733501010c75333200011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e000e003445786368616e6765417373657408011067697665b50601404d756c7469417373657446696c74657200011c726563656976652103012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b50601404d756c7469417373657446696c74657200011c72657365727665310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b50601404d756c7469417373657446696c74657200011064657374310301344d756c74694c6f636174696f6e00010c78636d9906011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374310301344d756c74694c6f636174696f6e000118617373657473b50601404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573290301284d756c746941737365740001307765696768745f6c696d6974c106012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400fd06014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400fd06014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732103012c4d756c74694173736574730001187469636b6574310301344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000009070c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e00000d070c0c78636d0876330c58636d041043616c6c00000400110701585665633c496e737472756374696f6e3c43616c6c3e3e0000110700000215070015070c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404005503012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404005503012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404005503012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365d1060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572e50601544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574735503012c4d756c746941737365747300012c62656e6566696369617279290101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574735503012c4d756c746941737365747300011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c0907014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04002d010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400e90601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473ed0601404d756c7469417373657446696c74657200012c62656e6566696369617279290101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473ed0601404d756c7469417373657446696c74657200011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e000e003445786368616e676541737365740c011067697665ed0601404d756c7469417373657446696c74657200011077616e745503012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473ed0601404d756c7469417373657446696c74657200011c72657365727665290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473ed0601404d756c7469417373657446696c74657200011064657374290101344d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fe90601445175657279526573706f6e7365496e666f000118617373657473ed0601404d756c7469417373657446696c74657200120030427579457865637574696f6e080110666565735d0301284d756c746941737365740001307765696768745f6c696d69741903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d07012458636d3c43616c6c3e0015002c536574417070656e64697804000d07012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574735503012c4d756c74694173736574730001187469636b6574290101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404005503012c4d756c7469417373657473001c002c457870656374417373657404005503012c4d756c7469417373657473001d00304578706563744f726967696e0400e50601544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400dd0201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400f50201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fe90601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465783501010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f723501010c75333200013c6d696e5f63726174655f6d696e6f723501010c753332002200505265706f72745472616e736163745374617475730400e90601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400310101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b3d0101244e6574776f726b496400012c64657374696e6174696f6e2d010154496e746572696f724d756c74694c6f636174696f6e00010c78636dc506011c58636d3c28293e002600244c6f636b417373657408011461737365745d0301284d756c74694173736574000120756e6c6f636b6572290101344d756c74694c6f636174696f6e0027002c556e6c6f636b417373657408011461737365745d0301284d756c74694173736574000118746172676574290101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365745d0301284d756c746941737365740001146f776e6572290101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365745d0301284d756c746941737365740001186c6f636b6572290101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400290101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69741903012c5765696768744c696d6974000130636865636b5f6f726967696ee50601544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000019070c2c73746167696e675f78636d0876340c58636d041043616c6c000004001d0701585665633c496e737472756374696f6e3c43616c6c3e3e00001d0700000221070021070c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400bd020118417373657473000000545265736572766541737365744465706f73697465640400bd020118417373657473000100585265636569766554656c65706f7274656441737365740400bd020118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365d9020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572fd0201404f7074696f6e3c4c6f636174696f6e3e000300345472616e736665724173736574080118617373657473bd02011841737365747300012c62656e65666963696172797d0201204c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473bd020118417373657473000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64010301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c0907014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465723501010c7533320001406d61785f6d6573736167655f73697a653501010c7533320001306d61785f63617061636974793501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e743501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f723501010c75333200011873656e6465723501010c753332000124726563697069656e743501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040081020140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400090301445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574730d03012c417373657446696c74657200012c62656e65666963696172797d0201204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574730d03012c417373657446696c746572000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e000e003445786368616e676541737365740c0110676976650d03012c417373657446696c74657200011077616e74bd02011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574730d03012c417373657446696c74657200011c726573657276657d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574730d03012c417373657446696c746572000110646573747d0201204c6f636174696f6e00010c78636db102011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f090301445175657279526573706f6e7365496e666f0001186173736574730d03012c417373657446696c74657200120030427579457865637574696f6e08011066656573c502011441737365740001307765696768745f6c696d69741903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001907012458636d3c43616c6c3e0015002c536574417070656e64697804001907012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473bd0201184173736574730001187469636b65747d0201204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400bd020118417373657473001c002c45787065637441737365740400bd020118417373657473001d00304578706563744f726967696e0400fd0201404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f720400dd0201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400f50201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f090301445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465783501010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f723501010c75333200013c6d696e5f63726174655f6d696e6f723501010c753332002200505265706f72745472616e736163745374617475730400090301445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400890201204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b910201244e6574776f726b496400012c64657374696e6174696f6e81020140496e746572696f724c6f636174696f6e00010c78636db102011c58636d3c28293e002600244c6f636b41737365740801146173736574c50201144173736574000120756e6c6f636b65727d0201204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574c502011441737365740001187461726765747d0201204c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574c502011441737365740001146f776e65727d0201204c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574c502011441737365740001186c6f636b65727d0201204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04007d0201204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69741903012c5765696768744c696d6974000130636865636b5f6f726967696efd0201404f7074696f6e3c4c6f636174696f6e3e002f00002507105073746167696e675f78636d5f6578656375746f72187472616974733861737365745f7472616e73666572305472616e73666572547970650001102054656c65706f7274000000304c6f63616c526573657276650001004844657374696e6174696f6e526573657276650002003452656d6f74655265736572766504006d03014456657273696f6e65644c6f636174696f6e000300002907080c78636d4056657273696f6e65644173736574496400010808563304006103012c76333a3a417373657449640003000856340400c902012c76343a3a41737365744964000400002d070c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31070c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696e7d0301484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696e7d0301484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e35070c206f726d6c5f78636d186d6f64756c651043616c6c0404540001044473656e645f61735f736f7665726569676e080110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d65737361676595060154426f783c56657273696f6e656458636d3c28293e3e000004ac53656e6420616e2058434d206d6573736167652061732070617261636861696e20736f7665726569676e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39070c306f726d6c5f78746f6b656e73186d6f64756c651043616c6c040454000118207472616e7366657210012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d69740000306c5472616e73666572206e61746976652063757272656e636965732e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e4c7472616e736665725f6d756c746961737365740c011461737365743d07014c426f783c56657273696f6e656441737365743e000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d6974000130445472616e7366657220604173736574602e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e447472616e736665725f776974685f66656514012c63757272656e63795f6964100134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500010c666565180128543a3a42616c616e6365000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d6974000254ec5472616e73666572206e61746976652063757272656e636965732073706563696679696e67207468652066656520616e6420616d6f756e742061732473657061726174652e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d0160666565602069732074686520616d6f756e7420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e2064657374696e6174696f6ef8636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d207468652063616c6c6572732062616c616e63652e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e707472616e736665725f6d756c746961737365745f776974685f66656510011461737365743d07014c426f783c56657273696f6e656441737365743e00010c6665653d07014c426f783c56657273696f6e656441737365743e000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d6974000354ec5472616e7366657220604173736574602073706563696679696e67207468652066656520616e6420616d6f756e742061732073657061726174652e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00d860666565602069732074686520417373657420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e090164657374696e6174696f6e20636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d20746865110163616c6c6572732062616c616e636520466f72206e6f77207765206f6e6c79206163636570742066656520616e6420617373657420686176696e67207468652073616d6538604c6f636174696f6e602069642e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e607472616e736665725f6d756c746963757272656e6369657310012863757272656e63696573410701805665633c28543a3a43757272656e637949642c20543a3a42616c616e6365293e0001206665655f6974656d10010c753332000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d697400043c05015472616e73666572207365766572616c2063757272656e636965732073706563696679696e6720746865206974656d20746f20626520757365642061732066656500fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d01606665655f6974656d6020697320696e646578206f66207468652063757272656e63696573207475706c6520746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e507472616e736665725f6d756c74696173736574731001186173736574731d030150426f783c56657273696f6e65644173736574733e0001206665655f6974656d10010c753332000110646573746d030158426f783c56657273696f6e65644c6f636174696f6e3e000144646573745f7765696768745f6c696d69741903012c5765696768744c696d697400053cf85472616e73666572207365766572616c20604173736574602073706563696679696e6720746865206974656d20746f20626520757365642061732066656500fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00e4606665655f6974656d6020697320696e646578206f66207468652041737365747320746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d07080c78636d3856657273696f6e6564417373657400010c08563204002903013876323a3a4d756c7469417373657400010008563304005d03013876333a3a4d756c746941737365740003000856340400c502012476343a3a4173736574000400004107000002e5050045070c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000124447365745f696e76756c6e657261626c657304010c6e6577990301445665633c543a3a4163636f756e7449643e000034310153657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e20546865736520636f6c6c61746f7273206d75737420646f20736f6d65d07072657061726174696f6e2c206e616d656c7920746f206861766520726567697374657265642073657373696f6e206b6579732e0059015468652063616c6c2077696c6c2072656d6f766520616e79206163636f756e747320746861742068617665206e6f742072656769737465726564206b6579732066726f6d20746865207365742e20546861742069732c5d016974206973206e6f6e2d61746f6d69633b207468652063616c6c6572206163636570747320616c6c20604163636f756e74496460732070617373656420696e20606e657760205f696e646976696475616c6c795f206173310161636365707461626c6520496e76756c6e657261626c65732c20616e64206973206e6f742070726f706f73696e672061205f7365745f206f66206e657720496e76756c6e657261626c65732e005901546869732063616c6c20646f6573206e6f74206d61696e7461696e206d757475616c206578636c75736976697479206f662060496e76756c6e657261626c65736020616e64206043616e64696461746573602e20497461016973207265636f6d6d656e64656420746f207573652061206261746368206f6620606164645f696e76756c6e657261626c656020616e64206072656d6f76655f696e76756c6e657261626c656020696e73746561642e204151016062617463685f616c6c602063616e20616c736f206265207573656420746f20656e666f7263652061746f6d69636974792e20496620616e792063616e646964617465732061726520696e636c7564656420696e4d01606e6577602c20746865792073686f756c642062652072656d6f7665642077697468206072656d6f76655f696e76756c6e657261626c655f63616e6469646174656020616674657220657865637574696f6e2e00944d7573742062652063616c6c65642062792074686520605570646174654f726967696e602e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200011455015365742074686520696465616c206e756d626572206f66206e6f6e2d696e76756c6e657261626c6520636f6c6c61746f72732e204966206c6f776572696e672074686973206e756d6265722c207468656e2074686561016e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e2041736964652066726f6d2074686174206564676520636173652c350174686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f72652063616e64696461746573207468616e207468652064657369726564206e756d6265722e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00021c78536574207468652063616e64696461637920626f6e6420616d6f756e742e0051014966207468652063616e64696461637920626f6e6420697320696e6372656173656420627920746869732063616c6c2c20616c6c2063757272656e742063616e64696461746573207768696368206861766520614d016465706f736974206c6f776572207468616e20746865206e657720626f6e642077696c6c206265206b69636b65642066726f6d20746865206c69737420616e6420676574207468656972206465706f73697473146261636b2e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041455014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e001901546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f775c604d696e456c696769626c65436f6c6c61746f7273602e406164645f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400051045014164642061206e6577206163636f756e74206077686f6020746f20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e206077686f60206d75737420686176651d01726567697374657265642073657373696f6e206b6579732e204966206077686f6020697320612063616e6469646174652c20746865792077696c6c2062652072656d6f7665642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e744964000610610152656d6f766520616e206163636f756e74206077686f602066726f6d20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e2060496e76756c6e657261626c657360206d75737428626520736f727465642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e2c7570646174655f626f6e6404012c6e65775f6465706f73697418013042616c616e63654f663c543e00071c5d01557064617465207468652063616e64696461637920626f6e64206f6620636f6c6c61746f722063616e64696461746520606f726967696e6020746f2061206e657720616d6f756e7420606e65775f6465706f736974602e00410153657474696e67206120606e65775f6465706f736974602074686174206973206c6f776572207468616e207468652063757272656e74206465706f736974207768696c6520606f726967696e60206973e06f6363757079696e67206120746f702d604465736972656443616e646964617465736020736c6f74206973206e6f7420616c6c6f7765642e005901546869732063616c6c2077696c6c206661696c20696620606f726967696e60206973206e6f74206120636f6c6c61746f722063616e6469646174652c20746865207570646174656420626f6e64206973206c6f77657219017468616e20746865206d696e696d756d2063616e64696461637920626f6e642c20616e642f6f722074686520616d6f756e742063616e6e6f742062652072657365727665642e4c74616b655f63616e6469646174655f736c6f7408011c6465706f73697418013042616c616e63654f663c543e000118746172676574000130543a3a4163636f756e74496400081c4d015468652063616c6c657220606f726967696e60207265706c6163657320612063616e64696461746520607461726765746020696e2074686520636f6c6c61746f722063616e646964617465206c6973742062795501726573657276696e6720606465706f736974602e2054686520616d6f756e7420606465706f73697460207265736572766564206279207468652063616c6c6572206d7573742062652067726561746572207468616ee0746865206578697374696e6720626f6e64206f66207468652074617267657420697420697320747279696e6720746f207265706c6163652e005901546869732063616c6c2077696c6c206661696c206966207468652063616c6c657220697320616c7265616479206120636f6c6c61746f722063616e646964617465206f7220696e76756c6e657261626c652c20746865550163616c6c657220646f6573206e6f74206861766520726567697374657265642073657373696f6e206b6579732c2074686520746172676574206973206e6f74206120636f6c6c61746f722063616e6469646174652cbc616e642f6f722074686520606465706f7369746020616d6f756e742063616e6e6f742062652072657365727665642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49070c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579734d07011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d070c3c687964726164785f72756e74696d65186f70617175652c53657373696f6e4b657973000004011061757261510701c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300005107104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c69630000040004013c737232353531393a3a5075626c6963000055070c4470616c6c65745f656d615f6f7261636c651870616c6c65741043616c6c040454000108286164645f6f7261636c65080118736f75726365f1010118536f757263650001186173736574739101014828417373657449642c2041737365744964290000003472656d6f76655f6f7261636c65080118736f75726365f1010118536f757263650001186173736574739101014828417373657449642c204173736574496429000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5907083c687964726164785f72756e74696d65304f726967696e43616c6c657200011c1873797374656d04005d0701746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0001001c436f756e63696c0400610701010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00170048546563686e6963616c436f6d6d69747465650400650701010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e00190020457468657265756d04006907015c70616c6c65745f657468657265756d3a3a4f726967696e005c002c506f6c6b61646f7458636d04006d07014870616c6c65745f78636d3a3a4f726967696e006b002843756d756c757358636d04007107016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e006d0010566f69640400750701410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f6964000600005d070c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200006107084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200006507084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200006907083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e04000d02011048313630000000006d070c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d04007d0201204c6f636174696f6e00000020526573706f6e736504007d0201204c6f636174696f6e0001000071070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e040081030118506172614964000100007507081c73705f636f726510566f69640001000079070c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d07083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974c40150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974810701704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ecd01012c4f7074696f6e3c7533323e00010000810704184f7074696f6e04045401c40108104e6f6e6500000010536f6d650400c400000100008507083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b657401890701082c556e7265717565737465640801187469636b65748d07014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b65749107016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ecd01012c4f7074696f6e3c7533323e00010000890714346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6544486f6c64436f6e73696465726174696f6e10044100044600045200044400000400180128463a3a42616c616e636500008d070000040800890700910704184f7074696f6e040454018d070108104e6f6e6500000010536f6d6504008d07000001000095070000040834100099070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00009d070c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea10700000408a507b50700a5070c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e747300304964656e74697479496e666f018904000c01286a756467656d656e7473a90701fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f890401304964656e74697479496e666f0000a9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad07045300000400b10701185665633c543e0000ad070000040810190500b107000002ad0700b50704184f7074696f6e04045401a40108104e6f6e6500000010536f6d650400a40000010000b9070000040818bd0700bd070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400990301185665633c543e0000c1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c507045300000400cd0701185665633c543e0000c50704184f7074696f6e04045401c9070108104e6f6e6500000010536f6d650400c9070000010000c9070c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f0c1c42616c616e63650118244163636f756e74496401001c49644669656c640130000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c647330011c49644669656c640000cd07000002c50700d1070c3c70616c6c65745f6964656e746974791474797065734c417574686f7269747950726f70657274696573041853756666697801d50700080118737566666978d5070118537566666978000128616c6c6f636174696f6e100128416c6c6f636174696f6e0000d5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d90700000408001000dd070c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400016848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e44546f6f4d616e7952656769737472617273000b04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000c04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000d047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000e04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479000f04d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001004f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e34496e76616c6964537566666978001104805468652070726f76696465642073756666697820697320746f6f206c6f6e672e504e6f74557365726e616d65417574686f72697479001204e05468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e20746f206973737565206120757365726e616d652e304e6f416c6c6f636174696f6e001304c454686520617574686f726974792063616e6e6f7420616c6c6f6361746520616e79206d6f726520757365726e616d65732e40496e76616c69645369676e6174757265001404a8546865207369676e6174757265206f6e206120757365726e616d6520776173206e6f742076616c69642e4452657175697265735369676e6174757265001504090153657474696e67207468697320757365726e616d652072657175697265732061207369676e61747572652c20627574206e6f6e65207761732070726f76696465642e3c496e76616c6964557365726e616d65001604b054686520757365726e616d6520646f6573206e6f74206d6565742074686520726571756972656d656e74732e34557365726e616d6554616b656e0017047854686520757365726e616d6520697320616c72656164792074616b656e2e284e6f557365726e616d65001804985468652072657175657374656420757365726e616d6520646f6573206e6f742065786973742e284e6f74457870697265640019042d0154686520757365726e616d652063616e6e6f7420626520666f72636566756c6c792072656d6f76656420626563617573652069742063616e207374696c6c2062652061636365707465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e507045300000400e90701185665633c543e0000e5070000040c1031050000e907000002e50700ed0700000408f1071800f1070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400990301185665633c543e0000f5070c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0131051c42616c616e6365011801081c4f6e676f696e670400f90701c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564200110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000f9070c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0131051c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c3105012050726f706f73616c0001247468726573686f6c64ac0134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79fd07013854616c6c793c42616c616e63653e0000fd070c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000001080c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573050801f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e731108015044656c65676174696f6e733c42616c616e63653e0001147072696f721508017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e3d050128436f6e76696374696f6e00012c64656c65676174696f6e731108015044656c65676174696f6e733c42616c616e63653e0001147072696f721508017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000005080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540109080453000004000d0801185665633c543e000009080000040810b0000d0800000209080011080c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000015080c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e636500001908000004083105ac001d080000040810f1070021080c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25080000022908002908086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e636500002d08086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f746573990301385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e6365000031080c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400110201185665633c543e00003908084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e7400011061796573990301385665633c4163636f756e7449643e0001106e617973990301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200003d080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400110201185665633c543e000045080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f7208045400044900012c244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e545072696d654163636f756e744e6f744d656d626572000a04745072696d65206163636f756e74206973206e6f742061206d656d626572048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4908082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680134001c0118726561736f6e3401104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f736573cd01014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073c001645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565200110626f6f6c00004d080c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000051080c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011c30526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e504d6178546970416d6f756e7445786365656465640003047c5468652074697020676976656e2077617320746f6f2067656e65726f75732e244e6f7446696e6465720004041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0005042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650006043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5508000004085908180059080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d08045300000400610801185665633c543e00005d08083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d8012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000061080000025d08006508000004086908180069080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d08045300000400710801185665633c543e00006d08083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d626572000071080000026d080075080c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7908000004080004007d08083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ee4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c738108018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000081080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400990301185665633c543e000085080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e89080c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67200110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656e200110626f6f6c00008d080000040c0018180091080c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f766564010101444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656e200110626f6f6c00011c6465706f7369741801384465706f73697442616c616e6365000095080c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461ec016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000099080c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461ec016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c00009d080000040c18f4f800a10800000408fc1800a5080000040818010100a9080c3870616c6c65745f756e69717565731870616c6c6574144572726f72080454000449000148304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d000f047454686520676976656e206974656d20494420697320756e6b6e6f776e2e284e6f74466f7253616c65001004544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001104705468652070726f76696465642062696420697320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead080c5470616c6c65745f61737365745f726567697374727914747970657330417373657444657461696c73042c537472696e674c696d697400001c01106e616d65150101644f7074696f6e3c4e616d653c537472696e674c696d69743e3e00012861737365745f747970651d01012441737365745479706500014c6578697374656e7469616c5f6465706f73697418011c42616c616e636500011873796d626f6c1501016c4f7074696f6e3c53796d626f6c3c537472696e674c696d69743e3e000120646563696d616c73210101284f7074696f6e3c75383e00013878636d5f726174655f6c696d6974f4013c4f7074696f6e3c42616c616e63653e00013469735f73756666696369656e74200110626f6f6c0000b1080c5470616c6c65745f61737365745f72656769737472791870616c6c6574144572726f7204045400013c344e6f4964417661696c61626c6500000471014173736574204944206973206e6f7420617661696c61626c652e2054686973206f6e6c792068617070656e73207768656e206974207265616368657320746865204d41582076616c7565206f6620676976656e20696420747970652e3441737365744e6f74466f756e6400010474496e76616c6964206173736574206e616d65206f722073796d626f6c2e20546f6f53686f7274000204c84c656e677468206f66206e616d65206f722073796d626f6c206973206c657373207468616e206d696e2e206c656e6774682e34496e76616c696453796d626f6c000304d0417373657427732073796d626f6c2063616e277420636f6e7461696e20776869746573706163652063686172616374657273202e4841737365744e6f7452656769737465726564000404c44173736574204944206973206e6f74207265676973746572656420696e207468652061737365742d72656769737472792e584173736574416c72656164795265676973746572656400050470417373657420697320616c726561647920726567697374657265642e54496e76616c696453686172656441737365744c656e000604ec496e636f7272656374206e756d626572206f66206173736574732070726f766964656420746f20637265617465207368617265642061737365742e5043616e6e6f745570646174654c6f636174696f6e0007047443616e6e6f7420757064617465206173736574206c6f636174696f6e2e484e6f74496e526573657276656452616e6765000804ac53656c6563746564206173736574206964206973206f7574206f662072657365727665642072616e67652e644c6f636174696f6e416c726561647952656769737465726564000904c44c6f636174696f6e20616c72656164792072656769737465726564207769746820646966666572656e742061737365742e24466f7262696464656e000a04a04f726967696e20697320666f7262696464656e20746f207365742f7570646174652076616c75652e4c496e73756666696369656e7442616c616e6365000b044042616c616e636520746f6f206c6f772e68466f7262696464656e53756666696369656e63794368616e6765000c04cc53756666696369656e74206173736574732063616e2774206265206368616e67656420746f20696e73756666696369656e742e484173736574416c726561647942616e6e6564000d0460417373657420697320616c72656164792062616e6e65642e3841737365744e6f7442616e6e6564000e04504173736574206973206e6f742062616e6e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb5080c3470616c6c65745f636c61696d731870616c6c6574144572726f7204045400010c60496e76616c6964457468657265756d5369676e61747572650000047c457468657265756d207369676e6174757265206973206e6f742076616c69645c4e6f436c61696d4f72416c7265616479436c61696d656400010448436c61696d206973206e6f742076616c69643c42616c616e63654f766572666c6f77000204dc56616c75652072656163686564206d6178696d756d20616e642063616e6e6f7420626520696e6372656d656e7465642066757274686572048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb908085870616c6c65745f67656e657369735f686973746f727914436861696e000008013067656e657369735f686173683401104832353600013c6c6173745f626c6f636b5f68617368340110483235360000bd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400990301185665633c543e0000c1080c5c70616c6c65745f636f6c6c61746f725f726577617264731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5080c3c70616c6c65745f6f6d6e69706f6f6c1474797065732841737365745374617465041c42616c616e636501180014012c6875625f7265736572766518011c42616c616e636500011873686172657318011c42616c616e636500013c70726f746f636f6c5f73686172657318011c42616c616e636500010c636170180110753132380001207472616461626c656501012c547261646162696c6974790000c9080c3c70616c6c65745f6f6d6e69706f6f6c1474797065733c53696d706c65496d62616c616e6365041c42616c616e636501180008011476616c756518011c42616c616e63650001206e65676174697665200110626f6f6c0000cd080c3c70616c6c65745f6f6d6e69706f6f6c14747970657320506f736974696f6e081c42616c616e636501181c4173736574496401100010012061737365745f696410011c41737365744964000118616d6f756e7418011c42616c616e636500011873686172657318011c42616c616e63650001147072696365a90501482842616c616e63652c2042616c616e6365290000d1080c3c70616c6c65745f6f6d6e69706f6f6c1870616c6c6574144572726f720404540001804c496e73756666696369656e7442616c616e63650000043c42616c616e636520746f6f206c6f77444173736574416c7265616479416464656400010470417373657420697320616c726561647920696e206f6d6e69706f6f6c3441737365744e6f74466f756e64000204604173736574206973206e6f7420696e206f6d6e69706f6f6c384d697373696e6742616c616e636500030419014661696c656420746f2061646420746f6b656e20746f204f6d6e69706f6f6c2064756520746f20696e73756666696369656e7420696e697469616c206c69717569646974792e60496e76616c6964496e697469616c4173736574507269636500040470496e76616c696420696e697469616c2061737365742070726963652e484275794c696d69744e6f7452656163686564000504e4536c6970706167652070726f74656374696f6e202d206d696e696d756d206c696d697420686173206e6f74206265656e20726561636865642e4453656c6c4c696d69744578636565646564000604d8536c6970706167652070726f74656374696f6e202d206d6178696d756d206c696d697420686173206265656e2065786365656465642e40506f736974696f6e4e6f74466f756e6400070470506f736974696f6e20686173206e6f74206265656e20666f756e642e48496e73756666696369656e745368617265730008047c496e73756666696369656e742073686172657320696e20706f736974696f6e284e6f74416c6c6f776564000904884173736574206973206e6f7420616c6c6f77656420746f206265207472616465642e24466f7262696464656e000a04c45369676e6564206163636f756e74206973206e6f74206f776e6572206f6620706f736974696f6e20696e7374616e63652e5841737365745765696768744361704578636565646564000b048c4173736574207765696768742063617020686173206265656e2065786365656465642e4841737365744e6f7452656769737465726564000c04a44173736574206973206e6f74207265676973746572656420696e20617373657420726567697374727954496e73756666696369656e744c6971756964697479000d04c450726f7669646564206c69717569646974792069732062656c6f77206d696e696d756d20616c6c6f776564206c696d697464496e73756666696369656e7454726164696e67416d6f756e74000e04b054726164656420616d6f756e742069732062656c6f77206d696e696d756d20616c6c6f776564206c696d69746053616d65417373657454726164654e6f74416c6c6f776564000f04bc53656c6c206f722062757920776974682073616d6520617373657420696473206973206e6f7420616c6c6f7765642e4c48756241737365745570646174654572726f72001004c84c524e412075706461746520616674657220747261646520726573756c747320696e20706f7369746976652076616c75652e44506f736974697665496d62616c616e636500110490496d62616c616e636520726573756c747320696e20706f7369746976652076616c75652e4c496e76616c6964536861726573416d6f756e7400120498416d6f756e74206f66207368617265732070726f76696465642063616e6e6f7420626520302e70496e76616c696448756241737365745472616461626c65537461746500130494487562206173736574206973206f6e6c7920616c6c6f77656420746f20626520736f6c642e544173736574526566756e644e6f74416c6c6f776564001404904173736574206973206e6f7420616c6c6f77656420746f20626520726566756e6465642e4c4d61784f7574526174696f4578636565646564001504bc4d6178206672616374696f6e206f6620617373657420746f2062757920686173206265656e2065786365656465642e484d6178496e526174696f4578636565646564001604c04d6178206672616374696f6e206f6620617373657420746f2073656c6c20686173206265656e2065786365656465642e585072696365446966666572656e6365546f6f48696768001704bc4d617820616c6c6f77656420707269636520646966666572656e636520686173206265656e2065786365656465642e48496e76616c69644f7261636c655072696365001804a0496e76616c6964206f7261636c65207072696365202d206469766973696f6e206279207a65726f2e50496e76616c69645769746864726177616c4665650019048c4661696c656420746f2063616c63756c617465207769746864726177616c206665652e304665654f7665726472616674001a04d44d6f7265207468616e20616c6c6f77656420616d6f756e74206f662066656520686173206265656e207472616e736665727265642e3c53686172657352656d61696e696e67001b043d01546f6b656e2063616e6e6f742062652072656d6f7665642066726f6d204f6d6e69706f6f6c2064756520746f20736861726573207374696c6c206f776e6564206279206f746865722075736572732e3841737365744e6f7446726f7a656e001c040901546f6b656e2063616e6e6f742062652072656d6f7665642066726f6d204f6d6e69706f6f6c2062656361757365206173736574206973206e6f742066726f7a656e2e345a65726f416d6f756e744f7574001d04b843616c63756c6174656420616d6f756e74206f75742066726f6d2073656c6c207472616465206973207a65726f2e784578697374656e7469616c4465706f7369744e6f74417661696c61626c65001e04b84578697374656e7469616c206465706f736974206f66206173736574206973206e6f7420617661696c61626c652e34536c6970706167654c696d6974001f044c536c6970706167652070726f74656374696f6e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed50800000408d908d90800d9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000dd080c6070616c6c65745f7472616e73616374696f6e5f70617573651870616c6c6574144572726f7204045400010c2c43616e6e6f7450617573650000043463616e206e6f7420706175736540496e76616c696443686172616374657200010468696e76616c69642063686172616374657220656e636f64696e672c4e616d65546f6f4c6f6e67000204a070616c6c6574206e616d65206f722066756e6374696f6e206e616d6520697320746f6f206c6f6e67048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee1080c3470616c6c65745f6475737465721870616c6c6574144572726f72040454000118484163636f756e74426c61636b6c6973746564000004844163636f756e74206973206578636c756465642066726f6d2064757374696e672e544163636f756e744e6f74426c61636b6c6973746564000104c04163636f756e74206973206e6f742070726573656e7420696e20746865206e6f6e2d6475737461626c65206c6973742e2c5a65726f42616c616e6365000204505468652062616c616e6365206973207a65726f2e4442616c616e636553756666696369656e74000304bc5468652062616c616e63652069732073756666696369656e7420746f206b656570206163636f756e74206f70656e2e44447573744163636f756e744e6f745365740004046044757374206163636f756e74206973206e6f74207365742e50526573657276654163636f756e744e6f745365740005046c52657365727665206163636f756e74206973206e6f74207365742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5080c5c70616c6c65745f6c69717569646974795f6d696e696e6714747970657338476c6f62616c4661726d4461746108045400044900004801086964100130476c6f62616c4661726d49640001146f776e6572000130543a3a4163636f756e744964000128757064617465645f617410012c506572696f644f663c543e000138746f74616c5f7368617265735f7a18011c42616c616e636500013c616363756d756c617465645f72707a6101012446697865645531323800013c7265776172645f63757272656e6379100128543a3a4173736574496400013c70656e64696e675f7265776172647318011c42616c616e6365000160616363756d756c617465645f706169645f7265776172647318011c42616c616e63650001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e000148696e63656e746976697a65645f6173736574100128543a3a417373657449640001546d61785f7265776172645f7065725f706572696f6418011c42616c616e636500012c6d696e5f6465706f73697418011c42616c616e63650001586c6976655f7969656c645f6661726d735f636f756e7410010c75333200015c746f74616c5f7969656c645f6661726d735f636f756e7410010c75333200014070726963655f61646a7573746d656e74610101244669786564553132380001147374617465e90801244661726d53746174650000e9080c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573244661726d537461746500010c184163746976650000001c53746f70706564000100285465726d696e6174656400020000ed080000040c10101000f1080c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573345969656c644661726d44617461080454000449000030010869641001184661726d4964000128757064617465645f617410012c506572696f644f663c543e000130746f74616c5f73686172657318011c42616c616e636500014c746f74616c5f76616c7565645f73686172657318011c42616c616e6365000140616363756d756c617465645f727076736101012446697865645531323800013c616363756d756c617465645f72707a610101244669786564553132380001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e0001286d756c7469706c696572610101384661726d4d756c7469706c6965720001147374617465e90801244661726d5374617465000134656e74726965735f636f756e7430010c7536340001486c6566745f746f5f6469737472696275746518011c42616c616e6365000134746f74616c5f73746f7070656410012c506572696f644f663c543e0000f5080c5c70616c6c65745f6c69717569646974795f6d696e696e671474797065732c4465706f7369744461746108045400044900000c011873686172657318011c42616c616e636500012c616d6d5f706f6f6c5f6964100130543a3a416d6d506f6f6c49640001487969656c645f6661726d5f656e7472696573f90801f4426f756e6465645665633c5969656c644661726d456e7472793c542c20493e2c20543a3a4d61784661726d456e74726965735065724465706f7369743e0000f9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd08045300000400010901185665633c543e0000fd080c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573385969656c644661726d456e7472790804540004490000200138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400013476616c7565645f73686172657318011c42616c616e6365000140616363756d756c617465645f727076736101012446697865645531323800016c616363756d756c617465645f636c61696d65645f7265776172647318011c42616c616e6365000128656e74657265645f617410012c506572696f644f663c543e000128757064617465645f617410012c506572696f644f663c543e00014c73746f707065645f61745f6372656174696f6e10012c506572696f644f663c543e00000109000002fd080005090c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c6574144572726f7208045400044900017448476c6f62616c4661726d4e6f74466f756e640000046c476c6f62616c206661726d20646f6573206e6f742065786973742e445969656c644661726d4e6f74466f756e64000104685969656c64206661726d20646f6573206e6f742065786973742e4c446f75626c65436c61696d496e506572696f64000204c84d756c7469706c6520636c61696d7320696e207468652073616d6520706572696f64206973206e6f7420616c6c6f7765642e5c4c69717569646974794d696e696e6743616e63656c6564000304744c6971756964697479206d696e696e672069732063616e63656c65642e5c4c69717569646974794d696e696e674973416374697665000404844c6971756964697479206d696e696e67206973206e6f742063616e63656c65642e6c4c69717569646974794d696e696e6749734e6f7453746f7070656400050455014c6971756964697479206d696e696e6720697320696e206061637469766560206f7220607465726d696e617465646020737461746520616e6420616374696f6e2063616e6e6f7420626520636f6d706c657465642e50496e76616c69644465706f736974416d6f756e74000604784c502073686172657320616d6f756e74206973206e6f742076616c69642e24466f7262696464656e000704a44163636f756e74206973206e6f7420616c6c6f77656420746f20706572666f726d20616374696f6e2e44496e76616c69644d756c7469706c696572000804845969656c64206661726d206d756c7469706c6965722063616e277420626520302e585969656c644661726d416c726561647945786973747300090409015969656c64206661726d207769746820676976656e2060616d6d5f706f6f6c5f69646020616c72656164792065786973747320696e20676c6f62616c206661726d2e78496e76616c6964496e697469616c52657761726450657263656e74616765000a043d014c6f79616c7479206375727665277320696e697469616c207265776172642070657263656e74616765206973206e6f742076616c69642e2056616c69642072616e67652069733a205b302c2031292e50476c6f62616c4661726d49734e6f74456d707479000b04b44f6e65206f72206d6f7265207969656c64206661726d7320657869737420696e20676c6f62616c206661726d2e604d697373696e67496e63656e746976697a65644173736574000c04f84661726d27732060696e63656e746976697a65645f617373657460206973206d697373696e6720696e2070726f766964656420617373657420706169722e84496e73756666696369656e7452657761726443757272656e637942616c616e6365000d04a85265776172642063757272656e63792062616c616e6365206973206e6f742073756666696369656e742e58496e76616c6964426c6f636b73506572506572696f64000e0474426c6f636b732070657220706572696f642063616e277420626520302e54496e76616c69645969656c64506572506572696f64000f04705969656c642070657220706572696f642063616e277420626520302e4c496e76616c6964546f74616c52657761726473001004c4546f74616c2072657761726473206973206c657373207468616e20604d696e546f74616c4661726d52657761726473602e74496e76616c6964506c616e6e65645969656c64696e67506572696f64730011040901506c616e6e6564207969656c64696e6720706572696f6473206973206c657373207468616e20604d696e506c616e6e65645969656c64696e67506572696f6473602e504d6178456e74726965735065724465706f736974001204b04d6178696d756d206e756d626572206f66206c6f636b73207265616368656420666f72206465706f7369742e28446f75626c654c6f636b001304e0547279696e6720746f206c6f636b204c502073686172657320696e746f20616c7265616479206c6f636b6564207969656c64206661726d2e585969656c644661726d456e7472794e6f74466f756e64001404c45969656c64206661726d20656e74727920646f65736e277420657869737420666f7220676976656e206465706f7369742e40476c6f62616c4661726d497346756c6c00150849014d6178206e756d626572206f66207969656c64206661726d7320696e20676c6f62616c206661726d2077617320726561636865642e20476c6f62616c206661726d2063616e277420616363657074206e6577f87969656c64206661726d7320756e74696c20736f6d65207969656c64206661726d206973206e6f742072656d6f7665642066726f6d2073746f726167652e44496e76616c69644d696e4465706f736974001604b4496e76616c6964206d696e2e206465706f736974207761732073657420666f7220676c6f62616c206661726d2e58496e76616c6964507269636541646a7573746d656e740017049c50726963652061646a7573746d656e74206d756c7469706c6965722063616e277420626520302e444572726f724765744163636f756e744964001804804163636f756e74206372656174696f6e2066726f6d206964206661696c65642e54496e636f727265637456616c756564536861726573001904250156616c7565206f66206465706f73697465642073686172657320616d6f756e7420696e207265776172642063757272656e63792069732062656c6c6f77206d696e2e206c696d69742e6c52657761726443757272656e63794e6f7452656769737465726564001a04d8607265776172645f63757272656e637960206973206e6f74207265676973746572656420696e2061737365742072656769737472792e78496e63656e746976697a656441737365744e6f7452656769737465726564001b04e460696e63656e746976697a65645f617373657460206973206e6f74207265676973746572656420696e2061737365742072656769737472792e44496e636f6e73697374656e745374617465040009090158496e636f6e73697374656e7453746174654572726f72001c086501416374696f6e2063616e6e6f7420626520636f6d706c65746564206265636175736520756e6578706563746564206572726f7220686173206f636375727265642e20546869732073686f756c64206265207265706f7274656460746f2070726f746f636f6c206d61696e7461696e6572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09090c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c657458496e636f6e73697374656e7453746174654572726f72000144445969656c644661726d4e6f74466f756e6400000048476c6f62616c4661726d4e6f74466f756e64000100504c697175696469747949734e6f7441637469766500020054476c6f62616c4661726d49734e6f744163746976650003003c4465706f7369744e6f74466f756e6400040034496e76616c6964506572696f640005006c4e6f74456e6f75676852657761726473496e5969656c644661726d00060064496e76616c69644c6976655969656c4661726d73436f756e740007006c496e76616c6964546f74616c5969656c644661726d73436f756e7400080070496e76616c69645969656c644661726d456e7472696573436f756e7400090048496e76616c6964546f74616c536861726573000a004c496e76616c696456616c756564536861726573000b004c496e76616c6964546f74616c5368617265735a000c0074496e76616c696450616964416363756d756c6174656452657761726473000d0034496e76616c69644661726d4964000e0060496e76616c69644c6f79616c74794d756c7469706c696572000f00704e6f4578697374656e7469616c4465706f736974466f724173736574001000000d090c38687964726164785f747261697473186f7261636c65304f7261636c65506572696f64000118244c617374426c6f636b0000001453686f72740001002854656e4d696e7574657300020010486f75720003000c446179000400105765656b0005000011090c8070616c6c65745f6f6d6e69706f6f6c5f6c69717569646974795f6d696e696e671870616c6c6574144572726f720404540001183441737365744e6f74466f756e64000004744173736574206973206e6f7420696e20746865206f6d6e69706f6f6c2e24466f7262696464656e000104ac5369676e6564206163636f756e74206973206e6f74206f776e6572206f6620746865206465706f7369742e485a65726f436c61696d6564526577617264730002045c5265776172647320746f20636c61696d2061726520302e44496e636f6e73697374656e745374617465040015090158496e636f6e73697374656e7453746174654572726f720003086501416374696f6e2063616e6e6f7420626520636f6d706c65746564206265636175736520756e6578706563746564206572726f7220686173206f636375727265642e20546869732073686f756c64206265207265706f7274656460746f2070726f746f636f6c206d61696e7461696e6572732e484f7261636c654e6f74417661696c61626c65000404bc4f7261636c6520636f756c64206e6f7420626520666f756e6420666f7220726571756573746564206173736574732e6c507269636541646a7573746d656e744e6f74417661696c61626c6500050431014f7261636c652070726f766964696e67206070726963655f61646a7573746d656e746020636f756c64206e6f7420626520666f756e6420666f7220726571756573746564206173736574732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e15090c8070616c6c65745f6f6d6e69706f6f6c5f6c69717569646974795f6d696e696e671870616c6c657458496e636f6e73697374656e7453746174654572726f72000108444d697373696e674c70506f736974696f6e0000004c4465706f736974446174614e6f74466f756e64000100001909082870616c6c65745f6f7463144f7264657208244163636f756e74496401001c417373657449640110001801146f776e65720001244163636f756e74496400012061737365745f696e10011c4173736574496400012461737365745f6f757410011c41737365744964000124616d6f756e745f696e18011c42616c616e6365000128616d6f756e745f6f757418011c42616c616e63650001487061727469616c6c795f66696c6c61626c65200110626f6f6c00001d090c2870616c6c65745f6f74631870616c6c6574144572726f720404540001204841737365744e6f745265676973746572656400000480417373657420646f6573206e6f7420657869737420696e207265676973747279344f726465724e6f74466f756e64000104544f726465722063616e6e6f7420626520666f756e64444f7264657249644f75744f66426f756e640002048853697a65206f66206f7264657220494420657863656564732074686520626f756e64644f726465724e6f745061727469616c6c7946696c6c61626c65000304f843616e6e6f74207061727469616c6c792066696c6c20616e206f72646572207768696368206973206e6f74207061727469616c6c792066696c6c61626c654c4f72646572416d6f756e74546f6f536d616c6c00040c61014f7264657220616d6f756e745f696e20616e6420616d6f756e745f6f7574206d75737420617420616c6c2074696d65732062652067726561746572207468616e20746865206578697374656e7469616c206465706f736974f4666f7220746865206173736574206d756c7469706c69656420627920746865204578697374656e7469616c4465706f7369744d756c7469706c6965722ef0412066696c6c206f72646572206d6179206e6f74206c6561766520626568696e6420616d6f756e747320736d616c6c6572207468616e20746869732e244d6174684572726f72000504704572726f722077697468206d6174682063616c63756c6174696f6e7324466f7262696464656e000604e85468652063616c6c657220646f6573206e6f742068617665207065726d697373696f6e20746f20636f6d706c6574652074686520616374696f6e68496e73756666696369656e745265736572766564416d6f756e740007047c526573657276656420616d6f756e74206e6f742073756666696369656e742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2109085870616c6c65745f636972637569745f627265616b6572405472616465566f6c756d654c696d697404045400000c0124766f6c756d655f696e180128543a3a42616c616e6365000128766f6c756d655f6f7574180128543a3a42616c616e63650001146c696d6974180128543a3a42616c616e636500002509085870616c6c65745f636972637569745f627265616b6572384c69717569646974794c696d697404045400000801246c6971756964697479180128543a3a42616c616e63650001146c696d6974180128543a3a42616c616e6365000029090c5870616c6c65745f636972637569745f627265616b65721870616c6c6574144572726f7204045400011844496e76616c69644c696d697456616c7565000004c8496e76616c69642076616c756520666f722061206c696d69742e204c696d6974206d757374206265206e6f6e2d7a65726f2e7c4c69717569646974794c696d69744e6f7453746f726564466f724173736574000104bc416c6c6f776564206c6971756964697479206c696d6974206973206e6f742073746f72656420666f7220617373657460546f6b656e4f7574666c6f774c696d697452656163686564000204b8546f6b656e207472616465206f7574666c6f772070657220626c6f636b20686173206265656e20726561636865645c546f6b656e496e666c75784c696d697452656163686564000304b4546f6b656e20747261646520696e666c75782070657220626c6f636b20686173206265656e2072656163686564804d61784c69717569646974794c696d6974506572426c6f636b52656163686564000404e44d6178696d756d20706f6f6c2773206c6971756964697479206c696d69742070657220626c6f636b20686173206265656e2072656163686564284e6f74416c6c6f776564000504904173736574206973206e6f7420616c6c6f77656420746f20686176652061206c696d6974048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d090c5470616c6c65745f726f7574655f6578656375746f7214747970657318536b6970456400010c104c6f636b000000344c6f636b416e64556e6c6f636b00010018556e6c6f636b0002000031090c5470616c6c65745f726f7574655f6578656375746f721870616c6c6574144572726f720404540001284c54726164696e674c696d697452656163686564000004885468652074726164696e67206c696d697420686173206265656e2072656163686564444d61785472616465734578636565646564000104b454686520746865206d6178206e756d626572206f6620747261646573206c696d6974206973207265616368656440506f6f6c4e6f74537570706f72746564000204c854686520414d4d20706f6f6c206973206e6f7420737570706f7274656420666f7220657865637574696e67207472616465734c496e73756666696369656e7442616c616e6365000304d0546865207573657220686173206e6f7420656e6f7567682062616c616e636520746f20657865637574652074686520747261646558526f75746543616c63756c6174696f6e4661696c65640004040d015468652063616c63756c6174696f6e206f6620726f75746520747261646520616d6f756e7473206661696c656420696e2074686520756e6465726c79696e6720414d4d30496e76616c6964526f7574650005045054686520726f75746520697320696e76616c696468526f75746555706461746549734e6f745375636365737366756c0006048c54686520726f7574652075706461746520776173206e6f74207375636365737366756c40526f7574654861734e6f4f7261636c65000704b4526f75746520636f6e7461696e7320617373657473207468617420686173206e6f206f7261636c65206461746154496e76616c6964526f757465457865637574696f6e000804c054686520726f75746520657865637574696f6e206661696c656420696e2074686520756e6465726c79696e6720414d4d284e6f74416c6c6f7765640009048c54726164696e672073616d6520617373657473206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35090c4c70616c6c65745f64796e616d69635f6665657314747970657320466565456e747279080c46656501690114426c6f636b0110000c012461737365745f6665656901010c46656500013070726f746f636f6c5f6665656901010c46656500012474696d657374616d70100114426c6f636b000039090c4c70616c6c65745f64796e616d69635f6665657314747970657324466565506172616d73040c4665650169010010011c6d696e5f6665656901010c46656500011c6d61785f6665656901010c466565000114646563617961010124466978656455313238000134616d706c696669636174696f6e6101012446697865645531323800003d090c4c70616c6c65745f64796e616d69635f666565731870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41090c3870616c6c65745f7374616b696e671474797065732c5374616b696e674461746100000c012c746f74616c5f7374616b6518011c42616c616e6365000170616363756d756c617465645f7265776172645f7065725f7374616b6561010124466978656455313238000150706f745f72657365727665645f62616c616e636518011c42616c616e6365000045090c3870616c6c65745f7374616b696e6714747970657320506f736974696f6e042c426c6f636b4e756d6265720110001c01147374616b6518011c42616c616e6365000134616374696f6e5f706f696e7473180114506f696e740001407265776172645f7065725f7374616b6561010124466978656455313238000128637265617465645f617410012c426c6f636b4e756d626572000160616363756d756c617465645f736c6173685f706f696e7473180114506f696e74000168616363756d756c617465645f756e706169645f7265776172647318011c42616c616e6365000168616363756d756c617465645f6c6f636b65645f7265776172647318011c42616c616e6365000049090c3870616c6c65745f7374616b696e6714747970657318566f74696e6704204d6178566f7465730000040114766f7465734d0901b4426f756e6465645665633c285265666572656e64756d496e6465782c20566f7465292c204d6178566f7465733e00004d090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540151090453000004005d0901185665633c543e00005109000004081055090055090c3870616c6c65745f7374616b696e6714747970657310566f74650000080118616d6f756e7418011c42616c616e6365000128636f6e76696374696f6e59090128436f6e76696374696f6e000059090c3870616c6c65745f7374616b696e6714747970657328436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b65643678000600005d0900000251090061090c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000065090c3870616c6c65745f7374616b696e671870616c6c6574144572726f720404540001344c496e73756666696369656e7442616c616e63650000044c42616c616e636520697320746f6f206c6f772e44496e73756666696369656e745374616b65000104645374616b656420616d6f756e7420697320746f6f206c6f772e40506f736974696f6e4e6f74466f756e64000204905374616b696e6720706f736974696f6e20686173206e6f74206265656e20666f756e642e3c4d6178566f74657352656163686564000304e84d6178696d756d20616d6f756e74206f6620766f7465732077657265207265616368656420666f72207374616b696e6720706f736974696f6e2e384e6f74496e697469616c697a65640004046c5374616b696e67206973206e6f7420696e697469616c697a65642e48416c7265616479496e697469616c697a65640005047c5374616b696e6720697320616c726561647920696e697469616c697a65642e2841726974686d657469630006044441726974686d65746963206572726f722e444d697373696e67506f7442616c616e636500070458506f7427732062616c616e6365206973207a65726f2e54506f736974696f6e416c7265616479457869737473000804884163636f756e74277320706f736974696f6e20616c7265616479206578697374732e24466f7262696464656e000904bc5369676e6572206973206e6f7420616e206f776e6572206f6620746865207374616b696e6720706f736974696f6e2e344578697374696e67566f746573000a048c506f736974696f6e20636f6e7461696e73207265676973746572656420766f7465732e584578697374696e6750726f636573736564566f746573000b048501506f736974696f6e20636f6e7461696e732070726f63657373656420766f7465732e2052656d6f76656420746865736520766f746573206669727374206265666f726520696e6372656173696e67207374616b65206f7220636c61696d696e672e44496e636f6e73697374656e745374617465040069090158496e636f6e73697374656e7453746174654572726f72000c086501416374696f6e2063616e6e6f7420626520636f6d706c65746564206265636175736520756e6578706563746564206572726f7220686173206f636375727265642e20546869732073686f756c64206265207265706f7274656460746f2070726f746f636f6c206d61696e7461696e6572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e69090c3870616c6c65745f7374616b696e671870616c6c657458496e636f6e73697374656e7453746174654572726f7200011440506f736974696f6e4e6f74466f756e64000000584e6567617469766550656e64696e6752657761726473000100544e65676174697665556e706169645265776172647300020040546f6f4d616e79506f736974696f6e730003002841726974686d65746963000400006d090c4470616c6c65745f737461626c657377617014747970657320506f6f6c496e666f081c4173736574496401102c426c6f636b4e756d626572011000180118617373657473710901c4426f756e6465645665633c417373657449642c20436f6e73745533323c4d41585f4153534554535f494e5f504f4f4c3e3e000154696e697469616c5f616d706c696669636174696f6ead0101284e6f6e5a65726f55313600014c66696e616c5f616d706c696669636174696f6ead0101284e6f6e5a65726f553136000134696e697469616c5f626c6f636b10012c426c6f636b4e756d62657200012c66696e616c5f626c6f636b10012c426c6f636b4e756d62657200010c6665656901011c5065726d696c6c000071090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401100453000004009d0101185665633c543e00007509043852616e6765496e636c7573697665040c49647801ad01000801147374617274ad01010c49647800010c656e64ad01010c496478000079090c4470616c6c65745f737461626c65737761701870616c6c6574144572726f720404540001603c496e636f727265637441737365747300000419014372656174696e67206120706f6f6c20776974682073616d6520617373657473206f72206c657373207468616e203220617373657473206973206e6f7420616c6c6f7765642e444d61784173736574734578636565646564000104ac4d6178696d756d206e756d626572206f662061737365747320686173206265656e2065786365656465642e30506f6f6c4e6f74466f756e64000204a04120706f6f6c207769746820676976656e2061737365747320646f6573206e6f742065786973742e28506f6f6c457869737473000304a04120706f6f6c207769746820676976656e2061737365747320616c7265616479206578697374732e3841737365744e6f74496e506f6f6c000404644173736574206973206e6f7420696e2074686520706f6f6c2e5c536861726541737365744e6f7452656769737465726564000504a85368617265206173736574206973206e6f74207265676973746572656420696e2052656769737472792e5853686172654173736574496e506f6f6c417373657473000604c8536861726520617373657420697320616d6f756e7420617373657473207768656e206372656174696e67206120706f6f6c2e4841737365744e6f7452656769737465726564000704d84f6e65206f72206d6f72652061737365747320617265206e6f74207265676973746572656420696e204173736574526567697374727948496e76616c69644173736574416d6f756e740008040101496e76616c696420617373657420616d6f756e742070726f76696465642e20416d6f756e74206d7573742062652067726561746572207468616e207a65726f2e4c496e73756666696369656e7442616c616e6365000904e442616c616e6365206f6620616e206173736574206973206e6f742073756666696369656e7420746f20706572666f726d20612074726164652e48496e73756666696369656e74536861726573000a04050142616c616e6365206f662061207368617265206173736574206973206e6f742073756666696369656e7420746f207769746864726177206c69717569646974792e54496e73756666696369656e744c6971756964697479000b04bc4c697175696469747920686173206e6f74207265616368656420746865207265717569726564206d696e696d756d2e78496e73756666696369656e744c697175696469747952656d61696e696e67000c04e4496e73756666696369656e74206c6971756964697479206c65667420696e2074686520706f6f6c206166746572207769746864726177616c2e64496e73756666696369656e7454726164696e67416d6f756e74000d04e8416d6f756e74206973206c657373207468616e20746865206d696e696d756d2074726164696e6720616d6f756e7420636f6e666967757265642e484275794c696d69744e6f7452656163686564000e04c04d696e696d756d206c696d697420686173206e6f74206265656e207265616368656420647572696e672074726164652e4453656c6c4c696d69744578636565646564000f04b44d6178696d756d206c696d697420686173206265656e20657863656564656420647572696e672074726164652e5c496e76616c6964496e697469616c4c69717569646974790010049c496e697469616c206c6971756964697479206f66206173736574206d757374206265203e20302e50496e76616c6964416d706c696669636174696f6e001104a8416d706c696669636174696f6e206973206f75747369646520636f6e666967757265642072616e67652e60496e73756666696369656e74536861726542616c616e6365001204190152656d61696e696e672062616c616e6365206f662073686172652061737365742069732062656c6f772061737365742773206578697374656e7469616c206465706f7369742e284e6f74416c6c6f776564001304cc4e6f7420616c6c6f77656420746f20706572666f726d20616e206f7065726174696f6e206f6e20676976656e2061737365742e2450617374426c6f636b0014048c46757475726520626c6f636b206e756d62657220697320696e2074686520706173742e4453616d65416d706c696669636174696f6e001504c44e657720616d706c696669636174696f6e20697320657175616c20746f207468652070726576696f75732076616c75652e34536c6970706167654c696d697400160450536c6970706167652070726f74656374696f6e2e3c556e6b6e6f776e446563696d616c73001704884661696c656420746f20726574726965766520617373657420646563696d616c732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d090000040810300081090c3070616c6c65745f626f6e64731870616c6c6574144572726f7204045400011c344e6f74526567697374657265640000044c426f6e64206e6f742072656769737465726564244e6f744d617475726500010448426f6e64206973206e6f74206d61747572653c496e76616c69644d61747572697479000204604d61747572697479206e6f74206c6f6e6720656e6f7567683c446973616c6c6f7765644173736574000304ac41737365742074797065206e6f7420616c6c6f77656420666f7220756e6465726c79696e672061737365743441737365744e6f74466f756e64000404a84173736574206973206e6f74207265676973746572656420696e206041737365745265676973747279603c496e76616c6964426f6e644e616d650005047047656e657261746564206e616d65206973206e6f742076616c69642e3c4661696c546f50617273654e616d6500060498426f6e642773206e616d652070617273696e6720776173206e6f77207375636365737366756c048054686520604572726f726020656e756d206f6620746869732070616c6c65742e85090c5870616c6c65745f6f74635f736574746c656d656e74731870616c6c6574144572726f7204045400011c344f726465724e6f74466f756e640000044c4f7463206f72646572206e6f7420666f756e64504e6f745061727469616c6c7946696c6c61626c650001048c4f5443206f72646572206973206e6f74207061727469616c6c792066696c6c61626c6530496e76616c6964526f757465000204bc50726f766964656420726f75746520646f65736e2774206d6174636820746865206578697374696e6720726f7574655042616c616e6365496e636f6e73697374656e63790003049c496e697469616c20616e642066696e616c2062616c616e63652061726520646966666572656e74485472616465416d6f756e74546f6f4869676800040488547261646520616d6f756e7420686967686572207468616e206e6563657373617279445472616465416d6f756e74546f6f4c6f7700050484547261646520616d6f756e74206c6f776572207468616e206e65636573736172794450726963654e6f74417661696c61626c6500060488507269636520666f72206120726f757465206973206e6f7420617661696c61626c65048054686520604572726f726020656e756d206f6620746869732070616c6c65742e89090c2870616c6c65745f6c62701870616c6c6574144572726f7204045400015c7843616e6e6f74437265617465506f6f6c5769746853616d654173736574730000047c506f6f6c206173736574732063616e206e6f74206265207468652073616d65204e6f744f776e65720001046c4163636f756e74206973206e6f74206120706f6f6c206f776e65722c53616c65537461727465640002045053616c6520616c726561647920737461727465643053616c654e6f74456e6465640003046453616c65206973207374696c6c20696e2070726f67726573734053616c6549734e6f7452756e6e696e670004044c53616c65206973206e6f742072756e6e696e675c4d617853616c654475726174696f6e45786365656465640005046453616c65206475726174696f6e20697320746f6f206c6f6e675843616e6e6f744164645a65726f4c6971756964697479000604a04c6971756964697479206265696e672061646465642073686f756c64206e6f74206265207a65726f60496e73756666696369656e74417373657442616c616e63650007045441737365742062616c616e636520746f6f206c6f7730506f6f6c4e6f74466f756e640008044c506f6f6c20646f6573206e6f7420657869737444506f6f6c416c726561647945786973747300090474506f6f6c20686173206265656e20616c7265616479206372656174656444496e76616c6964426c6f636b52616e6765000a044c496e76616c696420626c6f636b2072616e67655857656967687443616c63756c6174696f6e4572726f72000b044443616c63756c6174696f6e206572726f7234496e76616c6964576569676874000c046857656967687420736574206973206f7574206f662072616e6765285a65726f416d6f756e74000d04a043616e206e6f7420706572666f726d20612074726164652077697468207a65726f20616d6f756e74484d6178496e526174696f4578636565646564000e0460547261646520616d6f756e7420697320746f6f20686967684c4d61784f7574526174696f4578636565646564000f0460547261646520616d6f756e7420697320746f6f206869676840466565416d6f756e74496e76616c696400100448496e76616c69642066656520616d6f756e744c54726164696e674c696d6974526561636865640011045454726164696e67206c696d69742072656163686564204f766572666c6f770012049c416e20756e657870656374656420696e7465676572206f766572666c6f77206f636375727265643c4e6f7468696e67546f557064617465001304444e6f7468696e6720746f2075706461746554496e73756666696369656e744c6971756964697479001404bc4c697175696469747920686173206e6f74207265616368656420746865207265717569726564206d696e696d756d2e64496e73756666696369656e7454726164696e67416d6f756e74001504a8416d6f756e74206973206c657373207468616e206d696e696d756d2074726164696e67206c696d69742e80466565436f6c6c6563746f72576974684173736574416c726561647955736564001604b04e6f74206d6f7265207468616e206f6e652066656520636f6c6c6563746f7220706572206173736574206964048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d090c2870616c6c65745f78796b1870616c6c6574144572726f720404540001647843616e6e6f74437265617465506f6f6c5769746853616d65417373657473000004dc4974206973206e6f7420616c6c6f77656420746f20637265617465206120706f6f6c206265747765656e2073616d65206173736574732e54496e73756666696369656e744c6971756964697479000104bc4c697175696469747920686173206e6f74207265616368656420746865207265717569726564206d696e696d756d2e64496e73756666696369656e7454726164696e67416d6f756e7400020498416d6f756e74206973206c657373207468616e206d696e2074726164696e67206c696d69742e345a65726f4c6971756964697479000304484c6971756964697479206973207a65726f2e405a65726f496e697469616c5072696365000408ec4974206973206e6f7420616c6c6f77656420746f20637265617465206120706f6f6c2077697468207a65726f20696e697469616c2070726963652ea44e6f7420757365642c206b65707420666f72206261636b7761726420636f6d7061746962696c69747970437265617465506f6f6c4173736574416d6f756e74496e76616c6964000508204f766572666c6f77a44e6f7420757365642c206b65707420666f72206261636b7761726420636f6d7061746962696c69747958496e76616c69644d696e7465644c6971756964697479000604204f766572666c6f7758496e76616c69644c6971756964697479416d6f756e74000704204f766572666c6f77604173736574416d6f756e7445786365656465644c696d697400080498417373657420616d6f756e742068617320657863656564656420676976656e206c696d69742e684173736574416d6f756e744e6f74526561636865644c696d6974000904a4417373657420616d6f756e7420686173206e6f74207265616368656420676976656e206c696d69742e60496e73756666696369656e74417373657442616c616e6365000a048041737365742062616c616e6365206973206e6f742073756666696369656e742e70496e73756666696369656e74506f6f6c417373657442616c616e6365000b049c4e6f7420656e6f756768206173736574206c697175696469747920696e2074686520706f6f6c2e84496e73756666696369656e744e617469766543757272656e637942616c616e6365000c04b04e6f7420656e6f75676820636f7265206173736574206c697175696469747920696e2074686520706f6f6c2e44546f6b656e506f6f6c4e6f74466f756e64000d04bc4c697175696469747920706f6f6c20666f7220676976656e2061737365747320646f6573206e6f742065786973742e58546f6b656e506f6f6c416c7265616479457869737473000e04bc4c697175696469747920706f6f6c20666f7220676976656e2061737365747320616c7265616479206578697374732e544164644173736574416d6f756e74496e76616c6964000f04204f766572666c6f776052656d6f76654173736574416d6f756e74496e76616c6964001004204f766572666c6f775853656c6c4173736574416d6f756e74496e76616c6964001104204f766572666c6f77544275794173736574416d6f756e74496e76616c6964001204204f766572666c6f7740466565416d6f756e74496e76616c6964001304204f766572666c6f774c43616e6e6f744170706c79446973636f756e74001404204f766572666c6f774c4d61784f7574526174696f457863656564656400150411014d6178206672616374696f6e206f6620706f6f6c20746f2062757920696e2073696e676c65207472616e73616374696f6e20686173206265656e2065786365656465642e484d6178496e526174696f457863656564656400160415014d6178206672616374696f6e206f6620706f6f6c20746f2073656c6c20696e2073696e676c65207472616e73616374696f6e20686173206265656e2065786365656465642e204f766572666c6f77001704204f766572666c6f774043616e6e6f74437265617465506f6f6c001804b8506f6f6c2063616e6e6f7420626520637265617465642064756520746f206f75747369646520666163746f72732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e910900000408e501180095090000040810e5010099090000040c101800009d090c4070616c6c65745f726566657272616c731870616c6c6574144572726f720404540001381c546f6f4c6f6e6700000468526566657272616c20636f646520697320746f6f206c6f6e672e20546f6f53686f72740001046c526566657272616c20636f646520697320746f6f2073686f72742e40496e76616c69644368617261637465720002044d01526566657272616c20636f646520636f6e7461696e7320696e76616c6964206368617261637465722e204f6e6c7920616c7068616e756d6572696320636861726163746572732061726520616c6c6f7765642e34416c726561647945786973747300030474526566657272616c20636f646520616c7265616479206578697374732e2c496e76616c6964436f6465000404210150726f766964656420726566657272616c20636f646520697320696e76616c69642e2045697468657220646f6573206e6f74206578697374206f7220697320746f6f206c6f6e672e34416c72656164794c696e6b6564000504d84163636f756e7420697320616c7265616479206c696e6b656420746f20616e6f7468657220726566657272616c206163636f756e742e285a65726f416d6f756e74000604c84e6f7468696e6720696e2074686520726566657272616c20706f74206163636f756e7420666f72207468652061737365742e384c696e6b4e6f74416c6c6f776564000704fc4c696e6b696e6720616e206163636f756e7420746f207468652073616d6520726566657272616c206163636f756e74206973206e6f7420616c6c6f7765642e68496e636f727265637452657761726443616c63756c6174696f6e000804910143616c63756c61746564207265776172647320617265206d6f7265207468616e207468652066656520616d6f756e742e20546869732063616e2068617070656e2069662070657263656e74616765732061726520696e636f72726563746c79207365742e64496e636f727265637452657761726450657263656e74616765000904ec476976656e20726566657272657220616e64207472616465722070657263656e7461676573206578636565647320313030252070657263656e742e44416c726561647952656769737465726564000a04a8546865206163636f756e742068617320616c7265616479206120636f646520726567697374657265642e3450726963654e6f74466f756e64000b0494507269636520666f7220676976656e2061737365742070616972206e6f7420666f756e642e90436f6e76657273696f6e4d696e54726164696e67416d6f756e744e6f7452656163686564000c04ec4d696e696d756d2074726164696e6720616d6f756e7420666f7220636f6e76657273696f6e20686173206e6f74206265656e20726561636865642e70436f6e76657273696f6e5a65726f416d6f756e745265636569766564000d04945a65726f20616d6f756e742072656365697665642066726f6d20636f6e76657273696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a509045300000400a90901185665633c543e0000a509082c6f726d6c5f746f6b656e732c42616c616e63654c6f636b041c42616c616e63650118000801086964f10101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e63650000a909000002a50900ad09082c6f726d6c5f746f6b656e732c4163636f756e7444617461041c42616c616e63650118000c01106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e63650000b1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b509045300000400b90901185665633c543e0000b509082c6f726d6c5f746f6b656e732c52657365727665446174610844526573657276654964656e74696669657201f1011c42616c616e63650118000801086964f1010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000b909000002b50900bd090c2c6f726d6c5f746f6b656e73186d6f64756c65144572726f720404540001203442616c616e6365546f6f4c6f77000004585468652062616c616e636520697320746f6f206c6f775c416d6f756e74496e746f42616c616e63654661696c65640001049c43616e6e6f7420636f6e7665727420416d6f756e7420696e746f2042616c616e63652074797065544c69717569646974795265737472696374696f6e73000204d04661696c65642062656361757365206c6971756964697479207265737472696374696f6e732064756520746f206c6f636b696e67404d61784c6f636b734578636565646564000304b44661696c6564206265636175736520746865206d6178696d756d206c6f636b7320776173206578636565646564244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e74484578697374656e7469616c4465706f736974000504e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000700048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec1090c4470616c6c65745f63757272656e63696573186d6f64756c65144572726f720404540001105c416d6f756e74496e746f42616c616e63654661696c6564000004bc556e61626c6520746f20636f6e766572742074686520416d6f756e74207479706520696e746f2042616c616e63652e3442616c616e6365546f6f4c6f770001044c42616c616e636520697320746f6f206c6f772e344465706f7369744661696c6564000204784465706f73697420726573756c74206973206e6f74206578706563746564304e6f74537570706f72746564000304b04f7065726174696f6e206973206e6f7420737570706f7274656420666f7220746869732063757272656e6379048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010102045300000400fd0501185665633c543e0000c9090c306f726d6c5f76657374696e67186d6f64756c65144572726f72040454000118445a65726f56657374696e67506572696f640000045856657374696e6720706572696f64206973207a65726f585a65726f56657374696e67506572696f64436f756e740001045c4e756d626572206f66207665737473206973207a65726f64496e73756666696369656e7442616c616e6365546f4c6f636b00020498496e73756666696369656e7420616d6f756e74206f662062616c616e636520746f206c6f636b5c546f6f4d616e7956657374696e675363686564756c6573000304b054686973206163636f756e74206861766520746f6f206d616e792076657374696e67207363686564756c657324416d6f756e744c6f770004049454686520766573746564207472616e7366657220616d6f756e7420697320746f6f206c6f776c4d617856657374696e675363686564756c65734578636565646564000504e44661696c6564206265636175736520746865206d6178696d756d2076657374696e67207363686564756c657320776173206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742ecd09082870616c6c65745f65766d30436f64654d65746164617461000008011073697a6530010c75363400011068617368340110483235360000d109000004080d023400d5090c2870616c6c65745f65766d1870616c6c6574144572726f720404540001342842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed909000002dd0900dd090000040c1506e109f50900e109081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368340110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d0d02011c41646472657373000108746fe509013c4f7074696f6e3c416464726573733e000140636f6e74726163745f61646472657373e509013c4f7074696f6e3c416464726573733e0001106c6f6773e90901205665633c4c6f673e0001286c6f67735f626c6f6f6ded090114426c6f6f6d0000e50904184f7074696f6e040454010d020108104e6f6e6500000010536f6d6504000d020000010000e909000002090200ed090820657468626c6f6f6d14426c6f6f6d00000400f10901405b75383b20424c4f4f4d5f53495a455d0000f109000003000100000800f5090c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400f909014445495036353852656365697074446174610000001c454950323933300400f90901484549503239333052656365697074446174610001001c454950313535390400f909014845495031353539526563656970744461746100020000f9090c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f6761734d040110553235360001286c6f67735f626c6f6f6ded090114426c6f6f6d0001106c6f6773e90901205665633c4c6f673e0000fd090c20657468657265756d14626c6f636b14426c6f636b040454011506000c0118686561646572010a01184865616465720001307472616e73616374696f6e73090a01185665633c543e0001186f6d6d6572730d0a012c5665633c4865616465723e0000010a0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683401104832353600012c6f6d6d6572735f686173683401104832353600012c62656e65666963696172790d0201104831363000012873746174655f726f6f74340110483235360001447472616e73616374696f6e735f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6ded090114426c6f6f6d000128646966666963756c74794d040110553235360001186e756d6265724d040110553235360001246761735f6c696d69744d040110553235360001206761735f757365644d0401105532353600012474696d657374616d7030010c75363400012865787472615f6461746138011442797465730001206d69785f68617368340110483235360001146e6f6e6365050a010c4836340000050a0c38657468657265756d5f747970657310686173680c48363400000400f101011c5b75383b20385d0000090a0000021506000d0a000002010a00110a000002f50900150a000002e10900190a0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d0a0c4c70616c6c65745f65766d5f6163636f756e74731870616c6c6574144572726f720404540001106c5472756e63617465644163636f756e74416c726561647955736564000004884163746976652045564d206163636f756e742063616e6e6f7420626520626f756e644c41646472657373416c7265616479426f756e64000104604164647265737320697320616c726561647920626f756e6460426f756e644164647265737343616e6e6f7442655573656400020470426f756e6420616464726573732063616e6e6f74206265207573656454416464726573734e6f7457686974656c69737465640003045c41646472657373206e6f742077686974656c6973746564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e210a0c6c70616c6c65745f78796b5f6c69717569646974795f6d696e696e671870616c6c6574144572726f7204045400012c5043616e7446696e644465706f7369744f776e6572000004884e66742070616c6c6574206469646e27742072657475726e20616e206f776e65722e70496e73756666696369656e7458796b53686172657342616c616e6365000104d44163636f756e742062616c616e6365206f662058594b20706f6f6c20736861726573206973206e6f742073756666696369656e742e4858796b506f6f6c446f65736e7445786973740002045c58594b20706f6f6c20646f6573206e6f742065786973743c4e6f744465706f7369744f776e6572000304744163636f756e74206973206e6f74206465706f736974206f776e65722e4043616e7447657458796b417373657473000404ac58594b20646964206e6f742072657475726e2061737365747320666f7220676976656e20706f6f6c2069644c4465706f736974446174614e6f74466f756e64000504584465706f7369742064617461206e6f7420666f756e64485a65726f436c61696d6564526577617264730006048043616c63756c617465642072657761726420746f20636c61696d20697320302e4c41737365744e6f74496e417373657450616972000704804173736574206973206e6f7420696e207468652060417373657450616972602e40496e76616c6964417373657450616972000804c050726f7669646564206041737365745061697260206973206e6f74207573656420627920746865206465706f7369742e4841737365744e6f7452656769737465726564000904a84173736574206973206e6f74207265676973746572656420696e2061737365742072656769737472792e384661696c546f476574506f744964000a04904661696c656420746f2063616c63756c6174652060706f74602773206163636f756e742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e250a0c5c70616c6c65745f6c69717569646974795f6d696e696e6714747970657338476c6f62616c4661726d4461746108045400044900004801086964100130476c6f62616c4661726d49640001146f776e6572000130543a3a4163636f756e744964000128757064617465645f617410012c506572696f644f663c543e000138746f74616c5f7368617265735f7a18011c42616c616e636500013c616363756d756c617465645f72707a6101012446697865645531323800013c7265776172645f63757272656e6379100128543a3a4173736574496400013c70656e64696e675f7265776172647318011c42616c616e6365000160616363756d756c617465645f706169645f7265776172647318011c42616c616e63650001407969656c645f7065725f706572696f647d01012c5065727175696e74696c6c000160706c616e6e65645f7969656c64696e675f706572696f647310012c506572696f644f663c543e000144626c6f636b735f7065725f706572696f64100144426c6f636b4e756d626572466f723c543e000148696e63656e746976697a65645f6173736574100128543a3a417373657449640001546d61785f7265776172645f7065725f706572696f6418011c42616c616e636500012c6d696e5f6465706f73697418011c42616c616e63650001586c6976655f7969656c645f6661726d735f636f756e7410010c75333200015c746f74616c5f7969656c645f6661726d735f636f756e7410010c75333200014070726963655f61646a7573746d656e74610101244669786564553132380001147374617465e90801244661726d53746174650000290a0000040c001010002d0a0c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573345969656c644661726d44617461080454000449000030010869641001184661726d4964000128757064617465645f617410012c506572696f644f663c543e000130746f74616c5f73686172657318011c42616c616e636500014c746f74616c5f76616c7565645f73686172657318011c42616c616e6365000140616363756d756c617465645f727076736101012446697865645531323800013c616363756d756c617465645f72707a610101244669786564553132380001346c6f79616c74795f6375727665810101504f7074696f6e3c4c6f79616c747943757276653e0001286d756c7469706c696572610101384661726d4d756c7469706c6965720001147374617465e90801244661726d5374617465000134656e74726965735f636f756e7430010c7536340001486c6566745f746f5f6469737472696275746518011c42616c616e6365000134746f74616c5f73746f7070656410012c506572696f644f663c543e0000310a0c5c70616c6c65745f6c69717569646974795f6d696e696e671474797065732c4465706f7369744461746108045400044900000c011873686172657318011c42616c616e636500012c616d6d5f706f6f6c5f6964000130543a3a416d6d506f6f6c49640001487969656c645f6661726d5f656e7472696573350a01f4426f756e6465645665633c5969656c644661726d456e7472793c542c20493e2c20543a3a4d61784661726d456e74726965735065724465706f7369743e0000350a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401390a0453000004003d0a01185665633c543e0000390a0c5c70616c6c65745f6c69717569646974795f6d696e696e67147479706573385969656c644661726d456e7472790804540004490000200138676c6f62616c5f6661726d5f6964100130476c6f62616c4661726d49640001347969656c645f6661726d5f696410012c5969656c644661726d496400013476616c7565645f73686172657318011c42616c616e6365000140616363756d756c617465645f727076736101012446697865645531323800016c616363756d756c617465645f636c61696d65645f7265776172647318011c42616c616e6365000128656e74657265645f617410012c506572696f644f663c543e000128757064617465645f617410012c506572696f644f663c543e00014c73746f707065645f61745f6372656174696f6e10012c506572696f644f663c543e00003d0a000002390a00410a0c5c70616c6c65745f6c69717569646974795f6d696e696e671870616c6c6574144572726f7208045400044900017448476c6f62616c4661726d4e6f74466f756e640000046c476c6f62616c206661726d20646f6573206e6f742065786973742e445969656c644661726d4e6f74466f756e64000104685969656c64206661726d20646f6573206e6f742065786973742e4c446f75626c65436c61696d496e506572696f64000204c84d756c7469706c6520636c61696d7320696e207468652073616d6520706572696f64206973206e6f7420616c6c6f7765642e5c4c69717569646974794d696e696e6743616e63656c6564000304744c6971756964697479206d696e696e672069732063616e63656c65642e5c4c69717569646974794d696e696e674973416374697665000404844c6971756964697479206d696e696e67206973206e6f742063616e63656c65642e6c4c69717569646974794d696e696e6749734e6f7453746f7070656400050455014c6971756964697479206d696e696e6720697320696e206061637469766560206f7220607465726d696e617465646020737461746520616e6420616374696f6e2063616e6e6f7420626520636f6d706c657465642e50496e76616c69644465706f736974416d6f756e74000604784c502073686172657320616d6f756e74206973206e6f742076616c69642e24466f7262696464656e000704a44163636f756e74206973206e6f7420616c6c6f77656420746f20706572666f726d20616374696f6e2e44496e76616c69644d756c7469706c696572000804845969656c64206661726d206d756c7469706c6965722063616e277420626520302e585969656c644661726d416c726561647945786973747300090409015969656c64206661726d207769746820676976656e2060616d6d5f706f6f6c5f69646020616c72656164792065786973747320696e20676c6f62616c206661726d2e78496e76616c6964496e697469616c52657761726450657263656e74616765000a043d014c6f79616c7479206375727665277320696e697469616c207265776172642070657263656e74616765206973206e6f742076616c69642e2056616c69642072616e67652069733a205b302c2031292e50476c6f62616c4661726d49734e6f74456d707479000b04b44f6e65206f72206d6f7265207969656c64206661726d7320657869737420696e20676c6f62616c206661726d2e604d697373696e67496e63656e746976697a65644173736574000c04f84661726d27732060696e63656e746976697a65645f617373657460206973206d697373696e6720696e2070726f766964656420617373657420706169722e84496e73756666696369656e7452657761726443757272656e637942616c616e6365000d04a85265776172642063757272656e63792062616c616e6365206973206e6f742073756666696369656e742e58496e76616c6964426c6f636b73506572506572696f64000e0474426c6f636b732070657220706572696f642063616e277420626520302e54496e76616c69645969656c64506572506572696f64000f04705969656c642070657220706572696f642063616e277420626520302e4c496e76616c6964546f74616c52657761726473001004c4546f74616c2072657761726473206973206c657373207468616e20604d696e546f74616c4661726d52657761726473602e74496e76616c6964506c616e6e65645969656c64696e67506572696f64730011040901506c616e6e6564207969656c64696e6720706572696f6473206973206c657373207468616e20604d696e506c616e6e65645969656c64696e67506572696f6473602e504d6178456e74726965735065724465706f736974001204b04d6178696d756d206e756d626572206f66206c6f636b73207265616368656420666f72206465706f7369742e28446f75626c654c6f636b001304e0547279696e6720746f206c6f636b204c502073686172657320696e746f20616c7265616479206c6f636b6564207969656c64206661726d2e585969656c644661726d456e7472794e6f74466f756e64001404c45969656c64206661726d20656e74727920646f65736e277420657869737420666f7220676976656e206465706f7369742e40476c6f62616c4661726d497346756c6c00150849014d6178206e756d626572206f66207969656c64206661726d7320696e20676c6f62616c206661726d2077617320726561636865642e20476c6f62616c206661726d2063616e277420616363657074206e6577f87969656c64206661726d7320756e74696c20736f6d65207969656c64206661726d206973206e6f742072656d6f7665642066726f6d2073746f726167652e44496e76616c69644d696e4465706f736974001604b4496e76616c6964206d696e2e206465706f736974207761732073657420666f7220676c6f62616c206661726d2e58496e76616c6964507269636541646a7573746d656e740017049c50726963652061646a7573746d656e74206d756c7469706c6965722063616e277420626520302e444572726f724765744163636f756e744964001804804163636f756e74206372656174696f6e2066726f6d206964206661696c65642e54496e636f727265637456616c756564536861726573001904250156616c7565206f66206465706f73697465642073686172657320616d6f756e7420696e207265776172642063757272656e63792069732062656c6c6f77206d696e2e206c696d69742e6c52657761726443757272656e63794e6f7452656769737465726564001a04d8607265776172645f63757272656e637960206973206e6f74207265676973746572656420696e2061737365742072656769737472792e78496e63656e746976697a656441737365744e6f7452656769737465726564001b04e460696e63656e746976697a65645f617373657460206973206e6f74207265676973746572656420696e2061737365742072656769737472792e44496e636f6e73697374656e745374617465040009090158496e636f6e73697374656e7453746174654572726f72001c086501416374696f6e2063616e6e6f7420626520636f6d706c65746564206265636175736520756e6578706563746564206572726f7220686173206f636375727265642e20546869732073686f756c64206265207265706f7274656460746f2070726f746f636f6c206d61696e7461696e6572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e450a0c5870616c6c65745f72656c6179636861696e5f696e666f1870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e490a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401100453000004009d0101185665633c543e00004d0a0c2870616c6c65745f6463611870616c6c6574144572726f72040454000148405363686564756c654e6f74466f756e64000004485363686564756c65206e6f74206578697374604d696e5472616465416d6f756e744e6f74526561636865640001048c546865206d696e20747261646520616d6f756e74206973206e6f74207265616368656424466f7262696464656e000204d8466f7262696464656e206173207468652075736572206973206e6f7420746865206f776e6572206f6620746865207363686564756c6560426c6f636b4e756d62657249734e6f74496e467574757265000304d0546865206e65787420657865637574696f6e20626c6f636b206e756d626572206973206e6f7420696e2074686520667574757265345072696365556e737461626c650004043501507269636520697320756e737461626c65206173207072696365206368616e67652066726f6d206f7261636c65206461746120697320626967676572207468616e206d617820616c6c6f7765641842756d706564000504b04f72646572207761732072616e646f6d6c792072657363686564756c656420746f206e65787420626c6f636b5443616c63756c6174696e6750726963654572726f72000604944572726f72206f63637572726564207768656e2063616c63756c6174696e6720707269636584546f74616c416d6f756e744973536d616c6c65725468616e4d696e427564676574000704e854686520746f74616c20616d6f756e7420746f20626520726573657276656420697320736d616c6c6572207468616e206d696e2062756467657430427564676574546f6f4c6f77000804dc5468652062756467657420697320746f6f206c6f7720666f7220657865637574696e67206174206c656173742074776f206f7264657273404e6f46726565426c6f636b466f756e64000904c85468657265206973206e6f206672656520626c6f636b20666f756e6420746f20706c616e2044434120657865637574696f6e484d616e75616c6c795465726d696e61746564000a04b454686520444341207363686564756c6520686173206265656e206d616e75616c6c79207465726d696e617465643c4d6178526574727952656163686564000b04a84d6178206e756d626572206f662072657472696573207265616368656420666f72207363686564756c654454726164654c696d697452656163686564000c04c04162736f6c7574656c79207472616465206c696d697420726561636865642c206c656164696e6720746f20726574727950536c6970706167654c696d697452656163686564000d040901536c697070616765206c696d69742063616c63756c617465642066726f6d206f7261636c6520697320726561636865642c206c656164696e6720746f207265747279444e6f506172656e7448617368466f756e64000e04b84e6f20706172656e74206861736820686173206265656e20666f756e642066726f6d2072656c617920636861696e30496e76616c69645374617465000f0485014572726f7220746861742073686f756c64206e6f74207265616c6c792068617070656e206f6e6c7920696e2063617365206f6620696e76616c6964207374617465206f6620746865207363686564756c652073746f7261676520656e747269657338506572696f64546f6f53686f727400100494506572696f642073686f756c64206265206c6f6e676572207468616e203520626c6f636b736453746162696c6974795468726573686f6c64546f6f48696768001104590153746162696c697479207468726573686f6c642063616e6e6f7420626520686967686572207468616e20604d6178436f6e666967757261626c655072696365446966666572656e63654265747765656e426c6f636b60048054686520604572726f726020656e756d206f6620746869732070616c6c65742e510a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401550a0453000004005d0a01185665633c543e0000550a04184f7074696f6e04045401590a0108104e6f6e6500000010536f6d650400590a0000010000590a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0131052c426c6f636b4e756d62657201103450616c6c6574734f726967696e015907244163636f756e7449640100001401206d617962655f6964690201304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c3105011043616c6c0001386d617962655f706572696f646963950101944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e5907013450616c6c6574734f726967696e00005d0a000002550a00610a084070616c6c65745f7363686564756c65722c5265747279436f6e6669670418506572696f640110000c0134746f74616c5f72657472696573080108753800012472656d61696e696e670801087538000118706572696f64100118506572696f640000650a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690a0000026d0a006d0a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480134000c0138757365645f62616e647769647468710a01345573656442616e647769647468000138706172615f686561645f68617368410501244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616c850a018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000710a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e67750a018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e0000750a042042547265654d617008044b018103045601790a0004007d0a000000790a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c75333200007d0a000002810a00810a000004088103790a00850a04184f7074696f6e04045401890a0108104e6f6e6500000010536f6d650400890a0000010000890a0c4c706f6c6b61646f745f7072696d6974697665730876373855706772616465476f41686561640001081441626f72740000001c476f4168656164000100008d0a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480134000c0138757365645f62616e647769647468710a01345573656442616e64776964746800013868726d705f77617465726d61726bcd0101804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616c850a018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000910a04184f7074696f6e04045401950a0108104e6f6e6500000010536f6d650400950a0000010000950a0c4c706f6c6b61646f745f7072696d69746976657308763748557067726164655265737472696374696f6e0001041c50726573656e7400000000990a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616434014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974799d0a018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c73a10a01885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73a10a01885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00009d0a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c7533320000a10a000002a50a00a50a000004088103a90a00a90a0c4c706f6c6b61646f745f7072696d6974697665730876374c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164410501304f7074696f6e3c486173683e0000ad0a0c4c706f6c6b61646f745f7072696d697469766573087637644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d73b10a01484173796e634261636b696e67506172616d730000b10a104c706f6c6b61646f745f7072696d697469766573087637346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c7533320000b50a089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040034012452656c6179486173680000b90a042042547265654d617008044b018103045601b50a000400bd0a000000bd0a000002c10a00c10a000004088103b50a00c50a000002c90a00c90a0860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401810300080124726563697069656e748103010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e0000cd0a0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed10a0c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e6465726d03014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572d50a01644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f74696679d90a01404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696e6d03014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e7365e10a014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000d50a04184f7074696f6e040454016d030108104e6f6e6500000010536f6d6504006d030000010000d90a04184f7074696f6e04045401dd0a0108104e6f6e6500000010536f6d650400dd0a0000010000dd0a00000408080800e10a080c78636d4456657273696f6e6564526573706f6e736500010c0856320400a506013076323a3a526573706f6e73650002000856330400d106013076333a3a526573706f6e73650003000856340400d902013076343a3a526573706f6e736500040000e50a00000408106d0300e90a0000040c30281000ed0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f10a045300000400f50a01185665633c543e0000f10a000004086d031000f50a000002f10a00f90a0c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e74546172676574730400fd0a013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000fd0a04184f7074696f6e04045401380108104e6f6e6500000010536f6d650400380000010000010b0000040c1000290700050b0c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e7469666965720190304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e65726d03014456657273696f6e65644c6f636174696f6e0001186c6f636b65726d03014456657273696f6e65644c6f636174696f6e000124636f6e73756d657273090b01d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e0000090b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d0b045300000400110b01185665633c543e00000d0b00000408901800110b0000020d0b00150b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401190b0453000004001d0b01185665633c543e0000190b00000408186d03001d0b000002190b00210b0c2870616c6c65745f78636d1870616c6c6574144572726f720404540001602c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e250b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454018103045300000400290b012c42547265655365743c543e0000290b042042547265655365740404540181030004002d0b0000002d0b000002810300310b000002350b00350b086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74810301185061726149640001147374617465390b01344f7574626f756e6453746174650001347369676e616c735f6578697374200110626f6f6c00012c66697273745f696e646578dc010c7531360001286c6173745f696e646578dc010c7531360000390b086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e646564000100003d0b000004088103dc00410b086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e6669674461746100000c014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320000450b0c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f7204045400010c384261645175657565436f6e666967000004110153657474696e672074686520717565756520636f6e666967206661696c65642073696e6365206f6e65206f66206974732076616c7565732077617320696e76616c69642e40416c726561647953757370656e6465640001048c54686520657865637574696f6e20697320616c72656164792073757370656e6465642e38416c7265616479526573756d65640002048454686520657865637574696f6e20697320616c726561647920726573756d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e490b085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e017d0300180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f7572734d0b01844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c75363400004d0b04184f7074696f6e04045401510b0108104e6f6e6500000010536f6d650400510b0000010000510b085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e017d0300080110707265767d0301344d6573736167654f726967696e0001106e6578747d0301344d6573736167654f726967696e0000550b000004087d031000590b085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561705d0b019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e00005d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000610b0c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e650b0c206f726d6c5f78636d186d6f64756c65144572726f7204045400010c2c556e726561636861626c650000080d01546865206d65737361676520616e642064657374696e6174696f6e20636f6d62696e6174696f6e20776173206e6f74207265636f676e697a6564206173206265696e6728726561636861626c652e2c53656e644661696c7572650001080501546865206d65737361676520616e642064657374696e6174696f6e20776173207265636f676e697a6564206173206265696e6720726561636861626c652062757494746865206f7065726174696f6e20636f756c64206e6f7420626520636f6d706c657465642e2842616456657273696f6e000208ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690b0c306f726d6c5f78746f6b656e73186d6f64756c65144572726f720404540001504441737365744861734e6f5265736572766500000478417373657420686173206e6f2072657365727665206c6f636174696f6e2e544e6f7443726f7373436861696e5472616e73666572000104644e6f742063726f73732d636861696e207472616e736665722e2c496e76616c69644465737400020474496e76616c6964207472616e736665722064657374696e6174696f6e2e844e6f7443726f7373436861696e5472616e7366657261626c6543757272656e6379000304a443757272656e6379206973206e6f742063726f73732d636861696e207472616e7366657261626c652e48556e776569676861626c654d657373616765000404b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e4858636d457865637574696f6e4661696c65640005045458434d20657865637574696f6e206661696c65642e3843616e6e6f745265616e63686f72000608e8436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468654864657374696e6174696f6e20636861696e2e3c496e76616c6964416e636573747279000704c4436f756c64206e6f742067657420616e636573747279206f662061737365742072657365727665206c6f636174696f6e2e30496e76616c696441737365740008045454686520417373657420697320696e76616c69642e6044657374696e6174696f6e4e6f74496e7665727469626c65000904dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e2842616456657273696f6e000a08ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e7444697374696e637452657365727665466f724173736574416e64466565000b08fc57652074726965642073656e64696e672064697374696e637420617373657420616e6420666565206275742074686579206861766520646966666572656e743c7265736572766520636861696e732e1c5a65726f466565000c044054686520666565206973207a65726f2e285a65726f416d6f756e74000d0494546865207472616e73666572696e6720617373657420616d6f756e74206973207a65726f2e58546f6f4d616e794173736574734265696e6753656e74000e04d0546865206e756d626572206f662061737365747320746f2062652073656e74206973206f76657220746865206d6178696d756d2e544173736574496e6465784e6f6e4578697374656e74000f04d85468652073706563696669656420696e64657820646f6573206e6f7420657869737420696e206120417373657473207374727563742e304665654e6f74456e6f75676800100448466565206973206e6f7420656e6f7567682e504e6f74537570706f727465644c6f636174696f6e001104584e6f7420737570706f72746564204c6f636174696f6e4c4d696e58636d4665654e6f74446566696e6564001204d44d696e58636d466565206e6f74207265676973746572656420666f72206365727461696e2072657365727665206c6f636174696f6e2c526174654c696d69746564001304a44173736574207472616e73666572206973206c696d6974656420627920526174654c696d697465722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e6d0b000004087d027d0200710b000004087d023800750b0c4c6f726d6c5f756e6b6e6f776e5f746f6b656e73186d6f64756c65144572726f7204045400010c3442616c616e6365546f6f4c6f770000045c5468652062616c616e636520697320746f6f206c6f772e3c42616c616e63654f766572666c6f77000104b4546865206f7065726174696f6e2077696c6c2063617573652062616c616e636520746f206f766572666c6f772e38556e68616e646c6564417373657400020440556e68616e646c65642061737365742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e790b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d0b045300000400810b01185665633c543e00007d0b0c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000810b0000027d0b00850b0c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400014444546f6f4d616e7943616e646964617465730000048c5468652070616c6c65742068617320746f6f206d616e792063616e646964617465732e5c546f6f466577456c696769626c65436f6c6c61746f7273000104ac4c656176696e6720776f756c6420726573756c7420696e20746f6f206665772063616e646964617465732e40416c726561647943616e6469646174650002047c4163636f756e7420697320616c726561647920612063616e6469646174652e304e6f7443616e6469646174650003046c4163636f756e74206973206e6f7420612063616e6469646174652e50546f6f4d616e79496e76756c6e657261626c65730004048454686572652061726520746f6f206d616e7920496e76756c6e657261626c65732e4c416c7265616479496e76756c6e657261626c650005048c4163636f756e7420697320616c726561647920616e20496e76756c6e657261626c652e3c4e6f74496e76756c6e657261626c650006047c4163636f756e74206973206e6f7420616e20496e76756c6e657261626c652e5c4e6f4173736f63696174656456616c696461746f7249640007049c4163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049442e5856616c696461746f724e6f74526567697374657265640008048c56616c696461746f72204944206973206e6f742079657420726567697374657265642e6c496e73657274546f43616e6469646174654c6973744661696c65640009049c436f756c64206e6f7420696e7365727420696e207468652063616e646964617465206c6973742e7452656d6f766546726f6d43616e6469646174654c6973744661696c6564000a04a4436f756c64206e6f742072656d6f76652066726f6d207468652063616e646964617465206c6973742e344465706f736974546f6f4c6f77000b04f44e6577206465706f73697420616d6f756e7420776f756c642062652062656c6f7720746865206d696e696d756d2063616e64696461637920626f6e642e6455706461746543616e6469646174654c6973744661696c6564000c0490436f756c64206e6f7420757064617465207468652063616e646964617465206c6973742e40496e73756666696369656e74426f6e64000d0429014465706f73697420616d6f756e7420697320746f6f206c6f7720746f2074616b652074686520746172676574277320736c6f7420696e207468652063616e646964617465206c6973742e5054617267657449734e6f7443616e646964617465000e042d0154686520746172676574206163636f756e7420746f206265207265706c6163656420696e207468652063616e646964617465206c697374206973206e6f7420612063616e6469646174652e404964656e746963616c4465706f736974000f040d015468652075706461746564206465706f73697420616d6f756e7420697320657175616c20746f2074686520616d6f756e7420616c72656164792072657365727665642e40496e76616c6964556e726573657276650010043d0143616e6e6f74206c6f7765722063616e64696461637920626f6e64207768696c65206f6363757079696e6720612066757475726520636f6c6c61746f7220736c6f7420696e20746865206c6973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e890b0000028d0b008d0b00000408004d0700910b00000408950b3800950b0c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d0000990b0c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e9d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015107045300000400a10b01185665633c543e0000a10b000002510700a50b084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c7536340000a90b00000408a50b1000ad0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01b10b045601b50b045300000400c50b013842547265654d61703c4b2c20563e0000b10b00000408f101910100b50b0c4470616c6c65745f656d615f6f7261636c651474797065732c4f7261636c65456e747279042c426c6f636b4e756d6265720110001001147072696365b90b01145072696365000118766f6c756d65bd0b013c566f6c756d653c42616c616e63653e0001246c6971756964697479c10b01484c69717569646974793c42616c616e63653e000128757064617465645f617410012c426c6f636b4e756d6265720000b90b0c3468796472615f64785f6d61746814726174696f14526174696f00000801046e1801107531323800010464180110753132380000bd0b0c38687964726164785f747261697473186f7261636c6518566f6c756d65041c42616c616e6365011800100110615f696e18011c42616c616e6365000114625f6f757418011c42616c616e6365000114615f6f757418011c42616c616e6365000110625f696e18011c42616c616e63650000c10b0c38687964726164785f747261697473186f7261636c65244c6971756964697479041c42616c616e63650118000801046118011c42616c616e63650001046218011c42616c616e63650000c50b042042547265654d617008044b01b10b045601b50b000400c90b000000c90b000002cd0b00cd0b00000408b10bb50b00d10b0000040cf10191010d0900d50b00000408b50b1000d90b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401b10b045300000400dd0b012c42547265655365743c543e0000dd0b0420425472656553657404045401b10b000400e10b000000e10b000002b10b00e50b0c4470616c6c65745f656d615f6f7261636c651870616c6c6574144572726f7204045400010c50546f6f4d616e79556e69717565456e7472696573000000404f6e547261646556616c75655a65726f000100384f7261636c654e6f74466f756e64000200048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90b0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301001043616c6c017d04245369676e617475726501210514457874726101ed0b000400210c01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e0000ed0b00000428f10bf50bf90bfd0b010c090c0d0c110c150c190c00f10b10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000f50b10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000f90b10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000fd0b10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000010c10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400050c010c4572610000050c102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000090c10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040035010120543a3a4e6f6e636500000d0c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000110c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004004501013042616c616e63654f663c543e0000150c083470616c6c65745f636c61696d733456616c6964617465436c61696d04045400000000190c08746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f64651d0c01104d6f646500001d0c08746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c656400010000210c102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301001043616c6c017d04245369676e617475726501210514457874726101ed0b00040038000000250c083c687964726164785f72756e74696d651c52756e74696d650000000009011853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040234a9030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000ad0304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000a503040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a6564557067726164650000b103040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01b50301581830426c6f636b57656967687473c5038501624d186c00070088526a740200400103c8ce355be9b00107383a790b541a4fe700010700e6bd4f570200f00001000003c8ce355be9b0010738dc0d26711a4f370101070088526a7402004001010700a2941a1d0200500003c8ce355be9b000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468d5033000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874dd034040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ee10389031c687964726164781c6879647261647801000000080100000000000040df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d6962020000009af86751b70c112d01000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000582211f65bb14b8905000000e65b00e46cedd0aa020000000bb67a52fcd040ff010000006ff52ee858e6c5bd01000000fbc577b9d747efd60100000001000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e2853533538507265666978dc083f0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01f103012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e01f5030004344d696e696d756d506572696f6430207017000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00032042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f903040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200090404000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c6473010104020015040400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402002d040400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e013904017c10484578697374656e7469616c4465706f73697418400010a5d4e8000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01410407485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100610140000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100450404000000018404604f7065726174696f6e616c4665654d756c7469706c696572080400545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00095c4d756c74695472616e73616374696f6e5061796d656e74015c4d756c74695472616e73616374696f6e5061796d656e7410484163636f756e7443757272656e63794d617000010402001004000454204163636f756e742063757272656e6379206d617048416363657074656443757272656e636965730001040510610104000465012043757261746564206c697374206f662063757272656e6369657320776869636820666565732063616e2062652070616964206d617070656420746f20636f72726573706f6e64696e672066616c6c6261636b20707269636554416363657074656443757272656e63795072696365000104051061010400042102204173736574207072696365732066726f6d207468652073706f742070726963652070726f7669646572206f72207468652066616c6c6261636b20707269636520696620746865207072696365206973206e6f7420617661696c61626c652e20557064617465642061742074686520626567696e6e696e67206f6620657665727920626c6f636b2e6c5472616e73616374696f6e43757272656e63794f7665727269646500010405001004000001490401880c344e6174697665417373657449641010000000000434204e617469766520417373657454506f6c6b61646f744e617469766541737365744964101005000000047020506f6c6b61646f74204e61746976652041737365742028444f54292845766d4173736574496410101400000004282045564d204173736574015504cb20547265617375727901205472656173757279183450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051059040400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301005d04040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e285370656e64436f756e74010010100000000004a42054686520636f756e74206f66207370656e647320746861742068617665206265656e206d6164652e185370656e647300010405106104040004d0205370656e647320746861742068617665206265656e20617070726f76656420616e64206265696e672070726f6365737365642e016904018c203050726f706f73616c426f6e6469011030750000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d18400000c16ff28623000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756df444010000c52ebca2b1000000000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641010201c0000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e690110000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449646d042070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e305061796f7574506572696f641010c04b03000419012054686520706572696f6420647572696e6720776869636820616e20617070726f766564207472656173757279207370656e642068617320746f20626520636c61696d65642e0171040b1c5574696c697479000175040194044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0179070d20507265696d6167650120507265696d6167650c24537461747573466f7200010406347d070400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f72000104063485070400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f720001040695079907040000018104019c00019d070f204964656e7469747901204964656e746974791c284964656e746974794f660001040500a107040010690120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e204669727374206974656d20697320746865e020726567697374726174696f6e2c207365636f6e6420697320746865206163636f756e742773207072696d61727920757365726e616d652e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f66000104020015050400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500b90744000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e28526567697374726172730100c1070400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e4c557365726e616d65417574686f7269746965730001040500d107040004f42041206d6170206f6620746865206163636f756e74732077686f2061726520617574686f72697a656420746f206772616e7420757365726e616d65732e444163636f756e744f66557365726e616d6500010402a4000400146d012052657665727365206c6f6f6b75702066726f6d2060757365726e616d656020746f2074686520604163636f756e7449646020746861742068617320726567697374657265642069742e205468652076616c75652073686f756c6465012062652061206b657920696e2074686520604964656e746974794f6660206d61702c20627574206974206d6179206e6f742069662074686520757365722068617320636c6561726564207468656972206964656e746974792e006901204d756c7469706c6520757365726e616d6573206d6179206d617020746f207468652073616d6520604163636f756e744964602c2062757420604964656e746974794f66602077696c6c206f6e6c79206d617020746f206f6e6548207072696d61727920757365726e616d652e4050656e64696e67557365726e616d657300010402a4d9070400186d0120557365726e616d6573207468617420616e20617574686f7269747920686173206772616e7465642c20627574207468617420746865206163636f756e7420636f6e74726f6c6c657220686173206e6f7420636f6e6669726d65647101207468617420746865792077616e742069742e2055736564207072696d6172696c7920696e2063617365732077686572652074686520604163636f756e744964602063616e6e6f742070726f766964652061207369676e61747572655d012062656361757365207468657920617265206120707572652070726f78792c206d756c74697369672c206574632e20496e206f7264657220746f20636f6e6669726d2069742c20746865792073686f756c642063616c6c6c205b6043616c6c3a3a6163636570745f757365726e616d65605d2e001d01204669727374207475706c65206974656d20697320746865206163636f756e7420616e64207365636f6e642069732074686520616363657074616e636520646561646c696e652e01850401a0203042617369634465706f736974184000406352bfc60100000000000000000004d82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e2c427974654465706f736974184000a0724e180900000000000000000000041d012054686520616d6f756e742068656c64206f6e206465706f7369742070657220656e636f646564206279746520666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f736974184000406352bfc6010000000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e344d617852656769737472617273101014000000084d01204d6178696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e6450656e64696e67557365726e616d6545787069726174696f6e1010e0c4000004150120546865206e756d626572206f6620626c6f636b732077697468696e207768696368206120757365726e616d65206772616e74206d7573742062652061636365707465642e3c4d61785375666669784c656e677468101007000000048020546865206d6178696d756d206c656e677468206f662061207375666669782e444d6178557365726e616d654c656e67746810102000000004610120546865206d6178696d756d206c656e677468206f66206120757365726e616d652c20696e636c7564696e67206974732073756666697820616e6420616e792073797374656d2d61646465642064656c696d69746572732e01dd07112444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100e107040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510ed0704000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040510f50704000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405000108d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100200400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00001908040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c69737400010406341d0804000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040634200400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402b834040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e490120546865206048617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e012d0501a8303c456e6163746d656e74506572696f641010201c000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f6410106054000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f6410106054000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641010c0a80000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f736974184000008a5d78456301000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f7765642004010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f6410108403000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641010e0c4000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e0121081324456c656374696f6e730124456c656374696f6e73141c4d656d626572730100250804000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100250804001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100c00400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e6701010405002d08840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01450501bc282050616c6c65744964f10120706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e64184000406352bfc60100000000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e644261736518400010a5d4e8000000000000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f7218400010a5d4e800000000000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d6265727310100d0000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e657273557010100f0000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e1010e0c400000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e6469646174657310106400000018e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e003101205768656e2074686973206c696d69742069732072656163686564206e6f206d6f72652063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310100003000018f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e00d8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e404d6178566f746573506572566f74657210100a0000001090204d6178696d756d206e756d62657273206f6620766f7465732070657220766f7465722e005d01205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2e2043686f736520776973656c792c20616e64010120636f6e736964657220686f772069742077696c6c20696d706163742060543a3a576569676874496e666f3a3a656c656374696f6e5f70687261676d656e602e013108151c436f756e63696c011c436f756e63696c182450726f706f73616c7301003508040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406347d04040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406343908040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010099030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004610120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f662061627374656e74696f6e732e014d0501c804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e013d081748546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c7301004108040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406347d04040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406343908040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010099030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004610120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f662061627374656e74696f6e732e01510501cc04444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e0145081910546970730110546970730810546970730001040534490804000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406343804000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01550501d0184c4d6178696d756d526561736f6e4c656e6774681010000400000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f7369745065724279746518400010a5d4e800000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1010201c00000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665654d080401043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f7369744261736518400080c6a47e8d0300000000000000000004f820546865206e6f6e2d7a65726f20616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e304d6178546970416d6f756e7418400000f444829163450000000000000000049420546865206d6178696d756d20616d6f756e7420666f7220612073696e676c65207469702e0151081b1450726f7879011450726f7879081c50726f78696573010104050055084400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500650844000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01590501d4184050726f78794465706f73697442617365184000e011021eb60000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721840002c9980e6000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f73697442617365184000e011021eb60000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000583201cd010000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0175081d204d756c746973696701204d756c746973696704244d756c746973696773000108050279087d08040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01610501e00c2c4465706f73697442617365184000a037cd4cb80000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000807584df00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e0185081f1c556e6971756573011c556e69717565732814436c61737300010402188908040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001804000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202028d0890040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e740001080202c49004000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e1441737365740001080202a9059108040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040218950804000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f660001080202a905990804000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c0202029d08a108040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f660001080202a905a50804000470205072696365206f6620616e20617373657420696e7374616e63652e4c436f6c6c656374696f6e4d6178537570706c79000104021810040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e01690501e82044436f6c6c656374696f6e4465706f7369741840000000000000000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f73697418400000000000000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f7369744261736518400080c6a47e8d03000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f7369744261736518400010a5d4e800000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400010a5d4e8000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410104800000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410100001000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100004000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e01a90820485374617465547269654d6967726174696f6e01485374617465547269654d6967726174696f6e0c404d6967726174696f6e50726f6365737301007d053800000000000000000000000000001050204d6967726174696f6e2070726f67726573732e005d0120546869732073746f7265732074686520736e617073686f74206f6620746865206c617374206d69677261746564206b6579732e2049742063616e2062652073657420696e746f206d6f74696f6e20616e64206d6f7665d420666f727761726420627920616e79206f6620746865206d65616e732070726f766964656420627920746869732070616c6c65742e284175746f4c696d6974730100750504000cd420546865206c696d69747320746861742061726520696d706f736564206f6e206175746f6d61746963206d6967726174696f6e732e00d42049662073657420746f204e6f6e652c207468656e206e6f206175746f6d61746963206d6967726174696f6e2068617070656e732e605369676e65644d6967726174696f6e4d61784c696d6974730000790504000ce020546865206d6178696d756d206c696d697473207468617420746865207369676e6564206d6967726174696f6e20636f756c64207573652e00b4204966206e6f74207365742c206e6f207369676e6564207375626d697373696f6e20697320616c6c6f7765642e01710501050104244d61784b65794c656e10100002000054b4204d6178696d616c206e756d626572206f6620627974657320746861742061206b65792063616e20686176652e00b0204652414d4520697473656c6620646f6573206e6f74206c696d697420746865206b6579206c656e6774682e01012054686520636f6e63726574652076616c7565206d757374207468657265666f726520646570656e64206f6e20796f75722073746f726167652075736167652e59012041205b606672616d655f737570706f72743a3a73746f726167653a3a53746f726167654e4d6170605d20666f72206578616d706c652063616e206861766520616e20617262697472617279206e756d626572206f664501206b65797320776869636820617265207468656e2068617368656420616e6420636f6e636174656e617465642c20726573756c74696e6720696e206172626974726172696c79206c6f6e67206b6579732e0041012055736520746865202a7374617465206d6967726174696f6e205250432a20746f20726574726965766520746865206c656e677468206f6620746865206c6f6e67657374206b657920696e20796f757201012073746f726167653a203c68747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f6973737565732f31313634323e00290120546865206d6967726174696f6e2077696c6c2068616c7420776974682061206048616c74656460206576656e7420696620746869732076616c756520697320746f6f20736d616c6c2e49012053696e6365207468657265206973206e6f207265616c2070656e616c74792066726f6d206f7665722d657374696d6174696e672c206974206973206164766973656420746f207573652061206c61726765802076616c75652e205468652064656661756c742069732035313220627974652e008020536f6d65206b6579206c656e6774687320666f72207265666572656e63653ad0202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c7565605d3a2033322062797465c8202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d6170605d3a2036342062797465e0202d205b606672616d655f737570706f72743a3a73746f726167653a3a53746f72616765446f75626c654d6170605d3a2039362062797465004820466f72206d6f726520696e666f207365654901203c68747470733a2f2f7777772e736861776e74616272697a692e636f6d2f626c6f672f7375627374726174652f7175657279696e672d7375627374726174652d73746f726167652d7669612d7270632f3e010d012334417373657452656769737472790134417373657452656769737472791c184173736574730001040210ad08040004542044657461696c73206f6620616e2061737365742e2c4e657874417373657449640100101001000000045d01204e65787420617661696c61626c652061737365742069642e20546869732069732073657175656e7469616c2069642061737369676e656420666f722065616368206e657720726567697374657265642061737365742e20417373657449647300010402190110040004a4204d617070696e67206265747765656e206173736574206e616d6520616e642061737365742069642e3841737365744c6f636174696f6e730001040210250104000474204e6174697665206c6f636174696f6e206f6620616e2061737365742e3042616e6e6564417373657473000104021090040004b0204e6f6e2d6e617469766520617373657473207768696368207472616e736665722069732062616e6e65642e384c6f636174696f6e4173736574730001040225011004000484204c6f63616c20617373657420666f72206e6174697665206c6f636174696f6e2e644578697374656e7469616c4465706f736974436f756e7465720100184000000000000000000000000000000000082d01204e756d626572206f66206163636f756e747320746861742070616964206578697374656e7469616c206465706f7369747320666f7220696e73756666696369656e74206173736574732eb020546869732073746f726167652069732075736564206279206053756666696369656e6379436865636b602e018905011101104c53657175656e7469616c496453746172744174101040420f00002c537472696e674c696d697410102000000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e384d696e537472696e674c696d697410100300000004d020546865206d696e206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e6c52656745787465726e616c5765696768744d756c7469706c69657230200a0000000000000004d020576569676874206d756c7469706c69657220666f72206072656769737465725f65787465726e616c602065787472696e73696301b1083318436c61696d730118436c61696d730418436c61696d73010104025501184000000000000000000000000000000000049c2041737365742069642073746f7261676520666f7220656163682073686172656420746f6b656e0199050151010001b508353847656e65736973486973746f7279013847656e65736973486973746f7279043450726576696f7573436861696e0100b9080101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a105000000373c436f6c6c61746f7252657761726473013c436f6c6c61746f72526577617264730424436f6c6c61746f72730101040510bd08040004a82053746f7265732074686520636f6c6c61746f7273207065722073657373696f6e2028696e646578292e000159010844526577617264506572436f6c6c61746f72184078fa8b75289e0100000000000000000004802052657761726420616d6f756e7420706572206f6e6520636f6c6c61746f722e4052657761726443757272656e6379496410100000000004402052657761726420417373657420496401c10839204f6d6e69706f6f6c01204f6d6e69706f6f6c14184173736574730001040210c50804000488205374617465206f6620616e20617373657420696e20746865206f6d6e69706f6f6c444875624173736574496d62616c616e63650100c908440000000000000000000000000000000001045c20496d62616c616e6365206f66206875622061737365744c4875624173736574547261646162696c6974790100650104010474205472616461626c65207374617465206f66206875622061737365742e24506f736974696f6e730001040218cd08040004f4204c5020706f736974696f6e732e204d617073204e465420696e7374616e636520696420746f20636f72726573706f6e64696e6720706f736974696f6e384e657874506f736974696f6e49640100184000000000000000000000000000000000045c20506f736974696f6e206964732073657175656e63657201a505015d012028486478417373657449641010000000000440204e61746976652041737365742049442848756241737365744964101001000000043420487562204173736574204944404d696e5769746864726177616c46656569011064000000045c204d696e696d756d207769746864726177616c206665654c4d696e696d756d54726164696e674c696d69741840e80300000000000000000000000000000458204d696e696d756d2074726164696e67206c696d6974504d696e696d756d506f6f6c4c6971756964697479184040420f0000000000000000000000000004a8204d696e696d756d20706f6f6c206c69717569646974792077686963682063616e206265206164646564284d6178496e526174696f18400300000000000000000000000000000004f0204d6178206672616374696f6e206f66206173736574207265736572766520746f2073656c6c20696e2073696e676c65207472616e73616374696f6e2c4d61784f7574526174696f18400300000000000000000000000000000004ec204d6178206672616374696f6e206f66206173736574207265736572766520746f2062757920696e2073696e676c65207472616e73616374696f6e3c4e4654436f6c6c656374696f6e49641840390500000000000000000000000000000458204e6f6e2066756e6769626c6520636c61737320696401d1083b405472616e73616374696f6e506175736501405472616e73616374696f6e506175736504485061757365645472616e73616374696f6e7300010405d5089004000c6c2054686520706175736564207472616e73616374696f6e206d617000dc206d6170202850616c6c65744e616d6542797465732c2046756e6374696f6e4e616d65427974657329203d3e204f7074696f6e3c28293e01ad05016d010001dd083c1844757374657201184475737465720c404163636f756e74426c61636b6c69737400010402009004000480204163636f756e7473206578636c756465642066726f6d2064757374696e672e345265776172644163636f756e7400000004000474204163636f756e7420746f2074616b65207265776172642066726f6d2e2c447573744163636f756e7400000004000464204163636f756e7420746f2073656e64206475737420746f2e01b1050171010c1852657761726418400000000000000000000000000000000004382052657761726420616d6f756e74404e617469766543757272656e637949641010000000000440204e61746976652041737365742049644454726561737572794163636f756e74496400806d6f646c70792f74727372790000000000000000000000000000000000000000042d012044656661756c74206163636f756e7420666f7220607265776172645f6163636f756e746020616e642060647573745f6163636f756e746020696e2067656e6573697320636f6e6669672e01e1083d4c4f6d6e69706f6f6c57617265686f7573654c4d014c4f6d6e69706f6f6c57617265686f7573654c4d18344661726d53657175656e636572010010100000000004bc2049642073657175656e63657220666f722060476c6f62616c4661726d6020616e6420605969656c644661726d602e404465706f73697453657175656e63657201001840000000000000000000000000000000000028476c6f62616c4661726d0001040210e508040000245969656c644661726d00010c020202ed08f10804000450205969656c64206661726d2064657461696c732e1c4465706f7369740001040518f50804000444204465706f7369742064657461696c732e3c4163746976655969656c644661726d0001080202910110040004f820416374697665286661726d732061626c6520746f2072656365697665204c5020736861726573206465706f7369747329207969656c64206661726d732e01b505017501182050616c6c657449646d04204f6d6e6957684c4d042c2050616c6c65742069642e4454726561737572794163636f756e74496400806d6f646c70792f7472737279000000000000000000000000000000000000000004e8205472656173757279206163636f756e7420746f207265636569766520636c61696d65642072657761726473206c6f776572207468616e2045444c4d696e546f74616c4661726d5265776172647318400010a5d4e80000000000000000000000043901204d696e696d756d20746f74616c207265776172647320746f20646973747269627574652066726f6d20676c6f62616c206661726d20647572696e67206c6971756964697479206d696e696e672e644d696e506c616e6e65645969656c64696e67506572696f647310106838000004ec204d696e696d756d206e756d626572206f6620706572696f647320746f2072756e206c6971756964697479206d696e696e672070726f6772616d2e604d61784661726d456e74726965735065724465706f736974101005000000086501204d6178696d756d206e756d626572206f66207969656c64206661726d732073616d65204c50207368617265732063616e2062652072652f6465706f736974656420696e746f2e20546869732076616c756520616c776179735c204d555354204245203e3d20312e202020202020202020684d61785969656c644661726d73506572476c6f62616c4661726d101032000000084d01204d6178206e756d626572206f66207969656c64206661726d732063616e20657869737420696e20676c6f62616c206661726d2e205468697320696e636c7564657320616c6c206661726d7320696e20746865982073746f72616765286163746976652c2073746f707065642c207465726d696e61746564292e0105093e5c4f6d6e69706f6f6c4c69717569646974794d696e696e67015c4f6d6e69706f6f6c4c69717569646974794d696e696e6704384f6d6e69506f736974696f6e4964000104021818040004d0204d6170206f66206f6d6e69706f6f6c20706f736974696f6e27732069647320746f204c4d2773206465706f736974206964732e01b9050179010c3c4e4654436f6c6c656374696f6e49641840180a000000000000000000000000000004dc204e465420636f6c6c656374696f6e20696420666f72206c6971756964697479206d696e696e672773206465706f736974206e6674732e304f7261636c65536f75726365f101206f6d6e69706f6f6c0484204964656e746966696572206f66206f7261636c65206461746120736f72756365304f7261636c65506572696f640d090402048c204f7261636c652773207072696365206167677265676174696f6e20706572696f642e0111093f0c4f5443010c4f5443082c4e6578744f726465724964010010100000000004602049442073657175656e63657220666f72204f7264657273184f72646572730001040210190904000001bd050189010c704578697374656e7469616c4465706f7369744d756c7469706c696572080405044101204d756c7469706c696572207573656420746f20636f6d70757465206d696e696d616c20616d6f756e7473206f662061737365745f696e20616e642061737365745f6f757420696e20616e204f54432e0c466565690110e80300000478204665652064656475637465642066726f6d20616d6f756e745f6f75742e2c466565526563656976657200806d6f646c70792f747273727900000000000000000000000000000000000000000438204665652072656365697665722e011d09403843697263756974427265616b6572013843697263756974427265616b657218605472616465566f6c756d654c696d697450657241737365740101040210910120881300001027000008f420547261646520766f6c756d65206c696d697473206f662061737365747320736574206279207365745f74726164655f766f6c756d655f6c696d69742e9c204966206e6f74207365742c2072657475726e73207468652064656661756c74206c696d69742e7c416c6c6f7765645472616465566f6c756d654c696d69745065724173736574000104021021090400046020547261646520766f6c756d657320706572206173736574644c69717569646974794164644c696d69745065724173736574010104021095012401f40100001027000008c4204c6971756964697479206c696d697473206f662061737365747320666f7220616464696e67206c69717569646974792e9c204966206e6f74207365742c2072657475726e73207468652064656661756c74206c696d69742e84416c6c6f7765644164644c6971756964697479416d6f756e745065724173736574000104021025090400048020416464206c697175696469747920766f6c756d657320706572206173736574704c697175696469747952656d6f76654c696d69745065724173736574010104021095012401f40100001027000008cc204c6971756964697479206c696d697473206f662061737365747320666f722072656d6f76696e67206c69717569646974792e9c204966206e6f74207365742c2072657475726e73207468652064656661756c74206c696d69742e90416c6c6f77656452656d6f76654c6971756964697479416d6f756e745065724173736574000104021025090400048c2052656d6f7665206c697175696469747920766f6c756d65732070657220617373657401c105018d010c9444656661756c744d61784e65745472616465566f6c756d654c696d6974506572426c6f636b910120881300001027000008310120546865206d6178696d756d2070657263656e74616765206f66206120706f6f6c2773206c697175696469747920746861742063616e2062652074726164656420696e206120626c6f636b2e750120526570726573656e7465642061732061206e6f6e2d7a65726f206672616374696f6e20286e6f6d696e61746f722c2064656e6f6d696e61746f7229207769746820746865206d61782076616c7565206265696e672031305f3030302e8c44656661756c744d61784164644c69717569646974794c696d6974506572426c6f636b95012401f4010000102700000c2d0120546865206d6178696d756d2070657263656e74616765206f66206120706f6f6c2773206c697175696469747920746861742063616e20626520616464656420696e206120626c6f636b2e9d0120526570726573656e74656420617320616e206f7074696f6e616c206e6f6e2d7a65726f206672616374696f6e20286e6f6d696e61746f722c2064656e6f6d696e61746f7229207769746820746865206d61782076616c7565206265696e672031305f3030302eb42049662073657420746f204e6f6e652c20746865206c696d69747320617265206e6f7420656e666f726365642e9844656661756c744d617852656d6f76654c69717569646974794c696d6974506572426c6f636b95012401f4010000102700000c350120546865206d6178696d756d2070657263656e74616765206f66206120706f6f6c2773206c697175696469747920746861742063616e2062652072656d6f76656420696e206120626c6f636b2e9d0120526570726573656e74656420617320616e206f7074696f6e616c206e6f6e2d7a65726f206672616374696f6e20286e6f6d696e61746f722c2064656e6f6d696e61746f7229207769746820746865206d61782076616c7565206265696e672031305f3030302eb42049662073657420746f204e6f6e652c20746865206c696d69747320617265206e6f7420656e666f726365642e0129094118526f757465720118526f757465720818536b6970456400002d09040004a4466c616720746f20696e646963617465207768656e20746f20736b69702045442068616e646c696e6718526f7574657300010402c90555020400047c2053746f72696e6720726f7574657320666f7220617373657420706169727301c50501990108344e6174697665417373657449641010000000000440204e6174697665204173736574204964304f7261636c65506572696f640d090402048c204f7261636c652773207072696365206167677265676174696f6e20706572696f642e013109432c44796e616d696346656573012c44796e616d696346656573042041737365744665650001040510350904000849012053746f726573206c6173742063616c63756c6174656420666565206f6620616e20617373657420616e6420626c6f636b206e756d62657220696e20776869636820697420776173206368616e6765642e2ec82053746f72656420617320284173736574206665652c2050726f746f636f6c206665652c20426c6f636b206e756d6265722901cd0501a10108484173736574466565506172616d65746572733909a0c409000050c3000000a0724e1809000000000000000000000000c84e676dc11b0000000000000000005450726f746f636f6c466565506172616d65746572733909a0f4010000e8030000005039278c0400000000000000000000000064a7b3b6e00d000000000000000000013d09441c5374616b696e67011c5374616b696e67141c5374616b696e6701004109c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045820476c6f62616c207374616b696e672073746174652e24506f736974696f6e73000104021845090400045c2055736572277320706f736974696f6e2073746174652e384e657874506f736974696f6e49640100184000000000000000000000000000000000046020506f736974696f6e206964732073657175656e6365722e34506f736974696f6e566f7465730101040218490904000460204c697374206f6620706f736974696f6e20766f7465732e3850726f636573736564566f7465730001080202d90755090400049d01204c697374206f662070726f63657373656420766f74652e205573656420746f2064657465726d696e652069662074686520766f74652073686f756c64206265206c6f636b656420696e2063617365206f6620766f74696e67206e6f7420696e206661766f722e01d10501a5012c30506572696f644c656e6774681010201c00000484205374616b696e6720706572696f64206c656e67746820696e20626c6f636b732e2050616c6c657449646d04207374616b696e6723042c2050616c6c65742069642e344e6174697665417373657449641010000000000444204e61746976652041737365742049442e204d696e5374616b6518400080c6a47e8d030000000000000000000470204d696e20616d6f756e742075736572206d757374207374616b652e4054696d65506f696e747357656967687469011040420f0004e020576569676874206f66207468652074696d6520706f696e747320696e20746f74616c20706f696e74732063616c63756c6174696f6e732e48416374696f6e506f696e747357656967687461091000c2eb0b04e820576569676874206f662074686520616374696f6e20706f696e747320696e20746f74616c20706f696e74732063616c63756c6174696f6e732e4c54696d65506f696e7473506572506572696f6408040104d4204e756d626572206f662074696d6520706f696e7473207573657273207265636569766520666f72206561636820706572696f642e48556e636c61696d61626c65506572696f6473184001000000000000000000000000000000087501204e756d626572206f6620706572696f647320757365722063616e277420636c61696d207265776172647320666f722e20557365722063616e20657869742062757420776f6e2774207265636569766520616e7920726577617264732e71012049662068652073746179206c6f6e676572207468616e2060556e636c61696d61626c65506572696f6473602068652077696c6c2072656365697665207265776172647320616c736f20666f7220746865736520706572696f64732e4843757272656e745374616b6557656967687408040204b10120576569676874206f66207468652061637475616c207374616b6520696e20736c61736820706f696e74732063616c63756c6174696f6e2e20426967676572207468652076616c7565206c6f776572207468652063616c63756c6174656420736c61736820706f696e74732e204d6178566f74657310106400000004cc204d617820616d6f756e74206f6620766f7465732074686520757365722063616e206861766520617420616e792074696d652e3c4e4654436f6c6c656374696f6e49641840ae080000000000000000000000000000044c204e465420636f6c6c656374696f6e2069642e0165094528537461626c65737761700128537461626c65737761700814506f6f6c7300010402106d090400043c204578697374696e6720706f6f6c73404173736574547261646162696c69747901010802029101b901040f048820547261646162696c697479207374617465206f6620706f6f6c206173736574732e01d50501a9010c404d696e506f6f6c4c6971756964697479184040420f00000000000000000000000000045c204d696e696d756d20706f6f6c206c69717569646974793c4d696e54726164696e674c696d69741840e8030000000000000000000000000000045c204d696e696d756d2074726164696e6720616d6f756e7448416d706c696669636174696f6e52616e676575091002001027043d0120416d706c696669636174696f6e20696e636c75736976652072616e67652e20506f6f6c277320616d702063616e2062652073656c65637465642066726f6d207468652072616e6765206f6e6c792e0179094614426f6e64730114426f6e6473081c426f6e64496473000104027d091004000854205265676973746572656420626f6e64206964732ec0204d6170732028756e6465726c79696e672061737365742049442c206d6174757269747929202d3e20626f6e6420494414426f6e647300010402107d0904000848205265676973746572656420626f6e64732ec0204d61707320626f6e64204944202d3e2028756e6465726c79696e672061737365742049442c206d617475726974792901d90501bd010c2050616c6c657449646d0420706c74626f6e647304ec205468652070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e2c50726f746f636f6c466565690110204e000004382050726f746f636f6c206665652e2c466565526563656976657200806d6f646c70792f74727372790000000000000000000000000000000000000000045c2050726f746f636f6c206665652072656365697665722e01810947384f7463536574746c656d656e74730001dd0501c101143850726f666974526563656976657200806d6f646c70792f747273727900000000000000000000000000000000000000000484204163636f756e742077686f207265636569766573207468652070726f6669742e4c4d696e50726f66697450657263656e7461676561091010270000049c204d696e696d756d2070726f66697420696e207465726d73206f662070657263656e746167652e385072696365507265636973696f6e6101400000c16ff2862300000000000000000004d02044657465726d696e6573207768656e20776520636f6e736964657220616e2061726269747261676520617320636c6f7365642e3c4d696e54726164696e674c696d69741840e8030000000000000000000000000000045c204d696e696d756d2074726164696e67206c696d69742e344d6178497465726174696f6e73101028000000046d01204d6178696d756d206e756d626572206f6620697465726174696f6e73207573656420696e207468652062696e6172792073656172636820616c676f726974686d20746f2066696e642074686520747261646520616d6f756e742e018509480c4c4250010c4c42500820506f6f6c446174610001040200c9010400044c2044657461696c73206f66206120706f6f6c2e54466565436f6c6c6563746f725769746841737365740101080202d90720040008c82053746f72616765207573656420666f7220747261636b696e67206578697374696e672066656520636f6c6c6563746f7273cc204e6f74206d6f7265207468616e206f6e652066656520636f6c6c6563746f722070657220617373657420706f737369626c6501e10501c501143c4d696e54726164696e674c696d69741840e8030000000000000000000000000000042101204d696e696d756d2074726164696e67206c696d69742c20736f6c6520707572706f7365206f66207468697320697320746f206b65657020746865206d61746820776f726b696e67404d696e506f6f6c4c6971756964697479184040420f00000000000000000000000000042501204d696e696d756d20706f6f6c206c69717569646974792c20736f6c6520707572706f7365206f66207468697320697320746f206b65657020746865206d61746820776f726b696e67284d6178496e526174696f18400300000000000000000000000000000004cc204d6178206672616374696f6e206f6620706f6f6c20746f2073656c6c20696e2073696e676c65207472616e73616374696f6e2c4d61784f7574526174696f18400300000000000000000000000000000004c8204d6178206672616374696f6e206f6620706f6f6c20746f2062757920696e2073696e676c65207472616e73616374696f6e2472657061795f666565910120020000000a00000000018909490c58594b010c58594b0c285368617265546f6b656e010104020010100000000004a02041737365742069642073746f7261676520666f722073686172656420706f6f6c20746f6b656e7338546f74616c4c69717569646974790101040200184000000000000000000000000000000000046c20546f74616c206c697175696469747920696e206120706f6f6c2e28506f6f6c4173736574730001040200910104000458204173736574207061697220696e206120706f6f6c2e01e90501d5011c344e6174697665417373657449641010000000000440204e61746976652041737365742049643847657445786368616e676546656591012003000000e803000004442054726164696e672066656520726174653c4d696e54726164696e674c696d69741840e80300000000000000000000000000000458204d696e696d756d2074726164696e67206c696d6974404d696e506f6f6c4c6971756964697479184040420f00000000000000000000000000045c204d696e696d756d20706f6f6c206c6971756964697479284d6178496e526174696f18400300000000000000000000000000000004cc204d6178206672616374696f6e206f6620706f6f6c20746f2073656c6c20696e2073696e676c65207472616e73616374696f6e2c4d61784f7574526174696f18400300000000000000000000000000000004c8204d6178206672616374696f6e206f6620706f6f6c20746f2062757920696e2073696e676c65207472616e73616374696f6e304f7261636c65536f75726365f10120687964726178796b04a8204f7261636c6520736f75726365206964656e74696669657220666f7220746869732070616c6c65742e018d094a24526566657272616c730124526566657272616c732834526566657272616c436f64657300010402dd01000400083c20526566657272616c20636f64657390204d617073206120726566657272616c20636f646520746f20616e206163636f756e742e40526566657272616c4163636f756e74730001040200dd010400084820526566657272616c206163636f756e747390204d61707320616e206163636f756e7420746f206120726566657272616c20636f64652e384c696e6b65644163636f756e747300010402000004000844204c696e6b6564206163636f756e74732e9c204d61707320616e206163636f756e7420746f206120726566657272616c206163636f756e742e3852656665727265725368617265730101040200184000000000000000000000000000000000047420536861726573206f66206120726566657272616c206163636f756e74305472616465725368617265730101040200184000000000000000000000000000000000046c20536861726573206f66206120747261646572206163636f756e742c546f74616c5368617265730100184000000000000000000000000000000000045820546f74616c2073686172652069737375616e63652e2052656665727265720001040200910904000cdc2052656665726572206c6576656c20616e6420746f74616c20616363756d756c617465642072657761726473206f7665722074696d652ed501204d617073207265666572726572206163636f756e7420746f20284c6576656c2c2042616c616e6365292e204c6576656c20696e646963617465732063757272656e74207265776172647320616e642042616c616e6365206973207573656420746f20756e6c6f636b206e657874206c6576656c2eb90120446576206e6f74653a20776520757365204f7074696f6e51756572792068657265206265636175736520746869732068656c707320746f20656173696c792064657465726d696e65207468617420616e206163636f756e74206966207265666572726572206163636f756e742e3041737365745265776172647300010802029509e901040008b02041737365742066656520646973747269627574696f6e207265776172647320696e666f726d6174696f6e2ed0204d617073202861737365745f69642c206c6576656c2920746f206173736574207265776172642070657263656e74616765732e4850656e64696e67436f6e76657273696f6e73000104021090040008010120496e666f726d6174696f6e2061626f7574206173736574732074686174206172652063757272656e746c7920696e20746865207265776172647320706f742e0d01205573656420746f20656173696c792064657465726d696e65206c697374206f66206173736574732074686174206e65656420746f20626520636f6e7665727465642e70436f756e746572466f7250656e64696e67436f6e76657273696f6e73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001ed0501d901182c526577617264417373657410100000000004d8204944206f6620616e2061737365742074686174206973207573656420746f2064697374726962757465207265776172647320696e2e2050616c6c657449646d0420726566657272616c0445012050616c6c65742069642e2044657465726d696e6573206163636f756e7420776869636820686f6c647320616363756d756c61746564207265776172647320696e20766172696f7573206173736574732e3c526567697374726174696f6e4665659909d00000000000e02367e8c9000000000000000000006d6f646c70792f74727372790000000000000000000000000000000000000000086820526567697374726174696f6e206665652064657461696c732e250120284944206f6620616e2061737365742077686963682066656520697320746f206265207061696420696e2c20416d6f756e742c2042656e6566696369617279206163636f756e742928436f64654c656e67746810100a0000000478204d6178696d756d20726566657272616c20636f6465206c656e6774682e344d696e436f64654c656e6774681010040000000478204d696e696d756d20726566657272616c20636f6465206c656e6774682e40536565644e6174697665416d6f756e74184000a0724e18090000000000000000000004b4205365656420616d6f756e742074686174207761732073656e7420746f207468652072657761726420706f742e019d094b18546f6b656e730118546f6b656e731034546f74616c49737375616e6365010104051018400000000000000000000000000000000004902054686520746f74616c2069737375616e6365206f66206120746f6b656e20747970652e144c6f636b730101080205d907a109040008d820416e79206c6971756964697479206c6f636b73206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e204163636f756e74730101080205d907ad09c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b8205468652062616c616e6365206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e00fc204e4f54453a2049662074686520746f74616c2069732065766572207a65726f2c206465637265617365206163636f756e7420726566206163636f756e742e001901204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f7265282062616c616e6365732e2052657365727665730101080205d907b109040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01f10501ed0108204d61784c6f636b73101032000000002c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01bd094d2843757272656e636965730001f50501f501044c4765744e617469766543757272656e637949641010000000000001c1094f1c56657374696e67011c56657374696e67044056657374696e675363686564756c65730101040200c50904000c842056657374696e67207363686564756c6573206f6620616e206163636f756e742e00e02056657374696e675363686564756c65733a206d6170204163636f756e744964203d3e205665633c56657374696e675363686564756c653e01f90501fd0104444d696e5665737465645472616e7366657218406400000000000000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e01c909510c45564d010c45564d10304163636f756e74436f646573010104020d0238040000504163636f756e74436f6465734d65746164617461000104020d02cd090400003c4163636f756e7453746f72616765730101080202d1093480000000000000000000000000000000000000000000000000000000000000000000205375696369646564000104020d02900400000101060105020001d5095a2845564d436861696e4964012845564d436861696e4964041c436861696e49640100302000000000000000000448205468652045564d20636861696e2049442e000000005b20457468657265756d0120457468657265756d141c50656e64696e670100d909040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000fd0904000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000110a0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000150a04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b48617368010104054d0434800000000000000000000000000000000000000000000000000000000000000000000111060115020001190a5c2c45564d4163636f756e7473012c45564d4163636f756e74730c404163636f756e74457874656e73696f6e000104020d02c1040400040501204d61707320616e2045564d206164647265737320746f20746865206c617374203132206279746573206f66206120737562737472617465206163636f756e742e40436f6e74726163744465706c6f796572000104020d029004000409012057686974656c69737465642061646472657373657320746861742061726520616c6c6f77656420746f206465706c6f7920736d61727420636f6e7472616374732e40417070726f766564436f6e7472616374000104020d029004000419012057686974656c697374656420636f6e74726163747320746861742061726520616c6c6f77656420746f206d616e6167652062616c616e63657320616e6420746f6b656e732e01390601390204344665654d756c7469706c69657210103200000004b420466565206d756c7469706c69657220666f72207468652062696e64696e67206f66206164647265737365732e011d0a5d3444796e616d696345766d466565013444796e616d696345766d46656504344261736546656550657247617301004d04800024f40000000000000000000000000000000000000000000000000000000000044420426173652066656520706572206761730000042c576574684173736574496410101400000004382057455448204173736574204964005e4858594b4c69717569646974794d696e696e6700013d06013d02043c4e4654436f6c6c656374696f6e496418400d15000000000000000000000000000004dc204e465420636f6c6c656374696f6e20696420666f72206c6971756964697479206d696e696e672773206465706f736974206e6674732e01210a5f3858594b57617265686f7573654c4d013858594b57617265686f7573654c4d18344661726d53657175656e636572010010100000000004bc2049642073657175656e63657220666f722060476c6f62616c4661726d6020616e6420605969656c644661726d602e404465706f73697453657175656e63657201001840000000000000000000000000000000000028476c6f62616c4661726d0001040210250a040000245969656c644661726d00010c020202290a2d0a04000450205969656c64206661726d2064657461696c732e1c4465706f7369740001040518310a04000444204465706f7369742064657461696c732e3c4163746976655969656c644661726d0001080202d90710040004f820416374697665286661726d732061626c6520746f2072656365697665204c5020736861726573206465706f7369747329207969656c64206661726d732e014106014502182050616c6c657449646d042078796b4c4d704944042c2050616c6c65742069642e4454726561737572794163636f756e74496400806d6f646c70792f7472737279000000000000000000000000000000000000000004e8205472656173757279206163636f756e7420746f207265636569766520636c61696d65642072657761726473206c6f776572207468616e2045444c4d696e546f74616c4661726d5265776172647318400010a5d4e80000000000000000000000043901204d696e696d756d20746f74616c207265776172647320746f20646973747269627574652066726f6d20676c6f62616c206661726d20647572696e67206c6971756964697479206d696e696e672e644d696e506c616e6e65645969656c64696e67506572696f647310106838000004ec204d696e696d756d206e756d626572206f6620706572696f647320746f2072756e206c6971756964697479206d696e696e672070726f6772616d2e604d61784661726d456e74726965735065724465706f736974101005000000086501204d6178696d756d206e756d626572206f66207969656c64206661726d732073616d65204c50207368617265732063616e2062652072652f6465706f736974656420696e746f2e20546869732076616c756520616c776179735c204d555354204245203e3d20312e202020202020202020684d61785969656c644661726d73506572476c6f62616c4661726d101032000000084d01204d6178206e756d626572206f66207969656c64206661726d732063616e20657869737420696e20676c6f62616c206661726d2e205468697320696e636c7564657320616c6c206661726d7320696e20746865982073746f72616765286163746976652c2073746f707065642c207465726d696e61746564292e01410a603852656c6179436861696e496e666f000145060149020001450ac90c444341010c444341184c5363686564756c65496453657175656e6365720100101000000000046c2049642073657175656e63657220666f72207363686564756c6573245363686564756c657300010402104d06040004642053746f72696e67207363686564756c652064657461696c73445363686564756c654f776e6572736869700001080205d907900400046c2053746f72696e67207363686564756c65206f776e6572736869704052656d61696e696e67416d6f756e7473000104021018040004fc204b65657020747261636b696e67207468652072656d61696e696e6720616d6f756e747320746f207370656e6420666f7220444341207363686564756c657338526574726965734f6e4572726f72010104021008040004e0204b65657020747261636b696e6720746865207265747279206f6e206572726f7220666c616720666f7220444341207363686564756c65734c5363686564756c65496473506572426c6f636b0101040210490a040004f8204b65657020747261636b696e67206f6620746865207363686564756c652069647320746f20626520657865637574656420696e2074686520626c6f636b014906014d02307c4d61785072696365446966666572656e63654265747765656e426c6f636b73690110983a000004ac4d617820707269636520646966666572656e636520616c6c6f776564206265747765656e20626c6f636b73ac4d6178436f6e666967757261626c655072696365446966666572656e63654265747765656e426c6f636b7369011050c3000004e04d617820636f6e666967757261626c6520707269636520646966666572656e636520616c6c6f776564206265747765656e20626c6f636b734c4d61785363686564756c65506572426c6f636b10101400000004d0546865206e756d626572206f66206d6178207363686564756c657320746f2062652065786563757465642070657220626c6f636b644d61784e756d6265724f66526574726965734f6e4572726f7208040304d8546865206e756d626572206f66206d6178207265747269657320696e2063617365206f66207472616465206c696d6974206572726f72344d696e696d616c506572696f6410100500000004844d696e696d616c20706572696f64206265747765656e20657865637574696f6e732842756d704368616e63654d08041104844368616e6365206f66207468652072616e646f6d2072657363686564756c696e674c4d696e696d756d54726164696e674c696d69741840e803000000000000000000000000000004a4204d696e696d756d2074726164696e67206c696d697420666f7220612073696e676c65207472616465344e6174697665417373657449641010000000000440204e617469766520417373657420496454506f6c6b61646f744e617469766541737365744964101005000000047c20506f6c6b61646f74204e61746976652041737365742049642028444f5429644d696e427564676574496e4e617469766543757272656e637918400080c6a47e8d030000000000000000000425014d696e696d756d2062756467657420746f2062652061626c6520746f207363686564756c652061204443412c2073706563696669656420696e206e61746976652063757272656e63792c466565526563656976657200806d6f646c70792f7472737279000000000000000000000000000000000000000004945468652066656520726563656976657220666f72207472616e73616374696f6e2066656573384e616d6564526573657276654964f101206463616f72646572042901204e616d65642072657365727665206964656e74696669657220746f2073746f7265206e616d656420726573657276657320666f72206f7264657273206f662065616368207573657273014d0a42245363686564756c657201245363686564756c6572103c496e636f6d706c65746553696e6365000010040000184167656e64610101040510510a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e1c52657472696573000104029101610a040004210120526574727920636f6e66696775726174696f6e7320666f72206974656d7320746f2062652065786563757465642c20696e6465786564206279207461736b20616464726573732e184c6f6f6b757000010405049101040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01550601650208344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01650a053c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e740100690a0400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e7400008d0a04000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468652d01206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010038040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000380400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000610604000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f6465010020040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001010000000000c1d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e00882054686973206973207570646174656420696e20606f6e5f66696e616c697a65602e60557067726164655265737472696374696f6e5369676e616c0100910a04001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f41686561640100850a040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600006906040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000990a04001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e0000ad0a0400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100b50a80000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d716348656164730100b90a040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100c50a04000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100c10304000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100c103040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e5c55707761726444656c6976657279466565466163746f720100610140000064a7b3b6e00d000000000000000004e42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c69766572792066656520627920666f7220554d502e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e60437573746f6d56616c69646174696f6e486561644461746100003804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e015906016d02042853656c66506172614964810310f207000004b82052657475726e73207468652070617261636861696e204944207765206172652072756e6e696e6720776974682e01cd0a673450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e496401008103106400000000018d06000000692c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040230d10a0400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502e50a10040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502e50a30040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502e50ae90a04000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100ed0a04000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e0000f90a0400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c050202010b050b040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c65730001040200150b040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e0191060171020001210b6b2843756d756c757358636d00012d0701710300006d2458636d705175657565012458636d7051756575651c50496e626f756e6458636d7053757370656e6465640100250b0400200d01205468652073757370656e64656420696e626f756e642058434d50206368616e6e656c732e20416c6c206f746865727320617265206e6f742073757370656e6465642e00710120546869732069732061206053746f7261676556616c75656020696e7374656164206f662061206053746f726167654d6170602073696e636520776520657870656374206d756c7469706c652072656164732070657220626c6f636b690120746f20646966666572656e74206b65797320776974682061206f6e652062797465207061796c6f61642e205468652061636365737320746f2060426f756e6465644254726565536574602077696c6c2062652063616368656415012077697468696e2074686520626c6f636b20616e64207468657265666f7265206f6e6c7920696e636c75646564206f6e636520696e207468652070726f6f662073697a652e006501204e4f54453a2054686520506f562062656e63686d61726b696e672063616e6e6f74206b6e6f77207468697320616e642077696c6c206f7665722d657374696d6174652c20627574207468652061637475616c2070726f6f66442077696c6c20626520736d616c6c65722e484f7574626f756e6458636d705374617475730100310b0400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d6573736167657301010802053d0b38040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402810338040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100410b302000000030000000080000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e38517565756553757370656e64656401002004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e4444656c6976657279466565466163746f72010104058103610140000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e00017503044c4d6178496e626f756e6453757370656e6465641010e803000014490120546865206d6178696d756d206e756d626572206f6620696e626f756e642058434d50206368616e6e656c7320746861742063616e2062652073757370656e6465642073696d756c74616e656f75736c792e005d0120416e792066757274686572206368616e6e656c2073757370656e73696f6e732077696c6c206661696c20616e64206d65737361676573206d6179206765742064726f7070656420776974686f757420667572746865724501206e6f746963652e2043686f6f73696e67206120686967682076616c756520283130303029206973206f6b61793b207468652074726164652d6f666620746861742069732064657363726962656420696ed8205b60496e626f756e6458636d7053757370656e646564605d207374696c6c206170706c6965732061742074686174207363616c652e01450b6f304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f72010104057d03490b74000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c536572766963654865616400007d03040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e1450616765730001080505550b590b0400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e01310701790310204865617053697a651010000c0200143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010080000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e3453657276696365576569676874d1032c010700a2941a1d020050001841012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f72a820736572766963696e6720656e717565756564206974656d7320606f6e5f696e697469616c697a65602e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6c5d012060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c79206f7220736574205b6053656c663a3a49646c654d617853657276696365576569676874605d20746f2068617665542069742072756e20696e20606f6e5f69646c65602e5049646c654d617853657276696365576569676874d1032c010700a2941a1d02005000145d0120546865206d6178696d756d20616d6f756e74206f66207765696768742028696620616e792920746f20626520757365642066726f6d2072656d61696e696e672077656967687420606f6e5f69646c656020776869636841012073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f7220736572766963696e6720656e717565756564206974656d7320606f6e5f69646c65602e3d012055736566756c20666f722070617261636861696e7320746f2070726f63657373206d65737361676573206174207468652073616d6520626c6f636b2074686579206172652072656365697665642e00290120496620604e6f6e65602c2069742077696c6c206e6f742063616c6c2060536572766963655175657565733a3a736572766963655f7175657565736020696e20606f6e5f69646c65602e01610b721c4f726d6c58636d000135070189030001650b871c58546f6b656e7300013907018d030c3053656c664c6f636174696f6e7d0214010100c91f04542053656c6620636861696e206c6f636174696f6e2e344261736558636d57656967687428140284d71700104420426173652058434d207765696768742e00f8205468652061637475616c6c792077656967687420666f7220616e2058434d206d6573736167652069732060543a3a4261736558636d576569676874202b6c20543a3a576569676865723a3a77656967687428266d736729602e34526174654c696d6974657249649000046c20546865206964206f662074686520526174654c696d697465722e01690b8934556e6b6e6f776e546f6b656e730134556e6b6e6f776e546f6b656e730860436f6e637265746546756e6769626c6542616c616e63657301010802026d0b18400000000000000000000000000000000010050120436f6e63726574652066756e6769626c652062616c616e63657320756e646572206120676976656e206c6f636174696f6e20616e64206120636f6e6372657465342066756e6769626c652069642e008820646f75626c655f6d61703a2077686f2c2061737365745f6964203d3e207531323860416273747261637446756e6769626c6542616c616e6365730101080202710b1840000000000000000000000000000000001005012041627374726163742066756e6769626c652062616c616e63657320756e646572206120676976656e206c6f636174696f6e20616e642061206162737472616374342066756e6769626c652069642e008820646f75626c655f6d61703a2077686f2c2061737365745f6964203d3e2075313238000191030001750b8b28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000a144436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100bd0804000411012054686520696e76756c6e657261626c652c207065726d697373696f6e656420636f6c6c61746f72732e2054686973206c697374206d75737420626520736f727465642e3443616e6469646174654c6973740100790b0400146901205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e206043616e646964617465736020616e642060496e76756c6e657261626c6573602073686f756c6420626550206d757475616c6c79206578636c75736976652e0075012054686973206c69737420697320736f7274656420696e20617363656e64696e67206f72646572206279206465706f73697420616e64207768656e20746865206465706f736974732061726520657175616c2c20746865206c65617374a020726563656e746c79207570646174656420697320636f6e7369646572656420677265617465722e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e0145070195030001850ba31c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010099030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100890b0400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f727301009d010400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b65797300010405004d070400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405910b00040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014907019d030001990ba51041757261011041757261082c417574686f72697469657301009d0b0400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100a50b2000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000430536c6f744475726174696f6e3020e02e000000000000100d012054686520736c6f74206475726174696f6e20417572612073686f756c642072756e20776974682c2065787072657373656420696e206d696c6c697365636f6e64732e3d0120546865206566666563746976652076616c7565206f66207468697320747970652073686f756c64206e6f74206368616e6765207768696c652074686520636861696e2069732072756e6e696e672e00350120466f72206261636b776172647320636f6d7061746962696c6974792065697468657220757365205b604d696e696d756d506572696f6454696d657354776f605d206f72206120636f6e73742e00a71c41757261457874011c41757261457874082c417574686f72697469657301009d0b040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f0000a90b04000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e00000000a924456d614f7261636c650124456d614f7261636c650c2c416363756d756c61746f720100ad0b040004710120416363756d756c61746f7220666f72206f7261636c65206461746120696e2063757272656e7420626c6f636b20746861742077696c6c206265207265636f726465642061742074686520656e64206f662074686520626c6f636b2e1c4f7261636c657300010c050505d10bd50b04000c7501204f7261636c652073746f72616765206b65796564206279206461746120736f757263652c20696e766f6c7665642061737365742069647320616e642074686520706572696f64206c656e677468206f6620746865206f7261636c652e0065012053746f72657320746865206461746120656e7472792061732077656c6c2061732074686520626c6f636b206e756d626572207768656e20746865206f7261636c652077617320666972737420696e697469616c697a65642e4457686974656c69737465644173736574730100d90b040004dc204173736574732074686174206172652077686974656c697374656420616e6420747261636b6564206279207468652070616c6c65742e01550701a10304404d6178556e69717565456e747269657310102800000004fc204d6178696d756d206e756d626572206f6620756e69717565206f7261636c6520656e747269657320657870656374656420696e206f6e6520626c6f636b2e01e50bcae90b042848436865636b4e6f6e5a65726f53656e646572f10b9040436865636b5370656356657273696f6ef50b1038436865636b547856657273696f6ef90b1030436865636b47656e65736973fd0b3438436865636b4d6f7274616c697479010c3428436865636b4e6f6e6365090c902c436865636b5765696768740d0c90604368617267655472616e73616374696f6e5061796d656e74110c903456616c6964617465436c61696d150c9044436865636b4d6574616461746148617368190c6902250c'; diff --git a/src/testHelpers/mockHydrationParachainApi.ts b/src/testHelpers/mockHydrationParachainApi.ts new file mode 100644 index 00000000..11d741e4 --- /dev/null +++ b/src/testHelpers/mockHydrationParachainApi.ts @@ -0,0 +1,6 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import { createApiWithAugmentations } from './createApiWithAugmentations'; +import { hydrationV3100 } from './metadata/hydrationV3100'; + +export const mockHydrationParachainApi = createApiWithAugmentations(hydrationV3100); diff --git a/src/types.ts b/src/types.ts index 5a7d4620..c42312e4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -67,6 +67,10 @@ export enum Direction { * Parachain to System parachain. */ ParaToSystem = 'ParaToSystem', + /** + * Parachain to Ethereum. + */ + ParaToEthereum = 'ParaToEthereum', /** * Relay to System Parachain. */ @@ -111,6 +115,7 @@ export interface ChainOriginDestInfo { isDestSystemParachain: boolean; isDestParachain: boolean; isDestBridge: boolean; + isDestEthereum: boolean; } export interface LocalTxOpts extends TransferArgsOpts { @@ -180,7 +185,7 @@ export type AssetTransferApiOpts>; + injectedRegistry?: RequireAtLeastOne | ChainInfoRegistry>; /** * Option to override the registry with the supplied chain information. */ diff --git a/tsconfig.json b/tsconfig.json index c2dc261d..6608574a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "./node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "lib", - "rootDirs": ["./src", "./scripts"], + "rootDirs": ["./src", "./scripts", "./examples", "./e2e-tests"], "ignoreDeprecations": "5.0", "resolveJsonModule": true, "esModuleInterop": true diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index 78f1893a..00000000 --- a/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vitest/config' - -export default defineConfig({ - test: { - // ... Specify options here. - silentSkip: true - }, -}) \ No newline at end of file From a27bf63aac8998decae9cabcd7c58ae00b6a95eb Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 11 Dec 2024 22:41:14 -0500 Subject: [PATCH 03/13] fixed conflicts --- .github/workflows/pr.yml | 8 +- .gitignore | 4 + README.md | 38 +- e2e-tests/README.md | 37 +- e2e-tests/balance.ts | 138 - e2e-tests/consts.ts | 10 - e2e-tests/executor.ts | 152 - e2e-tests/logger.ts | 110 - e2e-tests/moonbeam.hydration.spec.ts | 118 + e2e-tests/polkadotAssetHub.bridgeHub.spec.ts | 88 + e2e-tests/polkadotAssetHub.hydration.spec.ts | 355 ++ e2e-tests/tests.sh | 18 - e2e-tests/tests/assets.ts | 81 - e2e-tests/tests/foreignAssets.ts | 81 - e2e-tests/tests/index.ts | 167 - e2e-tests/tests/liquidPools.ts | 78 - e2e-tests/tests/local.ts | 153 - e2e-tests/tsconfig.json | 3 +- e2e-tests/verification.ts | 24 - e2e-tests/zombienet.sh | 14 - examples/tsconfig.json | 3 + package.json | 39 +- scripts/consts.ts | 5 - scripts/testNetworkForeignAssets.ts | 250 -- scripts/testNetworkLiquidAssets.ts | 180 - scripts/testNetworkSetup.ts | 166 - scripts/tsconfig.json | 10 - scripts/util.ts | 81 - .../limitedReserveTransferAssets.ts | 1 + .../polkadotXcm/limitedTeleportAssets.ts | 1 + .../polkadotXcm/transferAssets.ts | 1 + .../transferAssetsUsingTypeAndThen.ts | 1 + src/createXcmTypes/ParaToPara.ts | 10 +- src/createXcmTypes/ParaToSystem.ts | 8 +- src/createXcmTypes/types.ts | 1 + .../getParachainNativeAssetLocation.spec.ts | 47 + .../util/getParachainNativeAssetLocation.ts | 83 + .../parachains/bifrost.spec.ts | 25 +- .../parachains/moonriver.spec.ts | 6 +- tsconfig.json | 6 +- vitest-setup-file.ts | 6 + vitest.config.ts | 8 + vitest.workspace.ts | 26 + yarn.lock | 3355 +++++++++++++++-- zombienet/medium-network.toml | 66 - zombienet/small-network.toml | 43 - 46 files changed, 3887 insertions(+), 2218 deletions(-) delete mode 100644 e2e-tests/balance.ts delete mode 100644 e2e-tests/consts.ts delete mode 100644 e2e-tests/executor.ts delete mode 100644 e2e-tests/logger.ts create mode 100644 e2e-tests/moonbeam.hydration.spec.ts create mode 100644 e2e-tests/polkadotAssetHub.bridgeHub.spec.ts create mode 100644 e2e-tests/polkadotAssetHub.hydration.spec.ts delete mode 100755 e2e-tests/tests.sh delete mode 100644 e2e-tests/tests/assets.ts delete mode 100644 e2e-tests/tests/foreignAssets.ts delete mode 100644 e2e-tests/tests/index.ts delete mode 100644 e2e-tests/tests/liquidPools.ts delete mode 100644 e2e-tests/tests/local.ts delete mode 100644 e2e-tests/verification.ts delete mode 100755 e2e-tests/zombienet.sh delete mode 100644 scripts/consts.ts delete mode 100644 scripts/testNetworkForeignAssets.ts delete mode 100644 scripts/testNetworkLiquidAssets.ts delete mode 100644 scripts/testNetworkSetup.ts delete mode 100644 scripts/tsconfig.json delete mode 100644 scripts/util.ts create mode 100644 src/createXcmTypes/util/getParachainNativeAssetLocation.spec.ts create mode 100644 src/createXcmTypes/util/getParachainNativeAssetLocation.ts create mode 100644 vitest-setup-file.ts create mode 100644 vitest.config.ts create mode 100644 vitest.workspace.ts delete mode 100644 zombienet/medium-network.toml delete mode 100644 zombienet/small-network.toml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bf63564f..5db79bb8 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -101,4 +101,10 @@ jobs: run: yarn install - name: Unit tests. - run: yarn test + run: yarn test:unit + + - name: Integration tests. + run: yarn test:integration + + - name: E2E tests. + run: yarn test:e2e diff --git a/.gitignore b/.gitignore index 45d0833f..563ff883 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,7 @@ zombienet/bin/* # Binaries /bin/* !bin/README.md + +# Chopsticks +db.sqlite +db.sqlite-* diff --git a/README.md b/README.md index b60e9065..f40bbf48 100644 --- a/README.md +++ b/README.md @@ -397,40 +397,10 @@ api.claimAssets( Note: claimAssets works when pallet-xcm is configured as the AssetTrap for the given runtime. This is true for all relay chains and system parachains but may not be for other chains. -## License - -The source code in this repository is distributed under the Apache 2.0 license. See the [LICENSE](https://github.com/paritytech/asset-transfer-api/blob/main/LICENSE) file. This source code comes with absolutely no warranty. Use at your own risk. - -## Zombienet Testing - -Zombienet is used to launch a complete network including a relay chain, and two parachains. It will create HRMP channels betweens the launched parachains allowing the testing environment to send XCM messages and transfer assets. - -### **Requirements**: - -**Zombienet Binary**: You can download the appropriate binary from the zombienet repository [here](https://github.com/paritytech/zombienet/releases). Ensure that it is in the root of this directory. Note: For macos users if permission is denied to run the binary you can `chmod 755 ` to allow permissions. - -**Test Network Binaries**: You will need the following binaries depending on whether you want to run a small or medium network: - -- polkadot: You can find the releases [here](https://github.com/paritytech/polkadot-sdk/releases). (Needed for small, or medium network) -- trappist-collator: This binary is compiled along with polkadot above. You can find it [here](https://github.com/paritytech/trappist). (Needed for medium network) -- polkadot-parachain (ie: cumulus): You can find the releases [here](https://github.com/paritytech/polkadot-sdk/releases). (Needed for small, or medium network) - -NOTES: - -- When it comes to picking a version for both `cumulus` and `polkadot` ensure they are the same. Cumulus will have an extra 0 at the end though. Ex: v0.9.37 (polkadot) -> v0.9.370 (cumulus) - -- You can retrieve the binaries via the release, or by compiling yourself. It's recommended to compile it yourself. - -Copy each binary that is necessary into the root `/bin` folder. - -### Running Zombienet - -From the root directory run `./ -p native spawn ./zombienet/.toml | tee zombienet.log` - -### Create an asset +## E2E Testing -From the root directory run `yarn start:zombienet-post-script`. You can run this right after running your zombienet network. +You can access the E2E tests and their documentation [here](./e2e-tests/). -## E2E Testing +## License -You can access the E2E tests and its documentation [here](./e2e-tests/). +The source code in this repository is distributed under the Apache 2.0 license. See the [LICENSE](https://github.com/paritytech/asset-transfer-api/blob/main/LICENSE) file. This source code comes with absolutely no warranty. Use at your own risk. diff --git a/e2e-tests/README.md b/e2e-tests/README.md index d5698d2a..5bbab6ff 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -1,40 +1,9 @@ ## E2E Tests -End-to-end tests that run on a zombienet testnet. +End-to-End tests that run using Chopsticks. -**NOTE: tested using polkadot v1.4.0** - -### Setup - -To setup the testing environment you need to first download the `polkadot`, `polkadot-execute-worker`, `polkadot-prepare-worker` and `polkadot-parachain` from the `polkadot-sdk` [release page](https://github.com/paritytech/polkadot-sdk/releases/latest), as well as the `trappist-node` from its [release page](https://github.com/paritytech/trappist/releases/latest), and place them in the `../zombienet/bin/` folder. - -You also need to have the latest `zombienet` executable in the `../zombienet/` folder, which you can download from [here](https://github.com/paritytech/zombienet/releases/latest). - -### Launching zombienet - -To launch the zombienet run the following commands: +To run the end-to-end tests run the command: ```bash -$ yarn build && yarn e2e:build +$ yarn test:e2e ``` - -Then run: - -```bash -$ yarn e2e:zombienet -``` - -And this will launch the zombienet using the config file located in the `../zombienet/` directory. Once it finished its setup, you can proceed to the following step. - -### Launching the tests - -For testing, we provide 4 options: - -- Testing liquidity tokens transfers with the command `yarn e2e:liquidity-assets`. -- Testing foreign assets transfers with the command `yarn e2e:foreign-assets`. -- Testing local transferss with the command `yarn e2e:local`. -- Testing assets transfers with the command `yarn e2e:assets`. - -Each of these commands will run the appropiate script to setup the basics, located in `../scripts/`. Wait for it to finish setting up the testing environment, and then go through the tests indicated in the `./tests/index.ts` file for the chosen option. - -After each testing suite has been completed, it's recommended to restart the zombienet before running another test suite. diff --git a/e2e-tests/balance.ts b/e2e-tests/balance.ts deleted file mode 100644 index 9edee8f1..00000000 --- a/e2e-tests/balance.ts +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import type { ApiPromise } from '@polkadot/api'; -import type { FrameSystemAccountInfo, PalletAssetsAssetAccount } from '@polkadot/types/lookup'; -import type { Option } from '@polkadot/types-codec'; - -/** - * Initial and final balances for a specific assetId, used by `balanceTracker` - * to validate the evolution of a particular account's balance - * - * @interface IBalance - * - * @property {[string, number][]} IBalance.initial Account's initial balance - * for the given assetIds - * @property {[string, number][]} IBalance.final Account's final balance for - * the given assetIds - */ -export interface IBalance { - initial: [string, number][]; - final: [string, number][]; -} - -/** - * Function to keep track of the evolution of the balances for specific assetIds - * for a given account, used to validate the correct processing of the tests' - * transactions. - * It queries the node for the appropiate pallet's balance for the given test - * suite, and stores it as either `initial`, if no previous value is stored, - * or `final`. Both properties consist of an array of tuples containing an assetId - * and its balance for the account for the moment the value was queried, either - * before or after running the test. - * - * @param api api instance - * @param test name of the test currently being ran - * @param address address of the account whose balance is being queried - * @param assetIds Ids of the assets being queried - * @param balance initial balance for the account queried - * @returns instance of IBalance containing the initial and optionally the final - * balance of the account queried - */ -export const balanceTracker = async ( - api: ApiPromise, - test: string, - address: string, - assetIds: string[], - balance?: IBalance, -): Promise => { - let balances: IBalance = { initial: [], final: [] }; - let accountInfo: FrameSystemAccountInfo | Option; - switch (test) { - case '--foreign-assets': - if (!balance) { - for (const assetId of assetIds) { - accountInfo = (await api.query.foreignAssets.account(assetId, address)) as Option; - if (accountInfo.valueOf() === null) { - balances.initial.push([assetId, 0]); - } else { - balances.initial.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - } else { - balances = balance; - for (const assetId of assetIds) { - accountInfo = (await api.query.foreignAssets.account(assetId, address)) as Option; - balances.final.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - return balances; - case '--liquidity-assets': - if (!balance) { - for (const assetId of assetIds) { - accountInfo = await api.query.poolAssets.account(assetId, address); - if (accountInfo.isNone) { - balances.initial.push([assetId, 0]); - } else { - balances.initial.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - } else { - balances = balance; - for (const assetId of assetIds) { - accountInfo = await api.query.poolAssets.account(assetId, address); - balances.final.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - return balances; - case '--local': - if (!balance) { - accountInfo = await api.query.system.account(address); - if (accountInfo === null) { - balances.initial.push(['0', 0]); - } else { - balances.initial.push(['0', Number(accountInfo.data.free)]); - } - } else { - balances = balance; - accountInfo = await api.query.system.account(address); - balances.final.push(['0', Number(accountInfo.data.free)]); - } - return balances; - case '--assets': - if (!balance) { - for (const assetId of assetIds) { - accountInfo = await api.query.assets.account(assetId, address); - if (accountInfo.isNone) { - balances.initial.push([assetId, 0]); - } else { - balances.initial.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - } else { - balances = balance; - for (const assetId of assetIds) { - accountInfo = await api.query.assets.account(assetId, address); - balances.final.push([assetId, accountInfo.unwrap().balance.toBn().toNumber()]); - } - } - return balances; - default: - if (!balance) { - for (const assetId of assetIds) { - accountInfo = await api.query.system.account(address); - if (accountInfo) { - balances.initial.push([assetId, accountInfo.data.free.toBn().toNumber()]); - } else { - balances.initial.push([assetId, 0]); - } - } - } else { - balances = balance; - for (const assetId of assetIds) { - accountInfo = await api.query.system.account(address); - balances.final.push([assetId, accountInfo.data.free.toBn().toNumber()]); - } - } - return balances; - } -}; diff --git a/e2e-tests/consts.ts b/e2e-tests/consts.ts deleted file mode 100644 index bfab60d8..00000000 --- a/e2e-tests/consts.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -export const KUSAMA_ASSET_HUB_WS_URL = 'ws://127.0.0.1:9911'; -export const PASEO_ALICE_WS_URL = 'ws://127.0.0.1:9900'; -export const MUSE_WS_URL = 'ws://127.0.0.1:9921'; - -export const BOB_ADDR = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty'; -export const FERDE_ADDR = '5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL'; - -export const EXTRINSIC_VERSION = 4; diff --git a/e2e-tests/executor.ts b/e2e-tests/executor.ts deleted file mode 100644 index a997f655..00000000 --- a/e2e-tests/executor.ts +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { Keyring } from '@polkadot/keyring'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; - -import { delay } from '../scripts/util'; -import { constructApiPromise } from '../src'; -import { balanceTracker, IBalance } from './balance'; -import { KUSAMA_ASSET_HUB_WS_URL, MUSE_WS_URL, PASEO_ALICE_WS_URL } from './consts'; -import { startProgressBar, startTestLogger, terminateProgressBar, testResultLogger, updateProgressBar } from './logger'; -import { assetTests, foreignAssetsTests, IndividualTest, liquidPoolsTests, localTests, tests } from './tests'; -import { verification } from './verification'; - -const executor = async (testCase: string) => { - let originWsUrl = ''; - let destWsUrl = ''; - let testData: IndividualTest[] = []; - - await cryptoWaitReady(); - - const keyring = new Keyring({ type: 'sr25519' }); - let n: { [K: string]: Function } = {}; - - switch (testCase) { - case '--foreign-assets': - testData = tests.foreignAssets; - n = foreignAssetsTests; - break; - case '--liquidity-assets': - testData = tests.liquidPools; - n = liquidPoolsTests; - break; - case '--local': - testData = tests.local; - n = localTests; - break; - case '--assets': - testData = tests.assets; - n = assetTests; - break; - } - - let counter: number = 0; - - startTestLogger(testCase); - - const progressBar = startProgressBar(testData, testCase); - - const results: [string, string, string, boolean][] = []; - - for (const t of testData) { - const originChainId: string = t.args[0]; - const destChainId: string = t.args[1]; - const originAddr: string = t.args[2]; - const destAddr: string = t.args[3]; - const assetIds: string[] = t.args[4].slice(1, -1).split(','); - const amounts: string[] = t.args[5].slice(1, -1).split(','); - const opts: object = JSON.parse(t.args[6], (key: string, value: string) => { - return key === 'paysWithFeeOrigin' ? JSON.stringify(value) : value; - }) as object; - let chainName: string = ''; - - switch (originChainId) { - case '0': - originWsUrl = PASEO_ALICE_WS_URL; - chainName = 'Paseo'; - break; - case '1000': - originWsUrl = KUSAMA_ASSET_HUB_WS_URL; - chainName = 'Kusama Asset Hub'; - break; - case '1836': - originWsUrl = MUSE_WS_URL; - chainName = 'Muse Testnet'; - break; - } - if (originChainId == destChainId) { - destWsUrl = originWsUrl; - } else { - switch (destChainId) { - case '0': - destWsUrl = PASEO_ALICE_WS_URL; - chainName = 'Paseo'; - break; - case '1000': - destWsUrl = KUSAMA_ASSET_HUB_WS_URL; - chainName = 'Kusama Asset Hub'; - break; - case '1836': - destWsUrl = MUSE_WS_URL; - chainName = 'Trappist'; - break; - } - } - - const { api, specName, safeXcmVersion } = await constructApiPromise(originWsUrl); - - await api.isReady; - - const originApi = api; - const destinationApi = - originChainId == destChainId - ? originApi - : await ApiPromise.create({ - provider: new WsProvider(destWsUrl), - noInitWarn: true, - }); - - await destinationApi.isReady; - const destInitialBalance: IBalance = await balanceTracker(destinationApi, testCase, destAddr, assetIds); - const originKeyring = keyring.addFromUri(originAddr); - - //eslint-disable-next-line @typescript-eslint/no-unsafe-call - await n[t.test](originKeyring, destChainId, destAddr, assetIds, amounts, opts, api, specName, safeXcmVersion); - - await delay(24000); - - const destFinalBalance: IBalance = await balanceTracker( - destinationApi, - testCase, - destAddr, - assetIds, - destInitialBalance, - ); - - const verificationAssetIds: string[] = t.verification[0].slice(1, -1).split(','); - const verificationAmounts: string[] = t.verification[1].slice(1, -1).split(','); - - const correctlyReceived = verification(verificationAssetIds, verificationAmounts, destFinalBalance); - - await originApi.disconnect(); - await destinationApi.disconnect(); - - counter += 1; - - updateProgressBar(counter, progressBar); - - for (let i = 0; i < assetIds.length; i++) { - results.push([t.test, assetIds[i], chainName, correctlyReceived[i][1]]); - } - } - - for (let i = 0; i < results.length; i++) { - testResultLogger(results[i][0], results[i][1], results[i][2], results[i][3]); - } - - terminateProgressBar(progressBar, testCase); -}; - -executor(process.argv[2]) - .catch((err) => console.error(err)) - .finally(() => process.exit()); diff --git a/e2e-tests/logger.ts b/e2e-tests/logger.ts deleted file mode 100644 index 4076d53d..00000000 --- a/e2e-tests/logger.ts +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import colors from 'ansi-colors'; -import chalk from 'chalk'; -import * as cliProgress from 'cli-progress'; -import { IndividualTest } from 'tests'; - -/** - * - * @param testCase a string containing the test option selected - * @returns a prettified version of the testCase - */ -const defineTest = (testCase: string): string => { - let test: string = ''; - - switch (testCase) { - case '--foreign-assets': - test = 'Foreign Assets Transfers'; - break; - case '--liquidity-assets': - test = 'Liqudity Tokens Transfers'; - break; - case '--local': - test = 'Native Token Transfers'; - break; - case '--assets': - test = 'Local Assets Transfers'; - break; - } - return test; -}; - -/** - * Calls defineTest and prints a message signaling the begining of the tests - * @param testCase a string containing the test option selected - */ -export const startTestLogger = (testCase: string) => { - const test = defineTest(testCase); - - console.log(chalk.yellow(`Initializing tests for ${test}\n`)); -}; - -/** - * This creates and starts an instance of cliProgress containing a SingleBar to - * display the test suite's progress - * - * @param testData an array containing the individual tests for the test suite - * selected - * @param testCase the test suite selected - * @returns an instance of the cliProgress that will be used to track the progress - * of the tests - */ -export const startProgressBar = (testData: IndividualTest[], testCase: string): cliProgress.SingleBar => { - const test = defineTest(testCase); - - const coverage: number = testData.length; - - const progressBar = new cliProgress.SingleBar({ - format: - `\n${test} Test Suite Progress |` + colors.cyan('{bar}') + '| {percentage}% || {value}/{total} tests covered \n', - barCompleteChar: '\u2588', - barIncompleteChar: '\u2591', - hideCursor: true, - }); - - progressBar.start(coverage, 0); - - return progressBar; -}; - -/** - * Clears the progress bar in place and prints an updated version - * @param counter current test number - * @param progressBar instance of the cliProgress - */ -export const updateProgressBar = (counter: number, progressBar: cliProgress.SingleBar) => { - process.stdout.moveCursor(0, -2); - - process.stdout.clearLine(0); - - progressBar.increment(counter); -}; - -/** - * Terminates the cliProgess instance. It's called after the test suite is over - * @param progressBar instance of cliProgress to be terminated - * @param testCase - */ -export const terminateProgressBar = (progressBar: cliProgress.SingleBar, testCase: string) => { - const test = defineTest(testCase); - console.log(chalk.yellow(`Test Suite for ${test} completed.\n`)); - - progressBar.stop(); - console.log('\n'); -}; - -/** - * - * @param testName current test's name - * @param assetId Id of the asset tested against - * @param chainName Name of the chain against the test ran - * @param passed whether the test passed or failed - */ -export const testResultLogger = (testName: string, assetId: string, chainName: string, passed: boolean) => { - const tokenId = assetId === '' ? 'native asset' : `asset ${assetId}`; - if (passed) { - console.log(chalk.green(`Test ${testName} passed for ${chainName}'s ${tokenId} \u2705\n`)); - } else { - console.log(chalk.red(`Test ${testName} failed for ${chainName}'s ${tokenId} \u274E\n`)); - } -}; diff --git a/e2e-tests/moonbeam.hydration.spec.ts b/e2e-tests/moonbeam.hydration.spec.ts new file mode 100644 index 00000000..eebef7db --- /dev/null +++ b/e2e-tests/moonbeam.hydration.spec.ts @@ -0,0 +1,118 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { AccountData } from '@polkadot/types/interfaces'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Moonbeam <> Hydration', () => { + let hydration: NetworkContext; + let moonbeam: NetworkContext; + const hydrationRecipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; + const hdxMoonbeamAssetID = '69606720909260275826784788104880799692'; + + const { alice, alith } = testingPairs(); + + beforeEach(async () => { + const { hydration1, moonbeam1 } = await setupNetworks({ + hydration1: { + endpoint: 'wss://rpc.hydradx.cloud', + db: './db.sqlite', + port: 8000, + }, + moonbeam1: { + endpoint: 'wss://moonbeam-rpc.dwellir.com', + db: './db.sqlite', + port: 8001, + }, + }); + + hydration = hydration1; + moonbeam = moonbeam1; + }, 100000); + + afterEach(async () => { + await moonbeam.teardown(); + await hydration.teardown(); + }, 100000); + + test('Transfer GLMR from Moonbeam to Hydration', async () => { + await moonbeam.dev.setStorage({ + System: { + Account: [ + [[alith.address], { providers: 1, data: { free: '100000000000000000000000' } }], // GLMR + ], + }, + }); + + const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', 4); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + hydrationRecipientAddress, + ['GLMR'], + ['10000000000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: alith.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await moonbeam.api.tx(extrinsic).signAndSend(alith); + await moonbeam.dev.newBlock(); + + await hydration.dev.newBlock(); + + const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + + expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( + (recipientInitialGLMRBalance as AccountData).free.toBigInt(), + ); + }, 100000); + + test('Transfer HDX from Hydration to Moonbeam', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: '50000000000000000000000000' } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + ], + }, + }); + + const recipientInitialHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); + const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await moonbeam.dev.newBlock(); + + const recipientUpdatedHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientUpdatedHDXBalance.balance.toBigInt()).toBeGreaterThan( + recipientInitialHDXBalance.balance.toBigInt(), + ); + }, 100000); +}); diff --git a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts new file mode 100644 index 00000000..9ddf9c64 --- /dev/null +++ b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts @@ -0,0 +1,88 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Polkadot AssetHub <> Ethereum', () => { + const snowbridgeWETHLocation = { + parents: 2, + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: 1 } } }, + { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, + ], + }, + }; + let polkadotBridgeHub: NetworkContext; + let polkadotAssetHub: NetworkContext; + + const { alice, alith } = testingPairs(); + + beforeEach(async () => { + const { polkadotBridgeHub1, polkadotAssetHub1 } = await setupNetworks({ + polkadotBridgeHub1: { + endpoint: 'wss://bridge-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8003, + }, + polkadotAssetHub1: { + endpoint: 'wss://asset-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8004, + }, + }); + + polkadotBridgeHub = polkadotBridgeHub1; + polkadotAssetHub = polkadotAssetHub1; + }, 100000); + + afterEach(async () => { + await polkadotBridgeHub.teardown(); + await polkadotAssetHub.teardown(); + }, 100000); + + test('Snowbridge WETH From AssetHub to Ethereum', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + alith.address, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await polkadotBridgeHub.dev.newBlock(); + + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; + expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); + + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; + expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); + }, 5000000); +}); diff --git a/e2e-tests/polkadotAssetHub.hydration.spec.ts b/e2e-tests/polkadotAssetHub.hydration.spec.ts new file mode 100644 index 00000000..bf30c0da --- /dev/null +++ b/e2e-tests/polkadotAssetHub.hydration.spec.ts @@ -0,0 +1,355 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { AccountData } from '@polkadot/types/interfaces'; +import { PalletAssetsAssetAccount } from '@polkadot/types/lookup'; +import { Option } from '@polkadot/types-codec'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Polkadot AssetHub <> Hydration', () => { + let hydration: NetworkContext; + let polkadotAssetHub: NetworkContext; + + const { alice } = testingPairs(); + const recipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; + const snowbridgeWETHLocation = { + parents: 2, + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: 1 } } }, + { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, + ], + }, + }; + + beforeEach(async () => { + const { hydration1, polkadotAssetHub1 } = await setupNetworks({ + hydration1: { + endpoint: 'wss://hydration.ibp.network', + db: './db.sqlite', + port: 8006, + }, + polkadotAssetHub1: { + endpoint: 'wss://polkadot-asset-hub-rpc.polkadot.io', + db: './db.sqlite', + port: 8007, + }, + }); + + hydration = hydration1; + polkadotAssetHub = polkadotAssetHub1; + }, 100000); + + afterEach(async () => { + await polkadotAssetHub.teardown(); + await hydration.teardown(); + }, 100000); + + test('AssetHub Local DOT Transfer', async () => { + await polkadotAssetHub.api.isReady; + + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['dot'], ['1000000000000'], { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(1000000); + }, 50000); + + test('AssetHub Local Pool Asset Transfer', async () => { + await polkadotAssetHub.api.isReady; + + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + [[recipientAddress], { providers: 1, data: { free: 2 * 1e12 } }], // DOT + ], + }, + PoolAssets: { + Account: [[[30, alice.address], { balance: 75000000000000 }]], + }, + }); + + const aliceBalance = (await polkadotAssetHub.api.query.poolAssets.account(30, alice.address)).unwrapOrDefault(); + expect(aliceBalance.balance.toNumber()).toEqual(75000000000000); + + const recipientsInitialPoolAssetBalance = ( + await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) + ).unwrapOrDefault(); + expect(recipientsInitialPoolAssetBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['30'], ['10'], { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + transferLiquidToken: true, + }); + + console.log('payload', JSON.stringify(tx)); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedPoolAssetBalance = ( + await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) + ).unwrapOrDefault(); + expect(recipientsUpdatedPoolAssetBalance.balance.toNumber()).toBeGreaterThan( + recipientsInitialPoolAssetBalance.balance.toNumber(), + ); + }, 50000); + + test('Hydration Local HDX Transfer', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + ], + }, + }); + + const recipientInitialHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); + expect((recipientInitialHDXBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + ['0'], // HDX currency ID + ['1000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + const recipientUpdatedHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); + expect((recipientUpdatedHDXBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientInitialHDXBalance as AccountData).free.toNumber(), + ); + }, 70000); + + test('Transfer DOT From Hydration to AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 5], { free: 1000 * 1e12 }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); + expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); + }, 70000); + + test('Transfer DOT From AssetHub to Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialDOTBalance as AccountData).free.toNumber(), + ); + }, 50000); + + test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 1000189], { free: '50000000000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const recipientsInitialWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, + }, + }, + }); + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['WETH.snow'], + ['25000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + + expect(JSON.stringify(recipientsUpdatedWETHBalance)).not.toEqual('null'); + expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(0); + }, 50000); + + test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: alice.address, + paysWithFeeDest: + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}', + assetTransferType: 'LocalReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'LocalReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), + ); + }, 50000); +}); diff --git a/e2e-tests/tests.sh b/e2e-tests/tests.sh deleted file mode 100755 index d53cd824..00000000 --- a/e2e-tests/tests.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -test=$1 -yarn run build:e2e -if [ $test = '--assets' ]; then - script=post -elif [ $test = '--local' ]; then - script=post -elif [ $test = '--liquidity-assets' ]; then - script=liquidity-assets -elif [ $test = '--foreign-assets' ]; then - script=foreign-assets -fi - -yarn run start:zombienet-$script-script - -sleep 24 - -node ./e2e-tests/build/e2e-tests/executor.js $test diff --git a/e2e-tests/tests/assets.ts b/e2e-tests/tests/assets.ts deleted file mode 100644 index e525f4a8..00000000 --- a/e2e-tests/tests/assets.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import { ApiPromise } from '@polkadot/api'; -import { KeyringPair } from '@polkadot/keyring/types'; - -import { AssetTransferApi } from '../../src'; -import { TxResult } from '../../src/types'; - -const createAssetApi = (api: ApiPromise, specName: string, safeXcmVersion: number): AssetTransferApi => { - const injectedRegistry = { - paseo: { - '3369': { - tokens: ['MUSE'], - assetsInfo: {}, - foreignAssetsInfo: {}, - specName: 'muse', - poolPairsInfo: {}, - }, - }, - }; - - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { injectedRegistry }); - - return assetApi; -}; - -const createLocalSystemAssetsTransferTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: object, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: localTransferInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createPayFeesTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: object, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: localTransferInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -export const assetTests: { [K: string]: Function } = { - createLocalSystemAssetsTransferTransaction, - createPayFeesTransaction, -}; diff --git a/e2e-tests/tests/foreignAssets.ts b/e2e-tests/tests/foreignAssets.ts deleted file mode 100644 index c7d2ac97..00000000 --- a/e2e-tests/tests/foreignAssets.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import { ApiPromise } from '@polkadot/api'; -import { KeyringPair } from '@polkadot/keyring/types'; - -import { AssetTransferApi } from '../../src'; -import { TxResult } from '../../src/types'; - -const createAssetApi = (api: ApiPromise, specName: string, safeXcmVersion: number): AssetTransferApi => { - const injectedRegistry = { - paseo: { - '3369': { - tokens: ['MUSE'], - assetsInfo: {}, - foreignAssetsInfo: {}, - specName: 'muse', - poolPairsInfo: {}, - }, - }, - }; - - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { injectedRegistry }); - - return assetApi; -}; - -const createForeignTransferTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: object, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: localTransferInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createLocalForeignTransferTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: object, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: localTransferInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -export const foreignAssetsTests: { [K: string]: Function } = { - createForeignTransferTransaction, - createLocalForeignTransferTransaction, -}; diff --git a/e2e-tests/tests/index.ts b/e2e-tests/tests/index.ts deleted file mode 100644 index 14f62944..00000000 --- a/e2e-tests/tests/index.ts +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -export { assetTests } from './assets'; -export { foreignAssetsTests } from './foreignAssets'; -export { liquidPoolsTests } from './liquidPools'; -export { localTests } from './local'; -import { BOB_ADDR, FERDE_ADDR } from '../consts'; - -export interface IndividualTest { - test: string; - args: string[]; - verification: string[]; -} - -export interface TestGroups { - foreignAssets: IndividualTest[]; - liquidPools: IndividualTest[]; - assets: IndividualTest[]; - local: IndividualTest[]; -} - -export const tests: TestGroups = { - foreignAssets: [ - { - test: 'createForeignTransferTransaction', - args: [ - '1000', - '3369', - '//Alice', - BOB_ADDR, - '[{ "parents": "1", "interior": { "X2": [{ "Parachain": "3369" }, { "GeneralIndex": "0" }]}}]', - '[200000000]', - '{ "format": "payload", "xcmVersion": 3, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }', - ], - verification: [ - '[{ "parents": "1", "interior": { "X2": [{ "Parachain": "3369" }, { "GeneralIndex": "0" }]}}]', - '[200000000]', - ], - }, - { - test: 'createLocalForeignTransferTransaction', - args: [ - '1000', - '1000', - '//Alice', - FERDE_ADDR, - '[{ "parents": "1", "interior": { "X2": [{ "Parachain": "3369" }, { "GeneralIndex": "0" }]}}]', - '[200000000000]', - '{ "format": "payload", "xcmVersion": 3, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }', - ], - verification: [ - '[{ "parents": "1", "interior": { "X2": [{ "Parachain": "3369" }, { "GeneralIndex": "0" }]}}]', - '[200000000000]', - ], - }, - ], - liquidPools: [ - { - test: 'createLocalTransferTransaction', - args: [ - '1000', - '1000', - '//Alice', - BOB_ADDR, - '[0]', - '[20000]', - '{ "format": "payload", "keepAlive": true, "transferLiquidToken": true, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }', - ], - verification: ['[0]', '[20000]'], - }, - { - test: 'createPayFeesTransaction', - args: [ - '1000', - '1000', - '//Bob', - FERDE_ADDR, - '[0]', - '[3000000]', - '{ "format": "payload", "keepAlive": true, "transferLiquidToken": true, "paysWithFeeOrigin": { "parents": "0", "interior": { "X2": [{"PalletInstance": "50"}, { "GeneralIndex": "1" }]}}, "sendersAddr": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" }', - ], - verification: ['[0]', '[3000000]'], - }, - ], - local: [ - { - test: 'createLocalTransferTransaction', - args: [ - '1000', - '1000', - '//Alice', - BOB_ADDR, - '[]', - '[100000000000]', - '{ "format": "payload", "keepAlive": true, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }', - ], - verification: ['[]', '[100000000000]'], - }, - { - test: 'createLocalTransferTransactionWithFees', - args: [ - '0', - '0', - '//Alice', - BOB_ADDR, - '[]', - '[100000000000000000]', - '{ "format": "payload", "keepAlive": true, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", "paysWithFeeOrigin": { "parents": "0", "interior": { "X2": [{"PalletInstance": "50"}, { "GeneralIndex": "1" }]}} }', - ], - verification: ['[]', '[10000000000000]'], - }, - { - test: 'createLimitedNativeTransferToRelay', - args: [ - '1000', - '0', - '//Alice', - BOB_ADDR, - '[]', - '[1000000000000000]', - '{ "format": "payload", "keepAlive": true, "xcmVersion": 3, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", "paysWithFeeOrigin": { "parents": "0", "interior": { "X2": [{"PalletInstance": "50"}, { "GeneralIndex": "1" }]}} }', - ], - verification: ['[]', '[1000000000000000]'], - }, - { - test: 'createLimitedNativeTransferToSystem', - args: [ - '0', - '1000', - '//Bob', - FERDE_ADDR, - '[]', - '[210000000000000]', - '{ "format": "payload", "keepAlive": true, "xcmVersion": 3, "weightLimit": {"refTime": "10000" , "proofSize": "3000"}, "sendersAddr": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", "paysWithFeeOrigin": { "parents": "0", "interior": { "X2": [{"PalletInstance": "50"}, { "GeneralIndex": "1" }]}} }', - ], - verification: ['[]', '[210000000000000]'], - }, - ], - assets: [ - { - test: 'createLocalSystemAssetsTransferTransaction', - args: [ - '1000', - '1000', - '//Alice', - BOB_ADDR, - '[1]', - '[3000000000000]', - '{ "format": "payload", "keepAlive": true, "sendersAddr": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }', - ], - verification: ['[1]', '[3000000000000]'], - }, - { - test: 'createPayFeesTransaction', - args: [ - '1000', - '1000', - '//Bob', - FERDE_ADDR, - '[1]', - '[200000000000]', - '{ "format": "payload", "keepAlive": false, "sendersAddr": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", "paysWithFeeOrigin": { "parents": "0", "interior": { "X2": [{"PalletInstance": "50"}, { "GeneralIndex": "1" }]}} }', - ], - verification: ['[1]', '[200000000000]'], - }, - ], -}; diff --git a/e2e-tests/tests/liquidPools.ts b/e2e-tests/tests/liquidPools.ts deleted file mode 100644 index d34b04ba..00000000 --- a/e2e-tests/tests/liquidPools.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import { ApiPromise } from '@polkadot/api'; -import { KeyringPair } from '@polkadot/keyring/types'; - -import { AssetTransferApi } from '../../src'; -import { TxResult } from '../../src/types'; - -const createAssetApi = (api: ApiPromise, specName: string, safeXcmVersion: number): AssetTransferApi => { - const injectedRegistry = { - paseo: { - '3369': { - tokens: ['MUSE'], - assetsInfo: {}, - foreignAssetsInfo: {}, - specName: 'muse', - poolPairsInfo: {}, - }, - }, - }; - - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { injectedRegistry }); - - return assetApi; -}; - -const createLocalTransferTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: object, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: localTransferInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createPayFeesTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: {}, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let transferWithFeesInfo: TxResult<'payload'>; - try { - transferWithFeesInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const extrinsic = api.registry.createType('Extrinsic', { method: transferWithFeesInfo.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -export const liquidPoolsTests: { [K: string]: Function } = { createLocalTransferTransaction, createPayFeesTransaction }; diff --git a/e2e-tests/tests/local.ts b/e2e-tests/tests/local.ts deleted file mode 100644 index 93124a18..00000000 --- a/e2e-tests/tests/local.ts +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import { ApiPromise } from '@polkadot/api'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { EXTRINSIC_VERSION } from 'consts'; - -import { AssetTransferApi } from '../../src'; -import { TxResult } from '../../src/types'; - -const createAssetApi = (api: ApiPromise, specName: string, safeXcmVersion: number): AssetTransferApi => { - const injectedRegistry = { - paseo: { - '3369': { - tokens: ['MUSE'], - assetsInfo: {}, - foreignAssetsInfo: {}, - specName: 'muse', - poolPairsInfo: {}, - }, - }, - }; - - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { injectedRegistry }); - - return assetApi; -}; - -const createLocalTransferTransaction = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: {}, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const payload = api.createType('ExtrinsicPayload', localTransferInfo.tx, { - version: EXTRINSIC_VERSION, - }); - - const extrinsic = api.registry.createType('Extrinsic', { method: payload.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createLocalTransferTransactionWithFees = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: {}, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const payload = api.createType('ExtrinsicPayload', localTransferInfo.tx, { - version: EXTRINSIC_VERSION, - }); - - const extrinsic = api.registry.createType('Extrinsic', { method: payload.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createLimitedNativeTransferToRelay = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: {}, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const payload = api.createType('ExtrinsicPayload', localTransferInfo.tx, { - version: EXTRINSIC_VERSION, - }); - - const extrinsic = api.registry.createType('Extrinsic', { method: payload.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -const createLimitedNativeTransferToSystem = async ( - origin: KeyringPair, - destChainId: string, - destAddr: string, - assetIds: string[], - amounts: string[], - opts: {}, - api: ApiPromise, - specName: string, - safeXcmVersion: number, -) => { - const assetApi = createAssetApi(api, specName, safeXcmVersion); - - let localTransferInfo: TxResult<'payload'>; - try { - localTransferInfo = await assetApi.createTransferTransaction(destChainId, destAddr, assetIds, amounts, opts); - - const payload = api.createType('ExtrinsicPayload', localTransferInfo.tx, { - version: EXTRINSIC_VERSION, - }); - - const extrinsic = api.registry.createType('Extrinsic', { method: payload.method }, { version: 4 }); - - await api.tx(extrinsic).signAndSend(origin); - } catch (e) { - console.error(e); - throw Error(e as string); - } -}; - -export const localTests: { [K: string]: Function } = { - createLocalTransferTransaction, - createLocalTransferTransactionWithFees, - createLimitedNativeTransferToRelay, - createLimitedNativeTransferToSystem, -}; diff --git a/e2e-tests/tsconfig.json b/e2e-tests/tsconfig.json index afbdecef..e4500cda 100644 --- a/e2e-tests/tsconfig.json +++ b/e2e-tests/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "../node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "build", - "suppressImplicitAnyIndexErrors": true, "ignoreDeprecations": "5.0", "resolveJsonModule": true } diff --git a/e2e-tests/verification.ts b/e2e-tests/verification.ts deleted file mode 100644 index 99a88a4e..00000000 --- a/e2e-tests/verification.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. -import { IBalance } from './balance'; - -/** - * This function verifies whether the test transaction impacted the destination's - * account balance - * @param assetIds assets to be queried - * @param amounts expected final balance - * @param destBalance stored queried balance - * @returns whetere the balance was modified as expected or not - */ -export const verification = (assetIds: string[], amounts: string[], destBalance: IBalance) => { - const destInitialBalance: [string, number][] = destBalance.initial; - const destFinalBalance: [string, number][] = destBalance.final; - const correctlyReceived: [string, boolean][] = []; - - let check = true; - for (let i = 0; i < assetIds.length; i++) { - check = destInitialBalance[i][1] + Number(amounts[i]) == destFinalBalance[i][1]; - correctlyReceived.push([destInitialBalance[i][0], check]); - } - - return correctlyReceived; -}; diff --git a/e2e-tests/zombienet.sh b/e2e-tests/zombienet.sh deleted file mode 100755 index 2f7831df..00000000 --- a/e2e-tests/zombienet.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -if [ $(uname) = 'Darwin' ]; then - os='zombienet-macOS' -elif [ $(uname) = 'Linux' ]; then - if [ $(uname -m) = 'x86_64' ]; then - os='zombienet-linux-x64' - elif [ $(uname -m) = 'arm64' ]; then - os='zombienet-linux-arm64' - fi -fi - -sed -i 's="./zombienet/zombienet": .*"="./zombienet/zombienet": "'$os' -p native spawn ./zombienet/medium-network.toml"=' package.json - -yarn run zombienet diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 5a1d588c..c941f007 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -3,7 +3,10 @@ "compilerOptions": { "baseUrl": ".", "outDir": "build", +<<<<<<< HEAD "suppressImplicitAnyIndexErrors": true, +======= +>>>>>>> 65a65cf (update e2e tests to use chopsticks e2e) "resolveJsonModule": true, "esModuleInterop": true, "ignoreDeprecations": "5.0" diff --git a/package.json b/package.json index e2e75292..84f2ce9e 100644 --- a/package.json +++ b/package.json @@ -9,20 +9,14 @@ "build:examples": "substrate-exec-rimraf examples/build/ && substrate-exec-tsc --project examples/tsconfig.json", "build:e2e": "substrate-exec-rimraf e2e-tests/build/ && substrate-exec-tsc --project e2e-tests/tsconfig.json", "start": "node ./lib/index.js", - "start:zombienet-post-script": "yarn build:scripts && node ./scripts/build/testNetworkSetup.js", - "start:zombienet-foreign-assets-script": "yarn build:scripts && node ./scripts/build/testNetworkForeignAssets.js", - "start:zombienet-liquidity-assets-script": "yarn build:scripts && node ./scripts/build/testNetworkLiquidAssets.js", - "zombienet": "./zombienet/zombienet-linux-x64 -p native spawn ./zombienet/medium-network.toml", - "e2e:zombienet": "./e2e-tests/zombienet.sh", - "e2e:assets": "./e2e-tests/tests.sh --assets", - "e2e:local": "./e2e-tests/tests.sh --local", - "e2e:liquidity-assets": "./e2e-tests/tests.sh --liquidity-assets", - "e2e:foreign-assets": "./e2e-tests/tests.sh --foreign-assets", "lint": "substrate-dev-run-lint", "lint:fix": "substrate-dev-run-lint --fix", - "test": "NODE_ENV=test substrate-exec-jest --detectOpenHandles", "docs": "typedoc", - "deploy": "yarn build && npm publish" + "deploy": "yarn build && npm publish", + "test:e2e": "vitest --project e2e", + "test:integration": "vitest --project integration", + "test:unit": "vitest --project unit", + "test": "vitest" }, "engines": { "node": ">=18.14" @@ -45,17 +39,24 @@ "ansi-colors": "^4.1.3", "chalk": "5.3.0", "cli-progress": "^3.12.0", - "typedoc": "^0.27.2", + "typedoc": "^0.26.10", "typedoc-plugin-missing-exports": "^3.0.0", - "typedoc-theme-hierarchy": "^5.0.3" + "typedoc-theme-hierarchy": "^5.0.3", + "vitest": "^2.1.8" }, "dependencies": { - "@polkadot/api": "15.0.1", - "@polkadot/api-augment": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "13.2.3", - "@polkadot/util-crypto": "13.2.3", + "@acala-network/chopsticks-core": "^1.0.1", + "@acala-network/chopsticks-testing": "^1.0.1", + "@polkadot/api": "^14.2.3", + "@polkadot/api-augment": "^14.2.3", + "@polkadot/types": "^14.2.3", + "@polkadot/types-codec": "^14.2.3", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", "@substrate/asset-transfer-api-registry": "^0.2.24" + }, + "resolutions": { + "@polkadot/util-crypto": "13.2.2", + "@polkadot/util": "13.2.2" } } diff --git a/scripts/consts.ts b/scripts/consts.ts deleted file mode 100644 index 0cff5b9a..00000000 --- a/scripts/consts.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -export const KUSAMA_ASSET_HUB_WS_URL = 'ws://127.0.0.1:9911'; -export const PASEO_ALICE_WS_URL = 'ws://127.0.0.1:9900'; -export const MUSE_WS_URL = 'ws://127.0.0.1:9921'; diff --git a/scripts/testNetworkForeignAssets.ts b/scripts/testNetworkForeignAssets.ts deleted file mode 100644 index db507716..00000000 --- a/scripts/testNetworkForeignAssets.ts +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { Keyring } from '@polkadot/keyring'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; -import chalk from 'chalk'; - -import { KUSAMA_ASSET_HUB_WS_URL, MUSE_WS_URL, PASEO_ALICE_WS_URL } from './consts'; -import { awaitBlockProduction, awaitEpochChange, delay, logWithDate } from './util'; - -const fAssetSetMetadataCall = (assetHubApi: ApiPromise): `0x${string}` => { - const trappistMultilocation = { - parents: 1, - interior: { - X1: { - parachain: 3369, - }, - }, - }; - - const setMetadataTx = assetHubApi.tx.foreignAssets.setMetadata( - trappistMultilocation, - 'Asset Hub Paseo Muse', - 'Muse', - 12, - ); - - const hexCall = assetHubApi.registry - .createType('Call', { - callIndex: setMetadataTx.callIndex, - args: setMetadataTx.args, - }) - .toHex(); - - return hexCall; -}; - -const fAssetCreateCall = (assetHubApi: ApiPromise): `0x${string}` => { - const trappistMultilocation = { - parents: 1, - interior: { - X1: { - parachain: 3369, - }, - }, - }; - - const createTx = assetHubApi.tx.foreignAssets.create( - trappistMultilocation, - '5Eg2fnsjAAr8RGZfa8Sy5mYFPabA9ZLNGYECCKXPD6xnK6D2', // Sibling 3369 -> ParaId - '100000000000', - ); - - const hexCall = assetHubApi.registry - .createType('Call', { - callIndex: createTx.callIndex, - args: createTx.args, - }) - .toHex(); - - return hexCall; -}; - -const sudoCallWrapper = (trappistApi: ApiPromise, call: `0x${string}`) => { - // Double encode the call - const xcmDoubleEncoded = trappistApi.createType('XcmDoubleEncoded', { - encoded: call, - }); - - const xcmOriginType = trappistApi.createType('XcmOriginKind', 'Xcm'); - const xcmDestMultiLocation = { - V3: { - parents: 1, - interior: { - X1: { - parachain: 1000, - }, - }, - }, - }; - const xcmMessage = { - V3: [ - { - withdrawAsset: [ - { - id: { - concrete: { - parents: 1, - interior: { Here: '' }, - }, - }, - fun: { - fungible: 100000000000, - }, - }, - ], - }, - { - buyExecution: { - fees: { - id: { - concrete: { - parents: 1, - interior: { Here: '' }, - }, - }, - fun: { - fungible: 100000000000, - }, - }, - weightLimit: { Unlimited: '' }, - }, - }, - { - transact: { - originKind: xcmOriginType, - requireWeightAtMost: { - refTime: 8000000000, - proofSize: 65536, - }, - call: xcmDoubleEncoded, - }, - }, - { - refundSurplus: true, - }, - { - depositAsset: { - assets: { - wild: { - All: '', - }, - }, - beneficiary: { - parents: 0, - interior: { - x1: { - AccountId32: { - id: '0x7369626c2c070000000000000000000000000000000000000000000000000000', - }, - }, - }, - }, - }, - }, - ], - }; - const xcmMsg = trappistApi.tx.polkadotXcm.send(xcmDestMultiLocation, xcmMessage); - const xcmCall = trappistApi.createType('Call', { - callIndex: xcmMsg.callIndex, - args: xcmMsg.args, - }); - - return xcmCall; -}; - -const createForeignAssetViaSudo = (assetHubApi: ApiPromise, trappistApi: ApiPromise) => { - const foreignAssetCreateCall = fAssetCreateCall(assetHubApi); - return sudoCallWrapper(trappistApi, foreignAssetCreateCall); -}; - -const setMetadataForeignAssetViaSudo = (assetHubApi: ApiPromise, trappistApi: ApiPromise) => { - const setMetadataCall = fAssetSetMetadataCall(assetHubApi); - return sudoCallWrapper(trappistApi, setMetadataCall); -}; - -const openHrmpChannels = (api: ApiPromise, sender: number, receiver: number) => { - return api.tx.hrmp.forceOpenHrmpChannel(sender, receiver, Number(8), Number(512)); -}; - -const main = async () => { - logWithDate(chalk.yellow('Initializing script to create foreignAssets on chain')); - await cryptoWaitReady(); - - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - const bob = keyring.addFromUri('//Bob'); - - const kusamaAssetHubApi = await ApiPromise.create({ - provider: new WsProvider(KUSAMA_ASSET_HUB_WS_URL), - noInitWarn: true, - }); - - await kusamaAssetHubApi.isReady; - logWithDate(chalk.green('Created a connection to Kusama AssetHub')); - - const trappistApi = await ApiPromise.create({ - provider: new WsProvider(MUSE_WS_URL), - noInitWarn: true, - }); - - await trappistApi.isReady; - logWithDate(chalk.green('Created a connection to Muse')); - - const relayApi = await ApiPromise.create({ - provider: new WsProvider(PASEO_ALICE_WS_URL), - noInitWarn: true, - }); - - await relayApi.isReady; - - logWithDate(chalk.green('Created a connection to Paseo')); - - logWithDate(chalk.blue('Opening HRMP Channels')); - - const hrmpChannelCalls = []; - - hrmpChannelCalls.push(openHrmpChannels(relayApi, Number(1000), Number(3369))); - hrmpChannelCalls.push(openHrmpChannels(relayApi, Number(3369), Number(1000))); - - await relayApi.tx.sudo.sudo(relayApi.tx.utility.batchAll(hrmpChannelCalls)).signAndSend(alice); - - await awaitEpochChange(relayApi); - logWithDate(chalk.magenta('HRMP channels open')); - - logWithDate(chalk.magenta('Sending funds to Trappist Sibling on Kusama AssetHub')); - - await kusamaAssetHubApi.tx.balances - .transferKeepAlive('5Eg2fnsjAAr8RGZfa8Sy5mYFPabA9ZLNGYECCKXPD6xnK6D2', 10000000000000) - .signAndSend(bob); - - const foreignAssetsCreateSudoXcmCall = createForeignAssetViaSudo(kusamaAssetHubApi, trappistApi); - - logWithDate('Sending Sudo XCM message from relay chain to execute create foreign asset call on Kusama AssetHub'); - await trappistApi.tx.sudo.sudo(foreignAssetsCreateSudoXcmCall).signAndSend(alice); - - await delay(24000); - - const foreignAssetsSetMetadataSudoXcmCall = setMetadataForeignAssetViaSudo(kusamaAssetHubApi, trappistApi); - - logWithDate('Sending Sudo XCM message from relay chain to execute setMetadata call on Kusama AssetHub'); - await trappistApi.tx.sudo.sudo(foreignAssetsSetMetadataSudoXcmCall).signAndSend(alice); - - await delay(24000); - - await kusamaAssetHubApi.disconnect().then(() => { - logWithDate(chalk.blue('Polkadot-js successfully disconnected from asset-hub')); - }); - - await trappistApi.disconnect().then(() => { - logWithDate(chalk.blue('Polkadot-js successfully disconnected from Trappist')); - }); -}; - -// eslint-disable-next-line @typescript-eslint/no-floating-promises -awaitBlockProduction(MUSE_WS_URL).then(async () => { - await main() - .catch(console.error) - .finally(() => process.exit()); -}); diff --git a/scripts/testNetworkLiquidAssets.ts b/scripts/testNetworkLiquidAssets.ts deleted file mode 100644 index 16066b78..00000000 --- a/scripts/testNetworkLiquidAssets.ts +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { Keyring } from '@polkadot/keyring'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; -import chalk from 'chalk'; - -import { KUSAMA_ASSET_HUB_WS_URL, PASEO_ALICE_WS_URL } from './consts'; -import { awaitBlockProduction, awaitEpochChange, delay, logWithDate } from './util'; - -const ASSET_ID = 1; -const ASSET_NAME = 'Testy'; -const ASSET_TICKER = 'TSTY'; -const ASSET_DECIMALS = 12; -const ASSET_MIN = 1; - -const asset = { - parents: 0, - interior: { - X2: [{ palletInstance: 50 }, { generalIndex: ASSET_ID }], - }, -}; - -const native = { - parents: 1, - interior: { - Here: '', - }, -}; - -const createAssetCall = (api: ApiPromise, admin: KeyringPair) => { - return api.tx.assets.create(ASSET_ID, admin.address, ASSET_MIN); -}; - -const setMetadataCall = (api: ApiPromise) => { - return api.tx.assets.setMetadata(ASSET_ID, ASSET_NAME, ASSET_TICKER, ASSET_DECIMALS); -}; - -const mintCall = (api: ApiPromise, to: KeyringPair, amount: number) => { - return api.tx.assets.mint(ASSET_ID, to.address, amount); -}; - -const createLiquidityPoolCall = (api: ApiPromise) => { - // For now, we have to override the types of the Assets until PJS is updated - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any - return api.tx.assetConversion.createPool(native, asset); -}; - -const addLiquidityCall = (api: ApiPromise, amountNative: number, amountAsset: number, to: KeyringPair) => { - // For now, we have to override the types of the Assets until PJS is updated - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any - return api.tx.assetConversion.addLiquidity(native, asset, amountNative, amountAsset, 0, 0, to.address); -}; - -const transferLPTokensCall = (api: ApiPromise, token: number, amount: number, to: KeyringPair) => { - return api.tx.poolAssets.transferKeepAlive(token, to.address, amount); -}; - -const openHrmpChannels = (api: ApiPromise, sender: number, receiver: number) => { - return api.tx.hrmp.forceOpenHrmpChannel(sender, receiver, Number(8), Number(512)); -}; - -const main = async () => { - logWithDate(chalk.yellow('Initializing script to create a liquidity pool on Kusama Asset Hub')); - await cryptoWaitReady(); - - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - const bob = keyring.addFromUri('//Bob'); - - const relayApi = await ApiPromise.create({ - provider: new WsProvider(PASEO_ALICE_WS_URL), - noInitWarn: true, - }); - - await relayApi.isReady; - - logWithDate(chalk.blue('Opening HRMP Channels')); - - const hrmpChannelCalls = []; - - hrmpChannelCalls.push(openHrmpChannels(relayApi, Number(1000), Number(1836))); - hrmpChannelCalls.push(openHrmpChannels(relayApi, Number(1836), Number(1000))); - - await relayApi.tx.sudo.sudo(relayApi.tx.utility.batchAll(hrmpChannelCalls)).signAndSend(alice); - - await awaitEpochChange(relayApi); - logWithDate(chalk.magenta('HRMP channels open')); - - const api = await ApiPromise.create({ - provider: new WsProvider(KUSAMA_ASSET_HUB_WS_URL), - noInitWarn: true, - }); - - await api.isReady; - - logWithDate(chalk.green('Created a connection to Kusama AssetHub')); - - const txs = []; - const create = createAssetCall(api, alice); - const setMetadata = setMetadataCall(api); - const mint = mintCall(api, alice, 10000000000000); - const createPool = createLiquidityPoolCall(api); - const addLiquidity = addLiquidityCall(api, 10000000000000, 10000000000000, alice); - - txs.push(create); - txs.push(setMetadata); - txs.push(mint); - txs.push(createPool); - txs.push(addLiquidity); - - await api.tx.utility.batch(txs).signAndSend(alice, { nonce: -1 }); - - await delay(24000); - - const nextLpToken = await api.query.assetConversion.nextPoolAssetId(); - - const lpToken = Number(nextLpToken) - 1; - - logWithDate(chalk.yellow('Asset and Liquidity Pool created')); - - logWithDate(chalk.green(`Liquidity Pool Token ID: ${lpToken}`)); - - const startingBalances = await api.query.poolAssets.account.entries(lpToken); - - startingBalances.slice(1).forEach( - ([ - { - args: [lpToken, address], - }, - value, - ]) => { - logWithDate( - chalk.blue( - `LP Token: ${Number(lpToken)}, Account: ${address.toString()}, Starting liquidty token balance: ${value - .unwrap() - .balance.toHuman()}`, - ), - ); - }, - ); - - await delay(24000); - - logWithDate(chalk.magenta('Sending 1,000,000,000,000 lpTokens from Alice to Bob on Kusama Asset Hub')); - - await transferLPTokensCall(api, 0, 1000000000000, bob).signAndSend(alice, { nonce: -1 }); - - await delay(24000); - - const newBalances = await api.query.poolAssets.account.entries(lpToken); - newBalances.slice(1).forEach( - ([ - { - args: [lpToken, address], - }, - value, - ]) => { - logWithDate( - chalk.blue( - `LP Token: ${Number(lpToken)}, Account: ${address.toString()}, New liquidty token balance: ${value - .unwrap() - .balance.toHuman()}`, - ), - ); - }, - ); - - await api.disconnect().then(() => { - logWithDate(chalk.yellow('Polkadot-js successfully disconnected from asset-hub')); - }); -}; - -// eslint-disable-next-line @typescript-eslint/no-floating-promises -awaitBlockProduction(KUSAMA_ASSET_HUB_WS_URL).then(async () => { - await main() - .catch(console.error) - .finally(() => process.exit()); -}); diff --git a/scripts/testNetworkSetup.ts b/scripts/testNetworkSetup.ts deleted file mode 100644 index 0aa392cf..00000000 --- a/scripts/testNetworkSetup.ts +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import '@polkadot/api-augment'; - -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { Keyring } from '@polkadot/keyring'; -import { DispatchError } from '@polkadot/types/interfaces'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; -import chalk from 'chalk'; - -import { KUSAMA_ASSET_HUB_WS_URL, PASEO_ALICE_WS_URL } from './consts'; -import { awaitBlockProduction, delay, logWithDate } from './util'; - -/** - * This script is intended to be run after zombienet is running. - * It uses the hard coded values given in `zombienet.toml`. - */ - -const main = async () => { - logWithDate(chalk.yellow('Initializing script to run transaction on chain')); - await cryptoWaitReady(); - - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - - const assetInfo = { - assetId: 1, - assetName: 'xUSD', - assetSymbol: 'XUSD', - assetDecimals: 12, - }; - - const kusamaAssetHubApi = await ApiPromise.create({ - provider: new WsProvider(KUSAMA_ASSET_HUB_WS_URL), - noInitWarn: true, - }); - - await kusamaAssetHubApi.isReady; - logWithDate(chalk.green('Created a connection to Kusama AssetHub')); - - const paseoApi = await ApiPromise.create({ - provider: new WsProvider(PASEO_ALICE_WS_URL), - noInitWarn: true, - }); - - await paseoApi.isReady; - logWithDate(chalk.green('Created a connection to Paseo')); - - /** - * Create this call via the parachain api, since this is the chain in which it will be called. - */ - const forceCreate = kusamaAssetHubApi.tx.assets.forceCreate(assetInfo.assetId, alice.address, true, 1000); - const forceCreateCall = kusamaAssetHubApi.createType('Call', { - callIndex: forceCreate.callIndex, - args: forceCreate.args, - }); - /** - * Create an xcm call via the relay chain because this is the chain in which it will be called. - * NOTE: The relay chain will have sudo powers. - */ - const xcmDoubleEncoded = paseoApi.createType('XcmDoubleEncoded', { - encoded: forceCreateCall.toHex(), - }); - const xcmOriginType = paseoApi.createType('XcmOriginKind', 'Superuser'); - const xcmDest = { - V3: { - parents: 0, - interior: { - X1: { - parachain: 1000, - }, - }, - }, - }; - const xcmMessage = { - V3: [ - { - unpaidExecution: { - weightLimit: { Unlimited: '' }, - checkOrigin: { - parents: 1, - interior: { Here: '' }, - }, - }, - }, - { - transact: { - originKind: xcmOriginType, - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 900000, - }, - call: xcmDoubleEncoded, - }, - }, - ], - }; - const multiLocation = paseoApi.createType('XcmVersionedMultiLocation', xcmDest); - const xcmVersionedMsg = paseoApi.createType('XcmVersionedXcm', xcmMessage); - const xcmMsg = paseoApi.tx.xcmPallet.send(multiLocation, xcmVersionedMsg); - const xcmCall = paseoApi.createType('Call', { - callIndex: xcmMsg.callIndex, - args: xcmMsg.args, - }); - - logWithDate('Sending Sudo XCM message from relay chain to execute forceCreate call on Kusama AssetHub'); - await paseoApi.tx.sudo.sudo(xcmCall).signAndSend(alice); - - /** - * Make sure we allow the asset enough time to be created before we mint. - * This is because parachain block production by default can be expected to be 12 seconds. - */ - await delay(24000); - - /** - * Mint the asset after its forceCreated by Alice. - */ - const { nonce } = await kusamaAssetHubApi.query.system.account(alice.address); - const txs = [ - kusamaAssetHubApi.tx.assets.setMetadata( - assetInfo.assetId, - assetInfo.assetName, - assetInfo.assetSymbol, - assetInfo.assetDecimals, - ), - kusamaAssetHubApi.tx.assets.mint(assetInfo.assetId, alice.address, 100000 * 120000000), - ]; - const batch = kusamaAssetHubApi.tx.utility.batchAll(txs); - - logWithDate('Sending batch call in order to mint a test asset on Kusama AssetHub'); - await batch.signAndSend(alice, { nonce }, ({ status, events }) => { - if (status.isInBlock || status.isFinalized) { - events - // find/filter for failed events - .filter(({ event }) => kusamaAssetHubApi.events.system.ExtrinsicFailed.is(event)) - // we know that data for system.ExtrinsicFailed is - // (DispatchError, DispatchInfo) - .forEach( - ({ - event: { - data: [error], - }, - }) => { - if ((error as DispatchError).isModule) { - // for module errors, we have the section indexed, lookup - const decoded = kusamaAssetHubApi.registry.findMetaError((error as DispatchError).asModule); - const { docs, method, section } = decoded; - - console.log(`${section}.${method}: ${docs.join(' ')}`); - } else { - // Other, CannotLookup, BadOrigin, no extra info - console.log(error.toString()); - } - }, - ); - } - }); - logWithDate(chalk.yellow('Script finished. Exiting')); -}; - -// eslint-disable-next-line @typescript-eslint/no-floating-promises -awaitBlockProduction(KUSAMA_ASSET_HUB_WS_URL).then(async () => { - await main() - .catch(console.error) - .finally(() => process.exit()); -}); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json deleted file mode 100644 index afbdecef..00000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@substrate/dev/config/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "outDir": "build", - "suppressImplicitAnyIndexErrors": true, - "ignoreDeprecations": "5.0", - "resolveJsonModule": true - } -} diff --git a/scripts/util.ts b/scripts/util.ts deleted file mode 100644 index bbb0a980..00000000 --- a/scripts/util.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. - -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { formatDate } from '@polkadot/util'; -import chalk from 'chalk'; - -/** - * Set a delay (sleep) - * - * @param ms Milliseconds - */ -export const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - -/** - * Formats a string to match the output of polkadot-js logging. - * - * @param log String to be logged - * @param remove Remove lines before that were cleared by std - */ -export const logWithDate = (log: string, remove?: boolean) => { - remove - ? console.log(`\r${formatDate(new Date())} ${log}`) - : console.log(`${formatDate(new Date())} ${log}`); -}; - -/** - * Will block the main script from running until there is blocks in Polkadot AssetHub being produced. - */ -export const awaitBlockProduction = async (wsUrl: string) => { - logWithDate(chalk.yellow(`Initializing polkadot-js: Polling until ${wsUrl} is available`)); - const api = await ApiPromise.create({ - provider: new WsProvider(wsUrl), - noInitWarn: true, - }); - logWithDate(chalk.yellow('Polkadot-js is connected')); - - await api.isReady; - - let counter = 3; - let blocksProducing = false; - while (!blocksProducing) { - const { number } = await api.rpc.chain.getHeader(); - - if (number.toNumber() > 0) { - blocksProducing = true; - } - await delay(1000); - - counter += 1; - process.stdout.clearLine(0); - process.stdout.write(`\rWaiting for Block production on Kusama AssetHub${'.'.repeat((counter % 3) + 1)}`); - } - - process.stdout.clearLine(0); - logWithDate(chalk.magenta('Blocks are producing'), true); - await api.disconnect().then(() => { - logWithDate(chalk.blue('Polkadot-js successfully disconnected')); - }); -}; - -export const awaitEpochChange = async (api: ApiPromise) => { - const currentEpoch = await api.call.babeApi.currentEpoch(); - const currentEpochIndex = currentEpoch.epochIndex; - let counter = 1; - let changedEpoch = false; - while (!changedEpoch) { - const { epochIndex } = await api.call.babeApi.currentEpoch(); - - if (epochIndex.toNumber() > currentEpochIndex.toNumber() + 1) { - changedEpoch = true; - } - await delay(1000); - - counter += 1; - process.stdout.clearLine(0); - process.stdout.write(`\rWaiting for Epoch change${'.'.repeat((counter % 3) + 1)}`); - } - - process.stdout.clearLine(0); - logWithDate(chalk.magenta('Epoch changed'), true); -}; diff --git a/src/createXcmCalls/polkadotXcm/limitedReserveTransferAssets.ts b/src/createXcmCalls/polkadotXcm/limitedReserveTransferAssets.ts index 0a1d8c56..8c7cea9c 100644 --- a/src/createXcmCalls/polkadotXcm/limitedReserveTransferAssets.ts +++ b/src/createXcmCalls/polkadotXcm/limitedReserveTransferAssets.ts @@ -32,6 +32,7 @@ export const limitedReserveTransferAssets = async ( isForeignAssetsTransfer, isLiquidTokenTransfer, api, + destChainId, }); const weightLimitType = typeCreator.createWeightLimit({ weightLimit, diff --git a/src/createXcmCalls/polkadotXcm/limitedTeleportAssets.ts b/src/createXcmCalls/polkadotXcm/limitedTeleportAssets.ts index 4ca2bc73..a5c47c2f 100644 --- a/src/createXcmCalls/polkadotXcm/limitedTeleportAssets.ts +++ b/src/createXcmCalls/polkadotXcm/limitedTeleportAssets.ts @@ -31,6 +31,7 @@ export const limitedTeleportAssets = async ( isForeignAssetsTransfer, isLiquidTokenTransfer: false, api, + destChainId, }); const weightLimitType = typeCreator.createWeightLimit({ weightLimit, diff --git a/src/createXcmCalls/polkadotXcm/transferAssets.ts b/src/createXcmCalls/polkadotXcm/transferAssets.ts index 16013419..51292278 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssets.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssets.ts @@ -31,6 +31,7 @@ export const transferAssets = async ( isForeignAssetsTransfer, isLiquidTokenTransfer, api, + destChainId, }); const weightLimitValue = typeCreator.createWeightLimit({ diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index 390291ba..05ff4b3c 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -45,6 +45,7 @@ export const transferAssetsUsingTypeAndThen = async ( isForeignAssetsTransfer, isLiquidTokenTransfer, api, + destChainId, }); const weightLimitValue = typeCreator.createWeightLimit({ diff --git a/src/createXcmTypes/ParaToPara.ts b/src/createXcmTypes/ParaToPara.ts index 4e4c6856..159e8e40 100644 --- a/src/createXcmTypes/ParaToPara.ts +++ b/src/createXcmTypes/ParaToPara.ts @@ -35,6 +35,7 @@ import type { XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; +import { getParachainNativeAssetLocation } from './util/getParachainNativeAssetLocation'; import { getXcAssetMultiLocationByAssetId } from './util/getXcAssetMultiLocationByAssetId'; import { isParachainPrimaryNativeAsset } from './util/isParachainPrimaryNativeAsset'; import { sortAssetsAscending } from './util/sortAssetsAscending'; @@ -152,7 +153,7 @@ export const ParaToPara: ICreateXcmType = { assets: string[], opts: CreateAssetsOpts, ): Promise => { - const { registry } = opts; + const { registry, destChainId } = opts; const sortedAndDedupedMultiAssets = await createParaToParaMultiAssets( opts.api, @@ -161,6 +162,7 @@ export const ParaToPara: ICreateXcmType = { assets, xcmVersion, registry, + destChainId, ); if (xcmVersion === 2) { @@ -517,6 +519,7 @@ const createParaToParaMultiAssets = async ( assets: string[], xcmVersion: number, registry: Registry, + destChainId?: string, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType | undefined = undefined; @@ -530,10 +533,7 @@ const createParaToParaMultiAssets = async ( if (isPrimaryParachainNativeAsset) { concreteMultiLocation = resolveMultiLocation( - { - parents: 0, - interior: { Here: '' }, - }, + getParachainNativeAssetLocation(registry, assets[0], destChainId), xcmVersion, ); diff --git a/src/createXcmTypes/ParaToSystem.ts b/src/createXcmTypes/ParaToSystem.ts index f39bc6b7..ad4c4b98 100644 --- a/src/createXcmTypes/ParaToSystem.ts +++ b/src/createXcmTypes/ParaToSystem.ts @@ -34,6 +34,7 @@ import type { XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; +import { getParachainNativeAssetLocation } from './util/getParachainNativeAssetLocation'; import { getXcAssetMultiLocationByAssetId } from './util/getXcAssetMultiLocationByAssetId'; import { isParachainPrimaryNativeAsset } from './util/isParachainPrimaryNativeAsset'; import { sortAssetsAscending } from './util/sortAssetsAscending'; @@ -154,6 +155,7 @@ export const ParaToSystem: ICreateXcmType = { assets, xcmVersion, opts.registry, + opts.destChainId, ); if (xcmVersion === 2) { @@ -502,6 +504,7 @@ const createParaToSystemMultiAssets = async ( assets: string[], xcmVersion: number, registry: Registry, + destChainId?: string, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType; @@ -515,10 +518,7 @@ const createParaToSystemMultiAssets = async ( if (isPrimaryParachainNativeAsset) { concreteMultiLocation = resolveMultiLocation( - { - parents: 0, - interior: { Here: '' }, - }, + getParachainNativeAssetLocation(registry, assets[0], destChainId), xcmVersion, ); diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index b5211ba3..7d7d9d22 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -399,6 +399,7 @@ export interface CreateAssetsOpts { isForeignAssetsTransfer: boolean; isLiquidTokenTransfer: boolean; api: ApiPromise; + destChainId?: string; } export interface CreateFeeAssetItemOpts { diff --git a/src/createXcmTypes/util/getParachainNativeAssetLocation.spec.ts b/src/createXcmTypes/util/getParachainNativeAssetLocation.spec.ts new file mode 100644 index 00000000..90c445c2 --- /dev/null +++ b/src/createXcmTypes/util/getParachainNativeAssetLocation.spec.ts @@ -0,0 +1,47 @@ +import { Registry } from '../../registry'; +import { getParachainNativeAssetLocation } from './getParachainNativeAssetLocation'; + +describe('getParachainNativeAssetLocation', () => { + it('Correctly returns the native asset location for Moonbeam', () => { + const registry = new Registry('moonbeam', {}); + + const res = getParachainNativeAssetLocation(registry, 'GLMR', '2034'); + + expect(JSON.stringify(res)).toEqual('{"parents":0,"interior":{"X1":{"PalletInstance":"10"}}}'); + }); + it('Correctly returns the native asset location for Moonriver', () => { + const registry = new Registry('moonriver', {}); + + const res = getParachainNativeAssetLocation(registry, 'MOVR', '2001'); + + expect(JSON.stringify(res)).toEqual('{"parents":0,"interior":{"X1":{"PalletInstance":"10"}}}'); + }); + it('Correctly returns the native asset location for Phala', () => { + const registry = new Registry('phala', {}); + + const res = getParachainNativeAssetLocation(registry, 'PHA', '2034'); + + expect(JSON.stringify(res)).toEqual('{"parents":0,"interior":{"X1":{"Parachain":"2035"}}}'); + }); + it('Correctly returns the native asset location for Hydration', () => { + const registry = new Registry('hydradx', {}); + + const res = getParachainNativeAssetLocation(registry, 'HDX', '2004'); + + expect(JSON.stringify(res)).toEqual('{"parents":0,"interior":{"X1":{"GeneralIndex":"0"}}}'); + }); + it('Correctly returns the native asset location for Hydration when destination is AssetHub', () => { + const registry = new Registry('hydradx', {}); + + const res = getParachainNativeAssetLocation(registry, 'HDX', '1000'); + + expect(JSON.stringify(res)).toEqual('{"parents":0,"interior":{"X1":{"GeneralIndex":"0"}}}'); + }); + it('correctly throws an error when no valid location is found for the given native asset', () => { + const registry = new Registry('moonbeam', {}); + + const err = () => getParachainNativeAssetLocation(registry, 'GLMR', '3369'); + + expect(err).toThrow('No location found for asset GLMR'); + }); +}); diff --git a/src/createXcmTypes/util/getParachainNativeAssetLocation.ts b/src/createXcmTypes/util/getParachainNativeAssetLocation.ts new file mode 100644 index 00000000..0175a8f9 --- /dev/null +++ b/src/createXcmTypes/util/getParachainNativeAssetLocation.ts @@ -0,0 +1,83 @@ +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { Registry } from '../../registry'; +import { SanitizedXcAssetsData } from '../../registry/types'; +import { sanitizeKeys } from '../../util/sanitizeKeys'; +import { UnionXcmMultiLocation, XcmV3Junction } from '../types'; +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; + +export const getParachainNativeAssetLocation = ( + registry: Registry, + nativeAssetSymbol: string, + destChainId?: string, +): UnionXcmMultiLocation => { + if (!destChainId) { + throw new BaseError('No destination chainId provided', BaseErrorsEnum.InternalError); + } + + let location: UnionXcmMultiLocation | undefined = undefined; + + if (destChainId === '1000') { + for (const relayRegistryKey in registry.getRelaysRegistry) { + const paraXcAssets = registry.getRelaysRegistry[relayRegistryKey].xcAssetsData; + + if (paraXcAssets) { + location = getNativeAssetLocation(nativeAssetSymbol, paraXcAssets); + + if (location) { + return location; + } + } + } + } else { + const paraXcAssets = registry.getRelaysRegistry[destChainId].xcAssetsData; + + if (paraXcAssets) { + location = getNativeAssetLocation(nativeAssetSymbol, paraXcAssets); + if (location) { + return location; + } + } + } + + throw new BaseError(`No location found for asset ${nativeAssetSymbol}`, BaseErrorsEnum.InvalidAsset); +}; + +const getNativeAssetLocation = ( + nativeAssetSymbol: string, + paraXcAssets: SanitizedXcAssetsData[], +): UnionXcmMultiLocation | undefined => { + let location: UnionXcmMultiLocation | undefined = undefined; + + for (const asset of paraXcAssets) { + if (typeof asset.symbol === 'string' && asset.symbol.toLowerCase() === nativeAssetSymbol.toLowerCase()) { + // get the location from v1 + const v1LocationStr = asset.xcmV1MultiLocation; + location = parseLocationStrToLocation(v1LocationStr); + + // handle case where result is an xcmV1Multilocation from the registry + if ('v1' in location) { + location = location.v1 as UnionXcmMultiLocation; + } + + location.interior = sanitizeKeys(location.interior); + + if (location.interior.X2) { + location = { + parents: 0, + interior: { + X1: location.interior.X2[1] as XcmV3Junction, + }, + }; + } else if (location.interior.X1) { + location = { + parents: 0, + interior: { + X1: location.interior.X1 as XcmV3Junction, + }, + }; + } + } + } + + return location; +}; diff --git a/src/integrationTests/parachains/bifrost.spec.ts b/src/integrationTests/parachains/bifrost.spec.ts index 9e19f353..6702feba 100644 --- a/src/integrationTests/parachains/bifrost.spec.ts +++ b/src/integrationTests/parachains/bifrost.spec.ts @@ -96,13 +96,6 @@ describe('Bifrost', () => { } } }); - it('Should correctly build a V3 transferAssets submittable from Bifrost to Moonriver', async () => { - const res = await bifrostTransferAssets(bifrostATA, 'submittable', 3, '2023', ['BNC'], ['10000000'], { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); }); describe('XCM V4', () => { it('Should correctly construct a transferAssets call from Bifrost to Moonriver', async () => { @@ -137,13 +130,6 @@ describe('Bifrost', () => { } } }); - it('Should correctly build a V4 transferAssets submittable from Bifrost to Moonriver', async () => { - const res = await bifrostTransferAssets(bifrostATA, 'submittable', 4, '2023', ['BNC'], ['10000000'], { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); }); }); describe('transferMultiasset', () => { @@ -765,9 +751,9 @@ describe('Bifrost', () => { const tests: TestMultiassetWithFormat[] = [ [ '1000', - 'bnc', + 'ksm', 'call', - '0x290b04010100a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404000000025a62020000000000', + '0x290b04010100a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404010000025a62020000000000', ], ]; @@ -793,13 +779,6 @@ describe('Bifrost', () => { } } }); - it('Should correctly build a V3 transferAssets submittable from Bifrost to Moonriver', async () => { - const res = await bifrostTransferAssets(bifrostATA, 'submittable', 4, '1000', ['BNC'], ['10000000'], { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); }); }); }); diff --git a/src/integrationTests/parachains/moonriver.spec.ts b/src/integrationTests/parachains/moonriver.spec.ts index 019568ea..af683ab3 100644 --- a/src/integrationTests/parachains/moonriver.spec.ts +++ b/src/integrationTests/parachains/moonriver.spec.ts @@ -69,7 +69,7 @@ describe('Moonriver', () => { '2001', 'movr', 'call', - '0x670803010100451f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400000000025a62020000000000', + '0x670803010100451f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0304000001040a00025a62020000000000', ], ]; @@ -470,7 +470,7 @@ describe('Moonriver', () => { '1000', 'movr', 'call', - '0x670901010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400000000025a62020000000000', + '0x670901010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0104000001040a00025a62020000000000', ], ]; @@ -511,7 +511,7 @@ describe('Moonriver', () => { '1000', 'movr', 'call', - '0x670903010100a10f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400000000025a62020000000000', + '0x670903010100a10f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0304000001040a00025a62020000000000', ], ]; diff --git a/tsconfig.json b/tsconfig.json index c2dc261d..62434861 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "./node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "lib", - "rootDirs": ["./src", "./scripts"], + "rootDirs": ["./src"], "ignoreDeprecations": "5.0", "resolveJsonModule": true, "esModuleInterop": true }, "typeRoots": ["./node_modules/@types"], "exclude": ["node_modules", "./src/**/*.spec.ts", "./src/testHelpers"], - "include": ["./src/**/*.ts", "./src/**/*.json"] + "include": ["./src/**/*.ts", "./src/**/*.json", "./vitest.config.ts", "./vitest.workspace.ts", "./vitest-setup-file.ts"] } diff --git a/vitest-setup-file.ts b/vitest-setup-file.ts new file mode 100644 index 00000000..8063a93b --- /dev/null +++ b/vitest-setup-file.ts @@ -0,0 +1,6 @@ +process.on('unhandledRejection', () => { + // eslint-disable-next-line no-console + console.log('Caught unhandled promise rejection'); +}); + +export default {}; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..c5ec3a86 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + setupFiles: ['./vitest-setup-file.ts'], + }, +}); diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 00000000..b0e23443 --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1,26 @@ +import { defineWorkspace } from 'vitest/config'; + +export default defineWorkspace([ + { + extends: './vitest.config.ts', + test: { + name: 'unit', + include: ['./src/**/*.spec.ts'], + exclude: ['./src/integrationTests/**/*.spec.ts', './e2e-tests/*.spec.ts'], + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'integration', + include: ['./src/integrationTests/**/*.spec.ts'], + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'e2e', + include: ['./e2e-tests/*.spec.ts'], + }, + }, +]); diff --git a/yarn.lock b/yarn.lock index ebd31871..88ddb6fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,107 @@ __metadata: languageName: node linkType: hard +"@acala-network/chopsticks-core@npm:1.0.1, @acala-network/chopsticks-core@npm:^1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks-core@npm:1.0.1" + dependencies: + "@acala-network/chopsticks-executor": "npm:1.0.1" + "@polkadot/rpc-provider": "npm:^14.0.1" + "@polkadot/types": "npm:^14.0.1" + "@polkadot/types-codec": "npm:^14.0.1" + "@polkadot/types-known": "npm:^14.0.1" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" + comlink: "npm:^4.4.1" + eventemitter3: "npm:^5.0.1" + lodash: "npm:^4.17.21" + lru-cache: "npm:^11.0.1" + pino: "npm:^9.5.0" + pino-pretty: "npm:^11.3.0" + rxjs: "npm:^7.8.1" + zod: "npm:^3.23.8" + checksum: 10/a81c3a1a964eda7a07e1794956efbf2f466d9a4cc9d1812dca1fb9932568a443afeea5f1b6b5de03960424da46b577a7cc40bb851c0083a0c95ff1a4bde2519f + languageName: node + linkType: hard + +"@acala-network/chopsticks-db@npm:1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks-db@npm:1.0.1" + dependencies: + "@acala-network/chopsticks-core": "npm:1.0.1" + "@polkadot/util": "npm:^13.2.2" + idb: "npm:^8.0.0" + sqlite3: "npm:^5.1.7" + typeorm: "npm:^0.3.20" + checksum: 10/c3f33f1b1740a80a655aac2d07d3d7f9e64cc5816f02ab80fb06181719b416e2d3e6a4e1eb04e696b836317278e32f72ad198c8ce0b491d371298d5ae1b85f61 + languageName: node + linkType: hard + +"@acala-network/chopsticks-executor@npm:1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks-executor@npm:1.0.1" + dependencies: + "@polkadot/util": "npm:^13.2.2" + "@polkadot/wasm-util": "npm:^7.4.1" + checksum: 10/d9b0b1b39d5882d35a3ddcff67169e0541a6112dd1df1d3c05a4e097ee1c3fe23a463c7447b7f8bffa10bf4ac6c84c789ec7fcea9b42fa6358a59aaa9f27c695 + languageName: node + linkType: hard + +"@acala-network/chopsticks-testing@npm:^1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks-testing@npm:1.0.1" + dependencies: + "@acala-network/chopsticks-utils": "npm:1.0.1" + "@polkadot/api": "npm:^14.0.1" + "@polkadot/types": "npm:^14.0.1" + checksum: 10/3ed1914bcac8f13cd80a88deab8ef9254e5b9fed5c4c7c394441d682e525fa904a8fee9e719fad7731e879d3e8289bb2c0886d8004785a951c46c7e9542fc6b3 + languageName: node + linkType: hard + +"@acala-network/chopsticks-utils@npm:1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks-utils@npm:1.0.1" + dependencies: + "@acala-network/chopsticks": "npm:1.0.1" + "@acala-network/chopsticks-core": "npm:1.0.1" + "@polkadot/api": "npm:^14.0.1" + "@polkadot/api-base": "npm:^14.0.1" + "@polkadot/keyring": "npm:^13.2.2" + "@polkadot/types": "npm:^14.0.1" + "@polkadot/util": "npm:^13.2.2" + checksum: 10/f6a1cc9543a064641c671ecd8a7578b275b45c14589ddbe9359e7a65195693e858485d84e751c2bfbe152bf7b42b4e3938b9c229749bece0146282db86ec0fe1 + languageName: node + linkType: hard + +"@acala-network/chopsticks@npm:1.0.1": + version: 1.0.1 + resolution: "@acala-network/chopsticks@npm:1.0.1" + dependencies: + "@acala-network/chopsticks-core": "npm:1.0.1" + "@acala-network/chopsticks-db": "npm:1.0.1" + "@pnpm/npm-conf": "npm:^2.3.1" + "@polkadot/api": "npm:^14.0.1" + "@polkadot/api-augment": "npm:^14.0.1" + "@polkadot/rpc-provider": "npm:^14.0.1" + "@polkadot/types": "npm:^14.0.1" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" + axios: "npm:^1.7.7" + comlink: "npm:^4.4.1" + dotenv: "npm:^16.4.5" + global-agent: "npm:^3.0.0" + js-yaml: "npm:^4.1.0" + jsondiffpatch: "npm:^0.5.0" + lodash: "npm:^4.17.21" + ws: "npm:^8.18.0" + yargs: "npm:^17.7.2" + zod: "npm:^3.23.8" + bin: + chopsticks: ./chopsticks.cjs + checksum: 10/9ba38ee6297538597b1ad3e5b187ca448eede33eb502bad23ff980854007655d3a00d4b6b8e52f6715c7c9927bf3120c2104280e0442041608c6474d64932cb6 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -395,6 +496,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -437,24 +699,13 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 10/052dd232140fa60e81588000cbe729a40146579b361f1070bce63e2a761388a22a16d00beeffc504bd3601cb8e055c57b21a185448b3ed550cf50716f4fd442e languageName: node linkType: hard -"@gerrit0/mini-shiki@npm:^1.24.0": - version: 1.24.1 - resolution: "@gerrit0/mini-shiki@npm:1.24.1" - dependencies: - "@shikijs/engine-oniguruma": "npm:^1.24.0" - "@shikijs/types": "npm:^1.24.0" - "@shikijs/vscode-textmate": "npm:^9.3.0" - checksum: 10/760e852fb28801fd75ba651ac0454d1169ad61ee0edb2ca81399441f297d16d3c73b141a1c0ddbf5c8bdc6996b2c16d4e4c70973ce9e4f8576ca569c68ba3ecf - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.13.0": version: 0.13.0 resolution: "@humanwhocodes/config-array@npm:0.13.0" @@ -480,6 +731,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -762,6 +1027,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -815,6 +1087,16 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^1.0.0": + version: 1.1.1 + resolution: "@npmcli/fs@npm:1.1.1" + dependencies: + "@gar/promisify": "npm:^1.0.1" + semver: "npm:^7.3.5" + checksum: 10/8b5e6d75759b9f1a8b7885913df274c8cbbb1221176872615f2aecedf47b2c36e5dfbf4046ff1a905c9f3592fbd32051b3050b8a897bf03514a1a404b39af074 + languageName: node + linkType: hard + "@npmcli/fs@npm:^2.1.0": version: 2.1.2 resolution: "@npmcli/fs@npm:2.1.2" @@ -825,6 +1107,16 @@ __metadata: languageName: node linkType: hard +"@npmcli/move-file@npm:^1.0.1": + version: 1.1.2 + resolution: "@npmcli/move-file@npm:1.1.2" + dependencies: + mkdirp: "npm:^1.0.4" + rimraf: "npm:^3.0.2" + checksum: 10/c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + languageName: node + linkType: hard + "@npmcli/move-file@npm:^2.0.0": version: 2.0.1 resolution: "@npmcli/move-file@npm:2.0.1" @@ -835,6 +1127,13 @@ __metadata: languageName: node linkType: hard +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff + languageName: node + linkType: hard + "@pkgr/core@npm:^0.1.0": version: 0.1.1 resolution: "@pkgr/core@npm:0.1.1" @@ -842,6 +1141,33 @@ __metadata: languageName: node linkType: hard +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: 10/fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: 10/d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.3.1": + version: 2.3.1 + resolution: "@pnpm/npm-conf@npm:2.3.1" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 10/44fbb0b166eee3e3631ef0e92b1bed6489aa6975e3e722c16577cc0181b81374f5ae90c6e4da183c8160f996e6b4863325525b00542f42d1b757b51ef62bc4e7 + languageName: node + linkType: hard + "@polkadot-api/json-rpc-provider-proxy@npm:^0.1.0": version: 0.1.0 resolution: "@polkadot-api/json-rpc-provider-proxy@npm:0.1.0" @@ -909,141 +1235,141 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/api-augment@npm:15.0.1" +"@polkadot/api-augment@npm:14.2.3, @polkadot/api-augment@npm:^14.0.1, @polkadot/api-augment@npm:^14.2.3": + version: 14.2.3 + resolution: "@polkadot/api-augment@npm:14.2.3" dependencies: - "@polkadot/api-base": "npm:15.0.1" - "@polkadot/rpc-augment": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-augment": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/api-base": "npm:14.2.3" + "@polkadot/rpc-augment": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-augment": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/c3b74dca0522f303aa0045423a9fcd4b83cca0ecdc631330eb521f3b3ceceac9a8464ffccd7ba2c07806e863901736e59fa9bfdfc8b31e8dc4ddf2525922864e + checksum: 10/7c7bebf13311217e7a8ae8dc4bb1684a58e16790edaa3e8ced5f70a2a3bd4f3050dd364886a0eea768bb49ab446a64b73e1d35a0f7b643e31e616da8706532fb languageName: node linkType: hard -"@polkadot/api-base@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/api-base@npm:15.0.1" +"@polkadot/api-base@npm:14.2.3, @polkadot/api-base@npm:^14.0.1": + version: 14.2.3 + resolution: "@polkadot/api-base@npm:14.2.3" dependencies: - "@polkadot/rpc-core": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/rpc-core": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.8.0" - checksum: 10/40bf27ce42be882335bc59f34c955c7b7b288d788a49a6eef30c6d55f488b28ce7888fd108b99c4306262db1b48754c7b961583702ecd0f9952772436ac4b18a + checksum: 10/bda2df6b2208feffa1e007dd02cc85f70d21f2b9b5e338fe5623d68e1f1749af9583d0653c33e7bf28d997a0c629450627033a0b6edea4bd6e17964672c22eb5 languageName: node linkType: hard -"@polkadot/api-derive@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/api-derive@npm:15.0.1" +"@polkadot/api-derive@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/api-derive@npm:14.2.3" dependencies: - "@polkadot/api": "npm:15.0.1" - "@polkadot/api-augment": "npm:15.0.1" - "@polkadot/api-base": "npm:15.0.1" - "@polkadot/rpc-core": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" - "@polkadot/util-crypto": "npm:^13.2.3" + "@polkadot/api": "npm:14.2.3" + "@polkadot/api-augment": "npm:14.2.3" + "@polkadot/api-base": "npm:14.2.3" + "@polkadot/rpc-core": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.8.0" - checksum: 10/ae1e2bf5d5e859e7814afae1e5c14fd2dc23c374707339ade97eefae2a669b129fa84c331d6ce67d7b03c927f851114807f2942e607a1136430ec2a6bb160887 - languageName: node - linkType: hard - -"@polkadot/api@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/api@npm:15.0.1" - dependencies: - "@polkadot/api-augment": "npm:15.0.1" - "@polkadot/api-base": "npm:15.0.1" - "@polkadot/api-derive": "npm:15.0.1" - "@polkadot/keyring": "npm:^13.2.3" - "@polkadot/rpc-augment": "npm:15.0.1" - "@polkadot/rpc-core": "npm:15.0.1" - "@polkadot/rpc-provider": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-augment": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/types-create": "npm:15.0.1" - "@polkadot/types-known": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" - "@polkadot/util-crypto": "npm:^13.2.3" + checksum: 10/a788cd64d24015ad6beba1e024230a21460ecd4fdb2946b0dc128b7c17aa1c43c9523ca9e080aef8cfd16e86ef88dc4c6c70a722ae1107ac0bcd89a60cd1cbc8 + languageName: node + linkType: hard + +"@polkadot/api@npm:14.2.3, @polkadot/api@npm:^14.0.1, @polkadot/api@npm:^14.2.3": + version: 14.2.3 + resolution: "@polkadot/api@npm:14.2.3" + dependencies: + "@polkadot/api-augment": "npm:14.2.3" + "@polkadot/api-base": "npm:14.2.3" + "@polkadot/api-derive": "npm:14.2.3" + "@polkadot/keyring": "npm:^13.2.2" + "@polkadot/rpc-augment": "npm:14.2.3" + "@polkadot/rpc-core": "npm:14.2.3" + "@polkadot/rpc-provider": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-augment": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/types-create": "npm:14.2.3" + "@polkadot/types-known": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" eventemitter3: "npm:^5.0.1" rxjs: "npm:^7.8.1" tslib: "npm:^2.8.0" - checksum: 10/d224409fcb1d412c0acd9998cd2ddd85f434944c9a7b994282088457720d4bde132ca885136a669d2677cb16436075693623481912c044114b3ea56ea1d21f70 + checksum: 10/99738ac9af51465f1fbc017c187eb29a5a8bdea88ba335dfd9e98927dfa20503383a9abe5e073165c2d443d4e153e0f9d0b09642a19ed71fe723b1ea247ea473 languageName: node linkType: hard -"@polkadot/keyring@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/keyring@npm:13.2.3" +"@polkadot/keyring@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/keyring@npm:13.2.2" dependencies: - "@polkadot/util": "npm:13.2.3" - "@polkadot/util-crypto": "npm:13.2.3" + "@polkadot/util": "npm:13.2.2" + "@polkadot/util-crypto": "npm:13.2.2" tslib: "npm:^2.8.0" peerDependencies: - "@polkadot/util": 13.2.3 - "@polkadot/util-crypto": 13.2.3 - checksum: 10/c89cbdd3830f54cabcfde01527b7597a215b39dd7f26a374b1f0f43051fb0443385607548528c0b11eb42ca05d90569f38b13aeeed25858ccfa7ecf1d7345a21 + "@polkadot/util": 13.2.2 + "@polkadot/util-crypto": 13.2.2 + checksum: 10/552972c5e4c26f8a95dbb18552cbcfb04c87e085022153a705025987bb77655dc6c32709ea4b8300ebe74945a32b7f8a88ab50460d1962b847335daeae19bda1 languageName: node linkType: hard -"@polkadot/networks@npm:13.2.3, @polkadot/networks@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/networks@npm:13.2.3" +"@polkadot/networks@npm:13.2.2, @polkadot/networks@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/networks@npm:13.2.2" dependencies: - "@polkadot/util": "npm:13.2.3" + "@polkadot/util": "npm:13.2.2" "@substrate/ss58-registry": "npm:^1.51.0" tslib: "npm:^2.8.0" - checksum: 10/83c4d6321b67c8a5eaf55189dba2180e49600d12ebd55fe861780241fbe8969c972a8b184c91b64a03880c74502889f35ec2eef124f7288e27f2e77ecc4f5e39 + checksum: 10/a1282e7104ed0c3ca0c8b42db115fa95ae99e03ea878e1837db92b04fada55c0ed7a55a63c2d36d248ec467e471e72c49026f75233eddd7dbd7037e3a1c81bb2 languageName: node linkType: hard -"@polkadot/rpc-augment@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/rpc-augment@npm:15.0.1" +"@polkadot/rpc-augment@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/rpc-augment@npm:14.2.3" dependencies: - "@polkadot/rpc-core": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/rpc-core": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/c004560e2d1e477766e410f8b87e198246f869f5a2daf5359e772b974630c2bdca273815fe43ff35d2ee87e4932696030afd307397fd286dab84f7d26feaf47b + checksum: 10/c2f37cd28578147a27424f7ef81c11afca8ab2b81aaddad5047c1445d1ca389047edf5c1d41e9b7b8d5ebc32062eff7f5b6863f10abb5355d38031d841c4d293 languageName: node linkType: hard -"@polkadot/rpc-core@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/rpc-core@npm:15.0.1" +"@polkadot/rpc-core@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/rpc-core@npm:14.2.3" dependencies: - "@polkadot/rpc-augment": "npm:15.0.1" - "@polkadot/rpc-provider": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/rpc-augment": "npm:14.2.3" + "@polkadot/rpc-provider": "npm:14.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.8.0" - checksum: 10/4a24a3900008e54cdfdc5b23ddf9b9af77114dac5b73c339630e239af588f75e08128a0b826726f0d82022f23cc3e08213c1902fa5af573319b1b8c52e91d290 + checksum: 10/56e96c2ad714c70361b2d5fd2e7f38e5653ba545966cfa23d82750b26c3585a790175cd18e60178408c1810ee1a9534d38e667d1a4d598f76377d3b9dd7b67eb languageName: node linkType: hard -"@polkadot/rpc-provider@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/rpc-provider@npm:15.0.1" +"@polkadot/rpc-provider@npm:14.2.3, @polkadot/rpc-provider@npm:^14.0.1": + version: 14.2.3 + resolution: "@polkadot/rpc-provider@npm:14.2.3" dependencies: - "@polkadot/keyring": "npm:^13.2.3" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-support": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" - "@polkadot/util-crypto": "npm:^13.2.3" - "@polkadot/x-fetch": "npm:^13.2.3" - "@polkadot/x-global": "npm:^13.2.3" - "@polkadot/x-ws": "npm:^13.2.3" + "@polkadot/keyring": "npm:^13.2.2" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-support": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" + "@polkadot/x-fetch": "npm:^13.2.2" + "@polkadot/x-global": "npm:^13.2.2" + "@polkadot/x-ws": "npm:^13.2.2" "@substrate/connect": "npm:0.8.11" eventemitter3: "npm:^5.0.1" mock-socket: "npm:^9.3.1" @@ -1052,116 +1378,116 @@ __metadata: dependenciesMeta: "@substrate/connect": optional: true - checksum: 10/8014c8697a6670a8f8e948b2864eb7320ee2161fce7c89e80a6e052c9cd7c2c3e909b721f09369be8e873d295f5d6825890028f30bb8fa3df722b55b3490547b + checksum: 10/3f1be813a62ef271eddff4d5d7aa680f40d90c43b6ba60cb7296ccae0ad1ca3c9508fa90c933f5859676903efd4d3f1c366b72dde7c7033afec561972a5958d8 languageName: node linkType: hard -"@polkadot/types-augment@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types-augment@npm:15.0.1" +"@polkadot/types-augment@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/types-augment@npm:14.2.3" dependencies: - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/b735c6332624b49d5ce2e025db04bc5b9376fe20ab998d89cdb4d969960417c98877f1db9f5b8d680c25fc5c42b761932c5327ae28cb2c2f957be21191f3a175 + checksum: 10/7a3bb4945356e1a49f1b69042fcdb9b81b02cb60b521f5b89c79e484cf2808492bbc46d7e6b1f5703a9763d9c5fa0460819dcbe8a5e78056e07e9cb20b8e7dd9 languageName: node linkType: hard -"@polkadot/types-codec@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types-codec@npm:15.0.1" +"@polkadot/types-codec@npm:14.2.3, @polkadot/types-codec@npm:^14.0.1, @polkadot/types-codec@npm:^14.2.3": + version: 14.2.3 + resolution: "@polkadot/types-codec@npm:14.2.3" dependencies: - "@polkadot/util": "npm:^13.2.3" - "@polkadot/x-bigint": "npm:^13.2.3" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/x-bigint": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/b0ffa0f32022165d44bd0b4cc8bb46ea3d8e6bc6e7f457ecd1dd1a637185934a6727c01a54973c454600e04a3f143fa4377cf5f1f4e265c05be5c42ae15555d0 + checksum: 10/6bc9ae7f221e918f9f1d69feb4339f2995e485a89ab6748d1902c257dcef6a12a615050af841b9e5201bd497c90b86774fdc97990c61635efcd04135a22c8109 languageName: node linkType: hard -"@polkadot/types-create@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types-create@npm:15.0.1" +"@polkadot/types-create@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/types-create@npm:14.2.3" dependencies: - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/870756f6a2b41822ec5f76e71a326b1b42222e885b397c8035c4cd610b2c0210889ffe59d4a362f66cf65bf81aee80b4b5c6f2f451752f4932544f74849324c5 + checksum: 10/6e5cdc55680ebb69c3f9e879f5d62d1beccd42a8d5455872870b03e9091909835110f9499cebeb332cb46519ca8435732f8faededf360d79794c3c80b1d2d0ca languageName: node linkType: hard -"@polkadot/types-known@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types-known@npm:15.0.1" +"@polkadot/types-known@npm:14.2.3, @polkadot/types-known@npm:^14.0.1": + version: 14.2.3 + resolution: "@polkadot/types-known@npm:14.2.3" dependencies: - "@polkadot/networks": "npm:^13.2.3" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/types-create": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" + "@polkadot/networks": "npm:^13.2.2" + "@polkadot/types": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/types-create": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/46de44ecd996b77142c3896330f6a46117d130c545cb81047b4d699b8d094883f4939f7b6bc21591cdde684858515e59b944951c485551344e81519f60c15480 + checksum: 10/c54dc15315c6ccc7cdfea4b859fd98338e0021f7be17a6788712e533ada2349be138b0f8861d8408655d8ef9fe4cb70fa0c4103fad46580370b579ec985314d6 languageName: node linkType: hard -"@polkadot/types-support@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types-support@npm:15.0.1" +"@polkadot/types-support@npm:14.2.3": + version: 14.2.3 + resolution: "@polkadot/types-support@npm:14.2.3" dependencies: - "@polkadot/util": "npm:^13.2.3" + "@polkadot/util": "npm:^13.2.2" tslib: "npm:^2.8.0" - checksum: 10/d1af7ba96516f3115d1d7224933f93e91b2bb3c9624cdc54ee1767f23396e342d54a09e671933c5ad828ade8b2b58e7e2eeacac0b179e1fe8b86a269e3f395b6 + checksum: 10/f3c50a768b8fefa0d93034852f77fdb5d6180318958943dcc1d0be7b8d9a29a90e968fdeb15cdc855a7cfef7bd6523c4bd89bf79569b572fc730280310b8fbab languageName: node linkType: hard -"@polkadot/types@npm:15.0.1": - version: 15.0.1 - resolution: "@polkadot/types@npm:15.0.1" +"@polkadot/types@npm:14.2.3, @polkadot/types@npm:^14.0.1, @polkadot/types@npm:^14.2.3": + version: 14.2.3 + resolution: "@polkadot/types@npm:14.2.3" dependencies: - "@polkadot/keyring": "npm:^13.2.3" - "@polkadot/types-augment": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/types-create": "npm:15.0.1" - "@polkadot/util": "npm:^13.2.3" - "@polkadot/util-crypto": "npm:^13.2.3" + "@polkadot/keyring": "npm:^13.2.2" + "@polkadot/types-augment": "npm:14.2.3" + "@polkadot/types-codec": "npm:14.2.3" + "@polkadot/types-create": "npm:14.2.3" + "@polkadot/util": "npm:^13.2.2" + "@polkadot/util-crypto": "npm:^13.2.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.8.0" - checksum: 10/811def19d07737b819901d713a8dfca2abb35c7f9b56813ac8061669461dcdde3a91d590baeea303ef795d6f4eaf722f0635569d4ec6b9b0bc7cf5835c330703 + checksum: 10/96ee678bbea707c2bce674c7489b1598ea22ce3315994c7807482c3d032bf747f96f5a4cd229196398b80a901cdd0039dd62dcd171012f5751ab9f1a9c186b45 languageName: node linkType: hard -"@polkadot/util-crypto@npm:13.2.3, @polkadot/util-crypto@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/util-crypto@npm:13.2.3" +"@polkadot/util-crypto@npm:13.2.2": + version: 13.2.2 + resolution: "@polkadot/util-crypto@npm:13.2.2" dependencies: "@noble/curves": "npm:^1.3.0" "@noble/hashes": "npm:^1.3.3" - "@polkadot/networks": "npm:13.2.3" - "@polkadot/util": "npm:13.2.3" + "@polkadot/networks": "npm:13.2.2" + "@polkadot/util": "npm:13.2.2" "@polkadot/wasm-crypto": "npm:^7.4.1" "@polkadot/wasm-util": "npm:^7.4.1" - "@polkadot/x-bigint": "npm:13.2.3" - "@polkadot/x-randomvalues": "npm:13.2.3" + "@polkadot/x-bigint": "npm:13.2.2" + "@polkadot/x-randomvalues": "npm:13.2.2" "@scure/base": "npm:^1.1.7" tslib: "npm:^2.8.0" peerDependencies: - "@polkadot/util": 13.2.3 - checksum: 10/47baf5cab1bd2ca20633ef324a35d7b8a4ecb6bff41eb9e0dac8229495d3a7e74f7bc685d652dd465c9339598fa4e885abce8f539329e77b32a1aa0920169825 + "@polkadot/util": 13.2.2 + checksum: 10/7f00b4a89be841cfa67c2a25717c21ead158ed52b3f166b5140dae6b2b20e011823b2c06b7df7df95216d964265db151d8785e3db8823ab62ffcc8986d769cd7 languageName: node linkType: hard -"@polkadot/util@npm:13.2.3, @polkadot/util@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/util@npm:13.2.3" +"@polkadot/util@npm:13.2.2": + version: 13.2.2 + resolution: "@polkadot/util@npm:13.2.2" dependencies: - "@polkadot/x-bigint": "npm:13.2.3" - "@polkadot/x-global": "npm:13.2.3" - "@polkadot/x-textdecoder": "npm:13.2.3" - "@polkadot/x-textencoder": "npm:13.2.3" + "@polkadot/x-bigint": "npm:13.2.2" + "@polkadot/x-global": "npm:13.2.2" + "@polkadot/x-textdecoder": "npm:13.2.2" + "@polkadot/x-textencoder": "npm:13.2.2" "@types/bn.js": "npm:^5.1.6" bn.js: "npm:^5.2.1" tslib: "npm:^2.8.0" - checksum: 10/45c493224599a003cb52c98d0be502088e3e05dc74e1c505d579aae77341bf1769fbe1ca6c13df8b581235690f78c3b36f8525d378af9df5663a1c21becc4766 + checksum: 10/acf145fdf49ad7e39a8df2c24eba510956281196902684fa42ce3b4f2152863478a5410b9f64b9a73ab689f37b64f8e01af15027a29812417b1333f143d14c21 languageName: node linkType: hard @@ -1245,77 +1571,203 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-bigint@npm:13.2.3, @polkadot/x-bigint@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-bigint@npm:13.2.3" +"@polkadot/x-bigint@npm:13.2.2, @polkadot/x-bigint@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-bigint@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" tslib: "npm:^2.8.0" - checksum: 10/1ede67d15b2e66eb8546e6f7ea9bd3599969eda2a75339a5e7077d1db67e1cebd61b5b4522c344ee3210e3117e9c8c36fe623fc691e0d4a8c0f9b0dc39b768a5 + checksum: 10/00cdd6298a82971c700b1cb9d9dda26423a46fe86044fe74c5c14cb15d70ca912f044a1c935416fb363b58f84544e7f7a5a79eedefccdfbc56e5185637781c90 languageName: node linkType: hard -"@polkadot/x-fetch@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-fetch@npm:13.2.3" +"@polkadot/x-fetch@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-fetch@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" node-fetch: "npm:^3.3.2" tslib: "npm:^2.8.0" - checksum: 10/55104a2f6ca60acc25e15becf67988f19e702afa985283451436ca42a417e04d87f91332a1afba78537691c370f7a053ec6e07ba111464d25ccbecc99864eac7 + checksum: 10/19110cbe80ec105eb4f86f162f6f86a930e18bd189d422dbb724a5a0cf7ad83167ed86671835fd43948f5f92295b570ec7bb997f308359bf9ddb6cea335b4438 languageName: node linkType: hard -"@polkadot/x-global@npm:13.2.3, @polkadot/x-global@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-global@npm:13.2.3" +"@polkadot/x-global@npm:13.2.2, @polkadot/x-global@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-global@npm:13.2.2" dependencies: tslib: "npm:^2.8.0" - checksum: 10/163b11c938c4496a94fd476b909b8358007c17e9a251d627c4114d14419c8cd462d8246a580a28e859c91d71c384fc3acfeb27d2e0559c4a443226cbb25df560 + checksum: 10/9b2747c6b581943c82d6228e886fd491ea41068e07d1da3654c9acc27ace5e1b8682c6e9f8ceaffe68aa88fb386758ebe70f595fde8a5a2544361999e39e74f1 languageName: node linkType: hard -"@polkadot/x-randomvalues@npm:13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-randomvalues@npm:13.2.3" +"@polkadot/x-randomvalues@npm:13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-randomvalues@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" tslib: "npm:^2.8.0" peerDependencies: - "@polkadot/util": 13.2.3 + "@polkadot/util": 13.2.2 "@polkadot/wasm-util": "*" - checksum: 10/864b94a2f031582095afc4e0b2ecbb315cb76122b35f359f236704d8e753b0225c7a6f78a68c990bfbb7b2ea8287d05f0fcb9c27a3c2bd785408de3074fa9636 + checksum: 10/d30e37bc659f4fe045b421e80fc37849e92351ff64244c90651f35ef1fb8722ad1d8d421fc459d039a5f53b9072635f4f531a5a0fd029269025a86178b44b327 languageName: node linkType: hard -"@polkadot/x-textdecoder@npm:13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-textdecoder@npm:13.2.3" +"@polkadot/x-textdecoder@npm:13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-textdecoder@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" tslib: "npm:^2.8.0" - checksum: 10/e67cfb4677cd8a43ed7678421562280947bf22b13d8d4b0ac49e20a34939bbd7de02b8e51a1f5f138c0884847d7c782fb6bbb13d2d7556d1bb7a4e39508c949d + checksum: 10/8fcf79d362141f011123230f7f82f9145cd7c0c7f2ac8caa89f0b8a59e457aad6ffb6e05dee98bd7e254dbd87cce6660dea50e7a41b09830f81e1e350f49a276 languageName: node linkType: hard -"@polkadot/x-textencoder@npm:13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-textencoder@npm:13.2.3" +"@polkadot/x-textencoder@npm:13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-textencoder@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" tslib: "npm:^2.8.0" - checksum: 10/54630e2ca156cda7d5f8eb3d5283f43d2729c579d032d9d2b088c2a599d3be905c237d9ebcca3fd432e1fca9d1d0349585e4bf8e27000946a2d6f3c8fef1009d + checksum: 10/e382f7b1601b11b91fa17242af0357ecd7db4bd7f6db2cea88eef9a5bb3f64271089569b34e28685d62f8e89e870876f2872ec2f34a8aee44515f47e79cd4f0f languageName: node linkType: hard -"@polkadot/x-ws@npm:^13.2.3": - version: 13.2.3 - resolution: "@polkadot/x-ws@npm:13.2.3" +"@polkadot/x-ws@npm:^13.2.2": + version: 13.2.2 + resolution: "@polkadot/x-ws@npm:13.2.2" dependencies: - "@polkadot/x-global": "npm:13.2.3" + "@polkadot/x-global": "npm:13.2.2" tslib: "npm:^2.8.0" ws: "npm:^8.18.0" - checksum: 10/35c66899e1bdfeaf2956d663124fc4c33fb1f0b47f3e14f9f9aa8f1e291a7a14cae264aa15baadf7ba85f5c314fbfce61b1fc4bfad3b1d3fc51c1f1dfa60659d + checksum: 10/f98fcf8350c691c78e2a06487dd57071e13d64014c8192fae2b4fd75435edd946bc4847142933f58046c93709160c912d7d8fa990b8f02b4db929f610b34c77b + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.25.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-android-arm64@npm:4.25.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.25.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.25.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.25.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.25.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.25.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.25.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.25.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.25.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.25.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.25.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.25.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.25.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.25.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.25.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.25.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.25.0": + version: 4.25.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.25.0" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1326,23 +1778,48 @@ __metadata: languageName: node linkType: hard -"@shikijs/engine-oniguruma@npm:^1.24.0": - version: 1.24.0 - resolution: "@shikijs/engine-oniguruma@npm:1.24.0" +"@shikijs/core@npm:1.22.0": + version: 1.22.0 + resolution: "@shikijs/core@npm:1.22.0" + dependencies: + "@shikijs/engine-javascript": "npm:1.22.0" + "@shikijs/engine-oniguruma": "npm:1.22.0" + "@shikijs/types": "npm:1.22.0" + "@shikijs/vscode-textmate": "npm:^9.3.0" + "@types/hast": "npm:^3.0.4" + hast-util-to-html: "npm:^9.0.3" + checksum: 10/a9e6699e319eaaa82c6b0c166a0e22c039d716df4be7a5179c232bd25dbfc2b30b538b95ebe449ecf1fa6107675f408324f04772b99e7156041dfda69ae0dbd9 + languageName: node + linkType: hard + +"@shikijs/engine-javascript@npm:1.22.0": + version: 1.22.0 + resolution: "@shikijs/engine-javascript@npm:1.22.0" dependencies: - "@shikijs/types": "npm:1.24.0" + "@shikijs/types": "npm:1.22.0" "@shikijs/vscode-textmate": "npm:^9.3.0" - checksum: 10/74b0dc760717155d7df6fd05d41b89a102b264de28941c4469ef8879af0c764184a6cc5cae1ff8121a293baf56ec67c7b4178631017853ea35f6ff60f5a8a831 + oniguruma-to-js: "npm:0.4.3" + checksum: 10/bd0b75112a5fd085b50d49e84f1b3f0a599e669be10b947901cc3f0dd2d3baa0d7238b4fa356ccc570cfb9c9c0856a870e17cfdb364bfac77c498a39b96b2bbd languageName: node linkType: hard -"@shikijs/types@npm:1.24.0, @shikijs/types@npm:^1.24.0": - version: 1.24.0 - resolution: "@shikijs/types@npm:1.24.0" +"@shikijs/engine-oniguruma@npm:1.22.0": + version: 1.22.0 + resolution: "@shikijs/engine-oniguruma@npm:1.22.0" + dependencies: + "@shikijs/types": "npm:1.22.0" + "@shikijs/vscode-textmate": "npm:^9.3.0" + checksum: 10/5dca4f84f77536b0f1cfc0c0280e9fa4d316d93bf089ad337c6953e38fbafcd5c98a2eea6429c8a59920c5bb3fa696ed2ba682ed550c97e74d57a3aa1b3b0cce + languageName: node + linkType: hard + +"@shikijs/types@npm:1.22.0": + version: 1.22.0 + resolution: "@shikijs/types@npm:1.22.0" dependencies: "@shikijs/vscode-textmate": "npm:^9.3.0" "@types/hast": "npm:^3.0.4" - checksum: 10/643c0e3df640fab990cb0ad9818ade22ddd8e332b8fd648a731245c386e19022374f16c8079ea9b28730151b9bb9109ccc7ca4c985de013742e1e985a88fc322 + checksum: 10/5313d7bad18820e3887460d0cf506ca265b752fdc826ee962a653385040df7ea12e785a0bb4233335ca2ccc9a0d51d57e97fe8e90543ab704ce507437dbeb225 languageName: node linkType: hard @@ -1378,6 +1855,13 @@ __metadata: languageName: node linkType: hard +"@sqltools/formatter@npm:^1.2.5": + version: 1.2.5 + resolution: "@sqltools/formatter@npm:1.2.5" + checksum: 10/ce9335025cd033f8f1ac997d290af22d5a5cdbd5f04cbf0fa18d5388871e980a4fc67875037821799b356032f851732dee1017b2ee7de84f5c2a2b8bfd5604f5 + languageName: node + linkType: hard + "@substrate/asset-transfer-api-registry@npm:^0.2.24": version: 0.2.24 resolution: "@substrate/asset-transfer-api-registry@npm:0.2.24" @@ -1389,21 +1873,24 @@ __metadata: version: 0.0.0-use.local resolution: "@substrate/asset-transfer-api@workspace:." dependencies: - "@polkadot/api": "npm:15.0.1" - "@polkadot/api-augment": "npm:15.0.1" - "@polkadot/types": "npm:15.0.1" - "@polkadot/types-codec": "npm:15.0.1" - "@polkadot/util": "npm:13.2.3" - "@polkadot/util-crypto": "npm:13.2.3" + "@acala-network/chopsticks-core": "npm:^1.0.1" + "@acala-network/chopsticks-testing": "npm:^1.0.1" + "@polkadot/api": "npm:^14.2.3" + "@polkadot/api-augment": "npm:^14.2.3" + "@polkadot/types": "npm:^14.2.3" + "@polkadot/types-codec": "npm:^14.2.3" + "@polkadot/util": "npm:^13.2.3" + "@polkadot/util-crypto": "npm:^13.2.3" "@substrate/asset-transfer-api-registry": "npm:^0.2.24" "@substrate/dev": "npm:^0.9.0" "@types/cli-progress": "npm:^3" ansi-colors: "npm:^4.1.3" chalk: "npm:5.3.0" cli-progress: "npm:^3.12.0" - typedoc: "npm:^0.27.2" + typedoc: "npm:^0.26.10" typedoc-plugin-missing-exports: "npm:^3.0.0" typedoc-theme-hierarchy: "npm:^5.0.3" + vitest: "npm:^2.1.8" languageName: unknown linkType: soft @@ -1485,6 +1972,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/once@npm:1": + version: 1.1.2 + resolution: "@tootallnate/once@npm:1.1.2" + checksum: 10/e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1551,6 +2045,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -1560,7 +2061,7 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^3.0.4": +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": version: 3.0.4 resolution: "@types/hast@npm:3.0.4" dependencies: @@ -1604,6 +2105,15 @@ __metadata: languageName: node linkType: hard +"@types/mdast@npm:^4.0.0": + version: 4.0.4 + resolution: "@types/mdast@npm:4.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10/efe3ec11b9ee0015a396c4fb4cd1b6f31b51b8ae9783c59560e6fc0bf6c2fa1dcc7fccaf45fa09a6c8b3397fab9dc8d431433935cae3835caa70a18f7fc775f8 + languageName: node + linkType: hard + "@types/node@npm:*": version: 18.11.18 resolution: "@types/node@npm:18.11.18" @@ -1618,7 +2128,7 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:*": +"@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.3 resolution: "@types/unist@npm:3.0.3" checksum: 10/96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a @@ -1759,23 +2269,113 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.2.0": +"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 10/c6fe89a505e513a7592e1438280db1c075764793a2397877ff1351721fe8792a966a5359769e30242b3cd023f2efb9e63ca2ca88019d73b564488cc20e3eab12 languageName: node linkType: hard -"abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 +"@vitest/expect@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/expect@npm:2.1.8" + dependencies: + "@vitest/spy": "npm:2.1.8" + "@vitest/utils": "npm:2.1.8" + chai: "npm:^5.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10/3594149dd67dfac884a90f8b6a35687cdddd2f5f764562819bf7b66ae2eacfd4aa5e8914155deb4082fbe5a3792dced2fd7e59a948ffafe67acba4d2229dfe5f languageName: node linkType: hard -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" +"@vitest/mocker@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/mocker@npm:2.1.8" + dependencies: + "@vitest/spy": "npm:2.1.8" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.12" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/f04060f42102caa4cca72059e63c1ecae8b8e091aaa61a2d4a914b129fc711ada4ad117eb0184e49e363757784ed1117fdbf9f4a81a45fe575fd92769740a970 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.8, @vitest/pretty-format@npm:^2.1.8": + version: 2.1.8 + resolution: "@vitest/pretty-format@npm:2.1.8" + dependencies: + tinyrainbow: "npm:^1.2.0" + checksum: 10/f0f60c007424194887ad398d202867d58d850154de327993925041e2972357544eea95a22e0bb3a62a470b006ff8de5f691d2078708dcd7f625e24f8a06b26e7 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/runner@npm:2.1.8" + dependencies: + "@vitest/utils": "npm:2.1.8" + pathe: "npm:^1.1.2" + checksum: 10/27f265a3ab1e20297b948b06232bfa4dc9fda44d1f9bb6206baa9e6fa643b71143ebfd2d1771570296b7ee74a12d684e529a830f545ad61235cefb454e94a8e9 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/snapshot@npm:2.1.8" + dependencies: + "@vitest/pretty-format": "npm:2.1.8" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + checksum: 10/71edf4f574d317579c605ed0a7ecab7ee96fddcebc777bd130774a770ddc692c538f9f5b3dfde89af83ecb36f7338fe880943c83cede58f55e3556768a1a0749 + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/spy@npm:2.1.8" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10/9a1cb9cf6b23c122681469b5890d91ca26fc8d74953b3d46d293a5d2a4944490106891f6a178cd732ab7a8abbda339f43681c81d1594565ecc3bf3e7f9b7735f + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/utils@npm:2.1.8" + dependencies: + "@vitest/pretty-format": "npm:2.1.8" + loupe: "npm:^3.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10/be1f4254347199fb5c1d9de8e4537dad4af3f434c033e7cd023165bd4b7e9de16fa0f86664256ab331120585df95ed6be8eea58b209b510651b49f6482051733 + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10/ed84af329f1828327798229578b4fe03a4dd2596ba304083ebd2252666bdc1d7647d66d0b18704477e1f8aa315f055944aa6e859afebd341f12d0a53c37b4b40 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 checksum: 10/d4371eaef7995530b5b5ca4183ff6f062ca17901a6d3f673c9ac011b01ede37e7a1f7f61f8f5cfe709e88054757bb8f3277dc4061087cdf4f2a1f90ccbcdb977 @@ -1800,6 +2400,15 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.1.3": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: 10/dd210ba2a2e2482028f027b1156789744aadbfd773a6c9dd8e4e8001930d5af82382abe19a69240307b1d8003222ce6b0542935038313434b900e351914fc15f + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -1856,6 +2465,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10/495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -1881,6 +2497,20 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 10/6737469ba353b5becf29e4dc3680736b9caa06d300bda6548812a8fee63ae7d336d756f88572fa6b5219aed36698d808fa55f62af3e7e6845c7a1dc77d240edb + languageName: node + linkType: hard + "anymatch@npm:^3.0.3": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -1891,6 +2521,13 @@ __metadata: languageName: node linkType: hard +"app-root-path@npm:^3.1.0": + version: 3.1.0 + resolution: "app-root-path@npm:3.1.0" + checksum: 10/b4cdab5f7e51ec43fa04c97eca2adedf8e18d6c3dd21cd775b70457c5e71f0441c692a49dcceb426f192640b7393dcd41d85c36ef98ecb7c785a53159c912def + languageName: node + linkType: hard + "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -1931,6 +2568,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10/a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.6 resolution: "async@npm:3.2.6" @@ -1938,6 +2582,31 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: 10/3ab6d2cf46b31394b4607e935ec5c1c3c4f60f3e30f0913d35ea74b51b3585e84f590d09e58067f11762eec71c87d25314ce859030983dc0e4397eed21daa12e + languageName: node + linkType: hard + +"axios@npm:^1.7.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10/7f875ea13b9298cd7b40fd09985209f7a38d38321f1118c701520939de2f113c4ba137832fe8e3f811f99a38e12c8225481011023209a77b0c0641270e20cde1 + languageName: node + linkType: hard + "babel-jest@npm:^29.7.0": version: 29.7.0 resolution: "babel-jest@npm:29.7.0" @@ -2021,6 +2690,33 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10/669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10/593d5ae975ffba15fbbb4788fe5abd1e125afbab849ab967ab43691d27d6483751805d98cb92f7ac24a2439a8a8678cd0131c535d5d63de84e383b0ce2786133 + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10/b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 + languageName: node + linkType: hard + "bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" @@ -2028,6 +2724,13 @@ __metadata: languageName: node linkType: hard +"boolean@npm:^3.0.1": + version: 3.2.0 + resolution: "boolean@npm:3.2.0" + checksum: 10/d28a49dcaeef7fe10cf9fdf488214d3859f07350be8f5caa0c73ec621baf20650e5da6523262e5ce9221909519d4261c16d8430a5bf307fee9ef0e170cdb29f3 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -2095,6 +2798,59 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10/997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10/b6bc68237ebf29bdacae48ce60e5e28fc53ae886301f2ad9496618efac49427ed79096750033e7eab1897a4f26ae374ace49106a5758f38fb70c78c9fda2c3b1 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10/002769a0fbfc51c062acd2a59df465a2a947916b02ac50b56c69ec6c018ee99ac3e7f4dd7366334ea847f1ecacf4defaa61bcd2ac283db50156ce1f1d8c8ad42 + languageName: node + linkType: hard + +"cacache@npm:^15.2.0": + version: 15.3.0 + resolution: "cacache@npm:15.3.0" + dependencies: + "@npmcli/fs": "npm:^1.0.0" + "@npmcli/move-file": "npm:^1.0.1" + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + glob: "npm:^7.1.4" + infer-owner: "npm:^1.0.4" + lru-cache: "npm:^6.0.0" + minipass: "npm:^3.1.1" + minipass-collect: "npm:^1.0.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.2" + mkdirp: "npm:^1.0.3" + p-map: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + rimraf: "npm:^3.0.2" + ssri: "npm:^8.0.1" + tar: "npm:^6.0.2" + unique-filename: "npm:^1.1.1" + checksum: 10/1432d84f3f4b31421cf47c15e6956e5e736a93c65126b0fd69ae5f70643d29be8996f33d4995204f578850de5d556268540911c04ecc1c026375b18600534f08 + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -2149,6 +2905,26 @@ __metadata: languageName: node linkType: hard +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 10/48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + languageName: node + linkType: hard + +"chai@npm:^5.1.2": + version: 5.1.2 + resolution: "chai@npm:5.1.2" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10/e8c2bbc83cb5a2f87130d93056d4cfbbe04106e12aa798b504816dbe3fa538a9f68541b472e56cbf0f54558b501d7e31867d74b8218abcd5a8cc8ba536fba46c + languageName: node + linkType: hard + "chalk@npm:5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -2167,7 +2943,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2": +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2184,6 +2970,34 @@ __metadata: languageName: node linkType: hard +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 10/7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d + languageName: node + linkType: hard + +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 10/7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10/d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10/115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -2212,6 +3026,22 @@ __metadata: languageName: node linkType: hard +"cli-highlight@npm:^2.1.11": + version: 2.1.11 + resolution: "cli-highlight@npm:2.1.11" + dependencies: + chalk: "npm:^4.0.0" + highlight.js: "npm:^10.7.1" + mz: "npm:^2.4.0" + parse5: "npm:^5.1.1" + parse5-htmlparser2-tree-adapter: "npm:^6.0.0" + yargs: "npm:^16.0.0" + bin: + highlight: bin/highlight + checksum: 10/05d2b5beb8a4d3259f693517d013bf53d04ad20f470b77c3d02e051963092fae388388e3127f67d3679884a0c32cb855bf590292017c5e68c0f8d86f4b8e146e + languageName: node + linkType: hard + "cli-progress@npm:^3.12.0": version: 3.12.0 resolution: "cli-progress@npm:3.12.0" @@ -2221,6 +3051,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10/db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -2287,6 +3128,36 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^2.0.7": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 + languageName: node + linkType: hard + +"comlink@npm:^4.4.1": + version: 4.4.2 + resolution: "comlink@npm:4.4.2" + checksum: 10/ecee53b5b4536b3aa3f7636c383f831e68fbc013def77665cc7fad873d72cfa23b994e1ec4b49e83e4e909c1089a03acae03a523e33a5e5ed938cdb613456434 + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^2.0.0": + version: 2.0.3 + resolution: "comma-separated-tokens@npm:2.0.3" + checksum: 10/e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2294,6 +3165,16 @@ __metadata: languageName: node linkType: hard +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 10/83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 + languageName: node + linkType: hard + "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -2332,6 +3213,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.0": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/c95062469d4bdbc1f099454d01c0e77177a3733012d41bf907a71eb8d22d2add43b5adf6a0a14ef4e7feaf804082714d6c262ef4557a1c480b86786c120d18e2 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -2350,7 +3242,21 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"dateformat@npm:^4.6.3": + version: 4.6.3 + resolution: "dateformat@npm:4.6.3" + checksum: 10/5c149c91bf9ce2142c89f84eee4c585f0cb1f6faf2536b1af89873f862666a28529d1ccafc44750aa01384da2197c4f76f4e149a3cc0c1cb2c46f5cc45f2bcb5 + languageName: node + linkType: hard + +"dayjs@npm:^1.11.9": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.7": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -2362,6 +3268,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10/d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + "dedent@npm:^1.0.0": version: 1.5.1 resolution: "dedent@npm:1.5.1" @@ -2374,6 +3289,20 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10/a529b81e2ef8821621d20a36959a0328873a3e49d393ad11f8efe8559f31239494c2eb889b80342808674c475802ba95b9d6c4c27641b9a029405104c1b59fcf + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -2388,6 +3317,35 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10/b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -2402,6 +3360,20 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.0": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10/6ff05a7561f33603df87c45e389c9ac0a95e3c056be3da1a0c4702149e3a7f6fe5ffbb294478687ba51a9e95f3a60e8b6b9005993acd79c292c7d15f71964b6b + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10/b4ea018d623e077bd395f168a9e81db77370dde36a5b01d067f2ad7989924a81d31cb547ff764acb2aa25d50bb7fdde0b0a93bec02212b0cb430621623246d39 + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -2409,6 +3381,29 @@ __metadata: languageName: node linkType: hard +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 10/832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"devlop@npm:^1.0.0": + version: 1.1.0 + resolution: "devlop@npm:1.1.0" + dependencies: + dequal: "npm:^2.0.0" + checksum: 10/3cc5f903d02d279d6dc4aa71ab6ed9898b9f4d1f861cc5421ce7357893c21b9520de78afb203c92bd650a6977ad0ca98195453a0707a39958cf5fea3b0a8ddd8 + languageName: node + linkType: hard + +"diff-match-patch@npm:^1.0.0": + version: 1.0.5 + resolution: "diff-match-patch@npm:1.0.5" + checksum: 10/fd1ab417eba9559bda752a4dfc9a8ac73fa2ca8b146d29d153964b437168e301c09d8a688fae0cd81d32dc6508a4918a94614213c85df760793f44e245173bb6 + languageName: node + linkType: hard + "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -2434,6 +3429,20 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^16.0.3, dotenv@npm:^16.4.5": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 10/55a3134601115194ae0f924e54473459ed0d9fc340ae610b676e248cca45aa7c680d86365318ea964e6da4e2ea80c4514c1adab5adb43d6867fb57ff068f95c8 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10/9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 + languageName: node + linkType: hard + "ejs@npm:^3.1.10": version: 3.1.10 resolution: "ejs@npm:3.1.10" @@ -2466,15 +3475,31 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10/915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 + languageName: node + linkType: hard + +"encoding@npm:^0.1.12, encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" dependencies: iconv-lite: "npm:^0.6.2" checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f languageName: node linkType: hard +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + "entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" @@ -2505,6 +3530,116 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.5.4": + version: 1.5.4 + resolution: "es-module-lexer@npm:1.5.4" + checksum: 10/f29c7c97a58eb17640dcbd71bd6ef754ad4f58f95c3073894573d29dae2cad43ecd2060d97ed5b866dfb7804d5590fb7de1d2c5339a5fceae8bd60b580387fc5 + languageName: node + linkType: hard + +"es6-error@npm:^4.1.1": + version: 4.1.1 + resolution: "es6-error@npm:4.1.1" + checksum: 10/48483c25701dc5a6376f39bbe2eaf5da0b505607ec5a98cd3ade472c1939242156660636e2e508b33211e48e88b132d245341595c067bd4a95ac79fa7134da06 + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -2684,6 +3819,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10/a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -2691,6 +3835,13 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10/49ff46c3a7facbad3decb31f597063e761785d7fdb3920d4989d7b08c97a61c2f51183e2f3a03130c9088df88d4b489b1b79ab632219901f184f85158508f4c8 + languageName: node + linkType: hard + "eventemitter3@npm:^5.0.1": version: 5.0.1 resolution: "eventemitter3@npm:5.0.1" @@ -2698,6 +3849,13 @@ __metadata: languageName: node linkType: hard +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be + languageName: node + linkType: hard + "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -2722,6 +3880,20 @@ __metadata: languageName: node linkType: hard +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10/588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 + languageName: node + linkType: hard + +"expect-type@npm:^1.1.0": + version: 1.1.0 + resolution: "expect-type@npm:1.1.0" + checksum: 10/05fca80ddc7d493a89361f783c6b000750fa04a8226bc24701f3b90adb0efc2fb467f2a0baaed4015a02d8b9034ef5bb87521df9dba980f50b1105bd596ef833 + languageName: node + linkType: hard + "expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -2735,6 +3907,13 @@ __metadata: languageName: node linkType: hard +"fast-copy@npm:^3.0.2": + version: 3.0.2 + resolution: "fast-copy@npm:3.0.2" + checksum: 10/97e1022e2aaa27acf4a986d679310bfd66bfb87fe8da9dd33b698e3e50189484001cf1eeb9670e19b59d9d299828ed86c8da354c954f125995ab2a6331c5f290 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -2776,6 +3955,20 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.1.1": + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: 10/24b27e2023bd5a62f908d97a753b1adb8d89206b260f97727728e00b693197dea2fc2aa3711147a385d0ec6e713569fd533df37a4ef947e08cb65af3019c7ad5 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.1.1": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: 10/dc1f063c2c6ac9533aee14d406441f86783a8984b2ca09b19c2fe281f9ff59d315298bc7bc22fd1f83d26fe19ef2f20e2ddb68e96b15040292e555c5ced0c1e4 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.15.0 resolution: "fastq@npm:1.15.0" @@ -2813,6 +4006,13 @@ __metadata: languageName: node linkType: hard +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10/b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + "filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -2868,6 +4068,37 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10/e3ab42d1097e90d28b913903841e6779eb969b62a64706a3eb983e894a5db000fbd89296f45f08885a0e54cd558ef62e81be1165da9be25a6c44920da10f424c + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10/e3a60480f3a09b12273ce2c5fcb9514d98dd0e528f58656a1b04680225f918d60a2f81f6a368f2f3b937fcee9cfc0cbf16f1ad9a0bc6a3a6e103a84c9a90087e + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10/6adb1cff557328bc6eb8a68da205f9ae44ab0e88d4d9237aaf91eed591ffc64f77411efb9016af7d87f23d0a038c45a788aa1c6634e51175c4efa36c2bc53774 + languageName: node + linkType: hard + "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -2877,6 +4108,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10/18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + "fs-extra@npm:11.1.1": version: 11.1.1 resolution: "fs-extra@npm:11.1.1" @@ -2914,6 +4152,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10/4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" @@ -2923,6 +4171,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -2930,6 +4187,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -2960,6 +4224,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -2974,6 +4251,13 @@ __metadata: languageName: node linkType: hard +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10/2a091ba07fbce22205642543b4ea8aaf068397e1433c00ae0f9de36a3607baf5bcc14da97fbb798cfca6393b3c402031fca06d8b491a44206d6efef391c58537 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -2992,6 +4276,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + languageName: node + linkType: hard + "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -3019,6 +4319,20 @@ __metadata: languageName: node linkType: hard +"global-agent@npm:^3.0.0": + version: 3.0.0 + resolution: "global-agent@npm:3.0.0" + dependencies: + boolean: "npm:^3.0.1" + es6-error: "npm:^4.1.1" + matcher: "npm:^3.0.0" + roarr: "npm:^2.15.3" + semver: "npm:^7.3.2" + serialize-error: "npm:^7.0.1" + checksum: 10/a26d96d1d79af57a8ef957f66cef6f3889a8fa55131f0bbd72b8e1bc340a9b7ed7b627b96eaf5eb14aee08a8b4ad44395090e2cf77146e993f1d2df7abaa0a0d + languageName: node + linkType: hard + "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -3035,6 +4349,16 @@ __metadata: languageName: node linkType: hard +"globalthis@npm:^1.0.1": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10/1f1fd078fb2f7296306ef9dd51019491044ccf17a59ed49d375b576ca108ff37e47f3d29aead7add40763574a992f16a5367dd1e2173b8634ef18556ab719ac4 + languageName: node + linkType: hard + "globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -3049,6 +4373,22 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 10/0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -3077,6 +4417,29 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.0": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -3093,6 +4456,57 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10/7898a9c1788b2862cf0f9c345a6bec77ba4a0c0983c7f19d610c382343d4f98fa260686b225dfb1f88393a66679d2ec58ee310c1d6868c081eda7918f32cc70a + languageName: node + linkType: hard + +"hast-util-to-html@npm:^9.0.3": + version: 9.0.3 + resolution: "hast-util-to-html@npm:9.0.3" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + ccount: "npm:^2.0.0" + comma-separated-tokens: "npm:^2.0.0" + hast-util-whitespace: "npm:^3.0.0" + html-void-elements: "npm:^3.0.0" + mdast-util-to-hast: "npm:^13.0.0" + property-information: "npm:^6.0.0" + space-separated-tokens: "npm:^2.0.0" + stringify-entities: "npm:^4.0.0" + zwitch: "npm:^2.0.4" + checksum: 10/cdf860be567137d045490b0f27590bcafc7032f0725a84667e8950d7bf2ce175d0dfc635b7ce05f3a8d1963ac4c74cae4d93513047429aad909222decdb2f7d1 + languageName: node + linkType: hard + +"hast-util-whitespace@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-whitespace@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10/8c7e9eeb8131fc18702f3a42623eb6b0b09d470347aa8badacac70e6d91f79657ab8c6b57c4c6fee3658cff405fac30e816d1cdfb3ed1fbf6045d0a4555cf4d4 + languageName: node + linkType: hard + +"help-me@npm:^5.0.0": + version: 5.0.0 + resolution: "help-me@npm:5.0.0" + checksum: 10/5f99bd91dae93d02867175c3856c561d7e3a24f16999b08f5fc79689044b938d7ed58457f4d8c8744c01403e6e0470b7896baa344d112b2355842fd935a75d69 + languageName: node + linkType: hard + +"highlight.js@npm:^10.7.1": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10/db8d10a541936b058e221dbde77869664b2b45bca75d660aa98065be2cd29f3924755fbc7348213f17fd931aefb6e6597448ba6fe82afba6d8313747a91983ee + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -3100,6 +4514,13 @@ __metadata: languageName: node linkType: hard +"html-void-elements@npm:^3.0.0": + version: 3.0.0 + resolution: "html-void-elements@npm:3.0.0" + checksum: 10/59be397525465a7489028afa064c55763d9cccd1d7d9f630cca47137317f0e897a9ca26cef7e745e7cff1abc44260cfa407742b243a54261dfacd42230e94fce + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.0": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -3107,6 +4528,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^4.0.1": + version: 4.0.1 + resolution: "http-proxy-agent@npm:4.0.1" + dependencies: + "@tootallnate/once": "npm:1" + agent-base: "npm:6" + debug: "npm:4" + checksum: 10/2e17f5519f2f2740b236d1d14911ea4be170c67419dc15b05ea9a860a22c5d9c6ff4da270972117067cc2cefeba9df5f7cd5e7818fdc6ae52b6acf2a533e5fdd + languageName: node + linkType: hard + "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -3153,6 +4585,20 @@ __metadata: languageName: node linkType: hard +"idb@npm:^8.0.0": + version: 8.0.0 + resolution: "idb@npm:8.0.0" + checksum: 10/6ff47b46ead4bf02ac3a9145bb2f48bac707b950cf33282a72eec8efcda610ffb0a09aab6eea58450f6c87373060bf50998d307085830a302e9e231eee6cd37d + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" @@ -3213,13 +4659,20 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard +"ini@npm:^1.3.4, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.1 resolution: "ip@npm:2.0.1" @@ -3373,6 +4826,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10/96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.9.2 resolution: "jake@npm:10.9.2" @@ -3826,6 +5292,13 @@ __metadata: languageName: node linkType: hard +"joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 10/4b36e3479144ec196425f46b3618f8a96ce7e1b658f091a309cd4906215f5b7a402d7df331a3e0a09681381a658d0c5f039cb3cf6907e0a1e17ed847f5d37775 + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -3902,6 +5375,18 @@ __metadata: languageName: node linkType: hard +"jsondiffpatch@npm:^0.5.0": + version: 0.5.0 + resolution: "jsondiffpatch@npm:0.5.0" + dependencies: + chalk: "npm:^3.0.0" + diff-match-patch: "npm:^1.0.0" + bin: + jsondiffpatch: bin/jsondiffpatch + checksum: 10/ad223d6be7ca8fd9e5c4ac18bf30aeddc6d91375b1784d43c2731aa7555dcddb72b5c2009cf8a32cb3cd232de1b5068c1e65dfa82a01e6575eb07be78c5014e8 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -3987,6 +5472,34 @@ __metadata: languageName: node linkType: hard +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.1.2 + resolution: "loupe@npm:3.1.2" + checksum: 10/8f5734e53fb64cd914aa7d986e01b6d4c2e3c6c56dcbd5428d71c2703f0ab46b5ab9f9eeaaf2b485e8a1c43f865bdd16ec08ae1a661c8f55acdbd9f4d59c607a + languageName: node + linkType: hard + +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.1": + version: 11.0.2 + resolution: "lru-cache@npm:11.0.2" + checksum: 10/25fcb66e9d91eaf17227c6abfe526a7bed5903de74f93bfde380eb8a13410c5e8d3f14fe447293f3f322a7493adf6f9f015c6f1df7a235ff24ec30f366e1c058 + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -3996,6 +5509,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 + languageName: node + linkType: hard + "lru-cache@npm:^7.7.1": version: 7.14.1 resolution: "lru-cache@npm:7.14.1" @@ -4010,6 +5532,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.12": + version: 0.30.14 + resolution: "magic-string@npm:0.30.14" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/8ca0f8937c2824e48ebc70e7e065a193c467713639cc6e5972aaba0fa5417b375a6f62c383410a19a66e618c386bb7253fbd3ccbfb0144bb310f0ba772121f12 + languageName: node + linkType: hard + "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -4050,14 +5581,38 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" +"make-fetch-happen@npm:^9.1.0": + version: 9.1.0 + resolution: "make-fetch-happen@npm:9.1.0" dependencies: - tmpl: "npm:1.0.5" - checksum: 10/4c66ddfc654537333da952c084f507fa4c30c707b1635344eb35be894d797ba44c901a9cebe914aa29a7f61357543ba09b09dddbd7f65b4aee756b450f169f40 - languageName: node - linkType: hard + agentkeepalive: "npm:^4.1.3" + cacache: "npm:^15.2.0" + http-cache-semantics: "npm:^4.1.0" + http-proxy-agent: "npm:^4.0.1" + https-proxy-agent: "npm:^5.0.0" + is-lambda: "npm:^1.0.1" + lru-cache: "npm:^6.0.0" + minipass: "npm:^3.1.3" + minipass-collect: "npm:^1.0.2" + minipass-fetch: "npm:^1.3.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.2" + promise-retry: "npm:^2.0.1" + socks-proxy-agent: "npm:^6.0.0" + ssri: "npm:^8.0.0" + checksum: 10/a868e74fc223a78afb7a1f8115133befdffae84f07a5f5dd9317cbf9f784a8373f28829a73ae3f31060e1b0cb4944e73257733c3b10c314354060fab412b6028 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 10/4c66ddfc654537333da952c084f507fa4c30c707b1635344eb35be894d797ba44c901a9cebe914aa29a7f61357543ba09b09dddbd7f65b4aee756b450f169f40 + languageName: node + linkType: hard "markdown-it@npm:^14.1.0": version: 14.1.0 @@ -4075,6 +5630,32 @@ __metadata: languageName: node linkType: hard +"matcher@npm:^3.0.0": + version: 3.0.0 + resolution: "matcher@npm:3.0.0" + dependencies: + escape-string-regexp: "npm:^4.0.0" + checksum: 10/8bee1a7ab7609c2c21d9c9254b6785fa708eadf289032b556d57a34e98fcd4c537659a004dafee6ce80ab157099e645c199dc52678dff1e7fb0a6684e0da4dbe + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^13.0.0": + version: 13.2.0 + resolution: "mdast-util-to-hast@npm:13.2.0" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + "@ungap/structured-clone": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + trim-lines: "npm:^3.0.0" + unist-util-position: "npm:^5.0.0" + unist-util-visit: "npm:^5.0.0" + vfile: "npm:^6.0.0" + checksum: 10/b17ee338f843af31a1c7a2ebf0df6f0b41c9380b7119a63ab521d271df665456578e1234bb7617883e8d860fe878038dcf2b76ab2f21e0f7451215a096d26cce + languageName: node + linkType: hard + "mdurl@npm:^2.0.0": version: 2.0.0 resolution: "mdurl@npm:2.0.0" @@ -4096,6 +5677,48 @@ __metadata: languageName: node linkType: hard +"micromark-util-character@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-util-character@npm:2.1.0" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10/089fe853c2bede2a48fd73d977910fa657c3cf6649eddcd300557a975c6c7f1c73030d01724a483ff1dc69a0d3ac28b43b2ba4210f5ea6414807cdcd0c2fa63c + languageName: node + linkType: hard + +"micromark-util-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-encode@npm:2.0.0" + checksum: 10/853a3f33fce72aaf4ffa60b7f2b6fcfca40b270b3466e1b96561b02185d2bd8c01dd7948bc31a24ac014f4cc854e545ca9a8e9cf7ea46262f9d24c9e88551c66 + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-sanitize-uri@npm:2.0.0" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-encode: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + checksum: 10/7d10622f5a2bb058dda6d2e95b2735c43fdf8daa4f88a0863bc90eef6598f8e10e3df98e034341fcbc090d8021c53501308c463c49d3fe91f41eb64b5bf2766e + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-symbol@npm:2.0.0" + checksum: 10/8c662644c326b384f02a5269974d843d400930cf6f5d6a8e6db1743fc8933f5ecc125b4203ad4ebca25447f5d23eb7e5bf1f75af34570c3fdd925cb618752fcd + languageName: node + linkType: hard + +"micromark-util-types@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-util-types@npm:2.0.0" + checksum: 10/b88e0eefd4b7c8d86b54dbf4ed0094ef56a3b0c7774d040bd5c8146b8e4e05b1026bbf1cd9308c8fcd05ecdc0784507680c8cee9888a4d3c550e6e574f7aef62 + languageName: node + linkType: hard + "micromatch@npm:^4.0.4": version: 4.0.8 resolution: "micromatch@npm:4.0.8" @@ -4106,6 +5729,22 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10/54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -4113,6 +5752,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10/7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -4140,6 +5786,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -4149,6 +5802,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^1.3.2": + version: 1.4.1 + resolution: "minipass-fetch@npm:1.4.1" + dependencies: + encoding: "npm:^0.1.12" + minipass: "npm:^3.1.0" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.0.0" + dependenciesMeta: + encoding: + optional: true + checksum: 10/4c6f678d2c976c275ba35735aa18e341401d1fb94bbf38a36bb2c2d01835ac699f15b7ab1adaf4ee40a751361527d312a18853feaf9c0121f4904f811656575a + languageName: node + linkType: hard + "minipass-fetch@npm:^2.0.3": version: 2.1.2 resolution: "minipass-fetch@npm:2.1.2" @@ -4173,7 +5841,7 @@ __metadata: languageName: node linkType: hard -"minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -4191,7 +5859,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -4207,7 +5875,14 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 + languageName: node + linkType: hard + +"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -4217,6 +5892,13 @@ __metadata: languageName: node linkType: hard +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10/3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -4226,6 +5908,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^2.1.3": + version: 2.1.6 + resolution: "mkdirp@npm:2.1.6" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10/4672fadb94dca8d2eafeb6fff53f2c5ea74e885565ef23251791709064f216105167c2387088c61ef068901bd0776648999785e341d74728164fa551b1c65996 + languageName: node + linkType: hard + "mock-socket@npm:^9.3.1": version: 9.3.1 resolution: "mock-socket@npm:9.3.1" @@ -4240,6 +5931,33 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.4.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 10/8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: 10/ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10/276feb8e30189fe18718e85b6f82e4f952822baa2e7696f771cc42571a235b789dc5907a14d9ffb6838c3e4ff4c25717c2575e5ce1cf6e02e496e204c11e57f6 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -4247,6 +5965,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^0.6.2": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab + languageName: node + linkType: hard + "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -4265,6 +5990,24 @@ __metadata: languageName: node linkType: hard +"node-abi@npm:^3.3.0": + version: 3.71.0 + resolution: "node-abi@npm:3.71.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/0a1cef5106c43d67f9f8a911b0c9d5ee08971eda002ba466606c8e6164964456f5211f37966717efc3d5d49bae32f0cf9290254b1286bf71f0ba158a4f8a9846 + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 + languageName: node + linkType: hard + "node-domexception@npm:^1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" @@ -4283,6 +6026,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:8.x": + version: 8.4.1 + resolution: "node-gyp@npm:8.4.1" + dependencies: + env-paths: "npm:^2.2.0" + glob: "npm:^7.1.4" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^9.1.0" + nopt: "npm:^5.0.0" + npmlog: "npm:^6.0.0" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^2.0.2" + bin: + node-gyp: bin/node-gyp.js + checksum: 10/5ac19a7f6212c787f33bb72f889fafb1ce9d80b7ecb87b3785aebb0ff94a70cd5dbb3ecb435a308eaeb26d037c6edaf173951a9edacaadf0f4c3ae189f1e5077 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -4317,6 +6080,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: 10/00f9bb2d16449469ba8ffcf9b8f0eae6bae285ec74b135fec533e5883563d2400c0cd70902d0a7759e47ac031ccf206ace4e86556da08ed3f1c66dda206e9ccd + languageName: node + linkType: hard + "nopt@npm:^6.0.0": version: 6.0.0 resolution: "nopt@npm:6.0.0" @@ -4356,7 +6130,28 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0": +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10/3d81d02674115973df0b7117628ea4110d56042e5326413e4b4313f0bcdf7dd78d4a3acef2c831463fa3796a66762c49daef306f4a0ea1af44877d7086d73bde + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: 10/f7b4b7200026a08f6e4a17ba6d72e6c5cbb41789ed9cf7deaf9d9e322872c7dc5a7898549a894651ee0ee9ae635d34a678115bf8acdfba8ebd2ba2af688b563c + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -4374,6 +6169,15 @@ __metadata: languageName: node linkType: hard +"oniguruma-to-js@npm:0.4.3": + version: 0.4.3 + resolution: "oniguruma-to-js@npm:0.4.3" + dependencies: + regex: "npm:^4.3.2" + checksum: 10/af64a77f4e428c2652387014596138c51bd61d67b0bbe957cd10ff73b4ec14567701ff9286342ab804cfa00486a9a0ff189da8391721c21c898ea8e26b62e74f + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -4440,6 +6244,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10/58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -4461,6 +6272,29 @@ __metadata: languageName: node linkType: hard +"parse5-htmlparser2-tree-adapter@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" + dependencies: + parse5: "npm:^6.0.1" + checksum: 10/3400a2cd1ad450b2fe148544154f86ea53d3ed6b6eab56c78bb43b9629d3dfe9f580dffd75bbf32be134ffef645b68081fc764bf75c210f236ab9c5c8c38c252 + languageName: node + linkType: hard + +"parse5@npm:^5.1.1": + version: 5.1.1 + resolution: "parse5@npm:5.1.1" + checksum: 10/5b509744cfe81488a33be05578df490c460690e64519fa67f0a0acb9c1bca05914e8acad17a977e2cf5964a000e43959b40024f0c243dd6595dd0cca8a32f71b + languageName: node + linkType: hard + +"parse5@npm:^6.0.1": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 10/dfb110581f62bd1425725a7c784ae022a24669bd0efc24b58c71fc731c4d868193e2ebd85b74cde2dbb965e4dcf07059b1e651adbec1b3b5267531bd132fdb75 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -4489,6 +6323,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10/5e8845c159261adda6f09814d7725683257fcc85a18f329880ab4d7cc1d12830967eae5d5894e453f341710d5484b8fdbbd4d75181b4d6e1eb2f4dc7aeadc434 + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -4496,6 +6340,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10/f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10/b91575bf9cdf01757afd7b5e521eb8a0b874a49bc972d08e0047cfea0cd3c019f5614521d4bc83d2855e3fcc331db6817dfd533dd8f3d90b16bc76fad2450fc1 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -4503,6 +6361,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -4510,6 +6375,67 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: "npm:^4.0.0" + checksum: 10/e5699ecb06c7121055978e988e5cecea5b6892fc2589c64f1f86df5e7386bbbfd2ada268839e911b021c6b3123428aed7c6be3ac7940eee139556c75324c7e83 + languageName: node + linkType: hard + +"pino-pretty@npm:^11.3.0": + version: 11.3.0 + resolution: "pino-pretty@npm:11.3.0" + dependencies: + colorette: "npm:^2.0.7" + dateformat: "npm:^4.6.3" + fast-copy: "npm:^3.0.2" + fast-safe-stringify: "npm:^2.1.1" + help-me: "npm:^5.0.0" + joycon: "npm:^3.1.1" + minimist: "npm:^1.2.6" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^2.0.0" + pump: "npm:^3.0.0" + readable-stream: "npm:^4.0.0" + secure-json-parse: "npm:^2.4.0" + sonic-boom: "npm:^4.0.1" + strip-json-comments: "npm:^3.1.1" + bin: + pino-pretty: bin.js + checksum: 10/8494a07dc7428806648beffd0d6809a4cd25fb6ef48c567597d6534e7868a5eec477601c7aea65c7e7dd329ffa62182fe266fbc3e3726e39b9a49e2133f416cb + languageName: node + linkType: hard + +"pino-std-serializers@npm:^7.0.0": + version: 7.0.0 + resolution: "pino-std-serializers@npm:7.0.0" + checksum: 10/884e08f65aa5463d820521ead3779d4472c78fc434d8582afb66f9dcb8d8c7119c69524b68106cb8caf92c0487be7794cf50e5b9c0383ae65b24bf2a03480951 + languageName: node + linkType: hard + +"pino@npm:^9.5.0": + version: 9.5.0 + resolution: "pino@npm:9.5.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.1.1" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^2.0.0" + pino-std-serializers: "npm:^7.0.0" + process-warning: "npm:^4.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + sonic-boom: "npm:^4.0.1" + thread-stream: "npm:^3.0.0" + bin: + pino: bin.js + checksum: 10/e2dba79524be133e2a0800ad0424bbf2c4c94c46f028a81e514d40951666f3dcec76c582fd5ce6f6155df0f5a9d6d0257924fdf043fe285236d36c76509a59dd + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -4526,6 +6452,39 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.4.48 + resolution: "postcss@npm:8.4.48" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/94d7b2255752607d120fb7de7b2a7f895ba1594a0e1b566cb01972ca4a7b04a65ed2a1783109f86bb28cfb421c5a58c54b9330942bedaa2fd35c5c605fa6beb8 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10/32d5c026cc978dd02762b9ad3c765178aee8383aeac4303fed3cd226eff53100db038d4791b03ae1ebc7d213a7af392d26e32095579cedb8dba1d00ad08ecd46 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -4562,6 +6521,20 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^4.0.0": + version: 4.0.0 + resolution: "process-warning@npm:4.0.0" + checksum: 10/0d6ec069f3a6fe1d3379c0247329a297f1f3b9ea7e1d828db0a8f61e0e8337a98b7eb201547350924bc4a101ddcf2fa5cf5563ffe2c54c27651f7996d328483e + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10/dbaa7e8d1d5cf375c36963ff43116772a989ef2bb47c9bdee20f38fd8fc061119cf38140631cf90c781aca4d3f0f0d2c834711952b728953f04fd7d238f59f5b + languageName: node + linkType: hard + "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -4596,6 +6569,37 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^6.0.0": + version: 6.5.0 + resolution: "property-information@npm:6.5.0" + checksum: 10/fced94f3a09bf651ad1824d1bdc8980428e3e480e6d01e98df6babe2cc9d45a1c52eee9a7736d2006958f9b394eb5964dedd37e23038086ddc143fc2fd5e426c + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 10/9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10/e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -4624,6 +6628,27 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 10/591eca457509a99368b623db05248c1193aa3cedafc9a077d7acab09495db1231017ba3ad1b5386e5633271edd0a03b312d8640a59ee585b8516a42e15438aa7 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10/5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -4631,6 +6656,17 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 + languageName: node + linkType: hard + "readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" @@ -4642,6 +6678,40 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^4.0.0": + version: 4.5.2 + resolution: "readable-stream@npm:4.5.2" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: 10/01b128a559c5fd76a898495f858cf0a8839f135e6a69e3409f986e88460134791657eb46a2ff16826f331682a3c4d0c5a75cef5e52ef259711021ba52b1c2e82 + languageName: node + linkType: hard + +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: 10/ddf44ee76301c774e9c9f2826da8a3c5c9f8fc87310f4a364e803ef003aa1a43c378b4323051ced212097fff1af459070f4499338b36a7469df1d4f7e8c0ba4c + languageName: node + linkType: hard + +"reflect-metadata@npm:^0.2.1": + version: 0.2.2 + resolution: "reflect-metadata@npm:0.2.2" + checksum: 10/1c93f9ac790fea1c852fde80c91b2760420069f4862f28e6fae0c00c6937a56508716b0ed2419ab02869dd488d123c4ab92d062ae84e8739ea7417fae10c4745 + languageName: node + linkType: hard + +"regex@npm:^4.3.2": + version: 4.3.3 + resolution: "regex@npm:4.3.3" + checksum: 10/e18a7069b77173d0f36981386b70eabbd7a9ebd988ac99f5e41fe5a8b2786871c9e50b99135590f6d5ab6b459079e7a1b6c917583f78eb0cc5b909bd5e45ff22 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -4730,8 +6800,91 @@ __metadata: languageName: node linkType: hard -"run-parallel@npm:^1.1.9": - version: 1.2.0 +"roarr@npm:^2.15.3": + version: 2.15.4 + resolution: "roarr@npm:2.15.4" + dependencies: + boolean: "npm:^3.0.1" + detect-node: "npm:^2.0.4" + globalthis: "npm:^1.0.1" + json-stringify-safe: "npm:^5.0.1" + semver-compare: "npm:^1.0.0" + sprintf-js: "npm:^1.1.2" + checksum: 10/baaa5ad91468bf1b7f0263c4132a40865c8638a3d0916b44dd0d42980a77fb53085a3792e3edf16fc4eea9e31c719793c88bd45b1623b760763c4dc59df97619 + languageName: node + linkType: hard + +"rollup@npm:^4.20.0": + version: 4.25.0 + resolution: "rollup@npm:4.25.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.25.0" + "@rollup/rollup-android-arm64": "npm:4.25.0" + "@rollup/rollup-darwin-arm64": "npm:4.25.0" + "@rollup/rollup-darwin-x64": "npm:4.25.0" + "@rollup/rollup-freebsd-arm64": "npm:4.25.0" + "@rollup/rollup-freebsd-x64": "npm:4.25.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.25.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.25.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.25.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.25.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.25.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.25.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.25.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.25.0" + "@rollup/rollup-linux-x64-musl": "npm:4.25.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.25.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.25.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.25.0" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10/747347035ea728a4905f4beb2e6c8eafd8f39c9015a3514bf8893bddebb5de71fcb4d5bb98064d3402d5915539135c0d1f41e66086e601de0a4e62839cbddf3c + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 resolution: "run-parallel@npm:1.2.0" dependencies: queue-microtask: "npm:^1.2.2" @@ -4748,13 +6901,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 languageName: node linkType: hard +"safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -4769,6 +6929,20 @@ __metadata: languageName: node linkType: hard +"secure-json-parse@npm:^2.4.0": + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: 10/974386587060b6fc5b1ac06481b2f9dbbb0d63c860cc73dc7533f27835fdb67b0ef08762dbfef25625c15bc0a0c366899e00076cb0d556af06b71e22f1dede4c + languageName: node + linkType: hard + +"semver-compare@npm:^1.0.0": + version: 1.0.0 + resolution: "semver-compare@npm:1.0.0" + checksum: 10/75f9c7a7786d1756f64b1429017746721e07bd7691bdad6368f7643885d3a98a27586777e9699456564f4844b407e9f186cc1d588a3f9c0be71310e517e942c3 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -4778,7 +6952,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -4787,6 +6961,15 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 10/e0aba4dca2fc9fe74ae1baf38dbd99190e1945445a241ba646290f2176cdb2032281a76443b02ccf0caf30da5657d510746506368889a593b9835a497fc0732e + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -4794,6 +6977,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10/d833bfa3e0a67579a6ce6e1bc95571f05246e0a441dd8c76e3057972f2a3e098465687a4369b07e83a0375a88703577f71b5b2e966809e67ebc340dbedb478c7 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -4810,6 +7005,27 @@ __metadata: languageName: node linkType: hard +"shiki@npm:^1.16.2": + version: 1.22.0 + resolution: "shiki@npm:1.22.0" + dependencies: + "@shikijs/core": "npm:1.22.0" + "@shikijs/engine-javascript": "npm:1.22.0" + "@shikijs/engine-oniguruma": "npm:1.22.0" + "@shikijs/types": "npm:1.22.0" + "@shikijs/vscode-textmate": "npm:^9.3.0" + "@types/hast": "npm:^3.0.4" + checksum: 10/025b19f78133764410822d1abe89b8f902f63698acb5e3ba2126f0395a629ed5527b7dfba84e6b12c1fbaa1fcfe9556345a3519faa1219fdf013fa23eae4aedc + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10/e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -4817,6 +7033,31 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10/4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10/93f1b32319782f78f2f2234e9ce34891b7ab6b990d19d8afefaa44423f5235ce2676aae42d6743fecac6c8dfff4b808d4c24fe5265be813d04769917a9a44f36 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -4847,6 +7088,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^6.0.0": + version: 6.2.1 + resolution: "socks-proxy-agent@npm:6.2.1" + dependencies: + agent-base: "npm:^6.0.2" + debug: "npm:^4.3.3" + socks: "npm:^2.6.2" + checksum: 10/554749ba3bdba0742ec36493a907261c116dd0dafcd618ea5babdfc90ce5a5ae648d4ee4d2e26e7184afd854973d282372ce0af63e1fc6412bb9fa1a2b1f2d45 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -4868,6 +7120,22 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^4.0.1": + version: 4.2.0 + resolution: "sonic-boom@npm:4.2.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10/385ef7fb5ea5976c1d2a1fef0b6df8df6b7caba8696d2d67f689d60c05e3ea2d536752ce7e1c69b9fad844635f1036d07c446f8e8149f5c6a80e0040a455b310 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -4885,6 +7153,27 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^2.0.0": + version: 2.0.2 + resolution: "space-separated-tokens@npm:2.0.2" + checksum: 10/202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.2": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10/e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -4892,6 +7181,36 @@ __metadata: languageName: node linkType: hard +"sqlite3@npm:^5.1.7": + version: 5.1.7 + resolution: "sqlite3@npm:5.1.7" + dependencies: + bindings: "npm:^1.5.0" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:8.x" + prebuild-install: "npm:^7.1.1" + tar: "npm:^6.1.11" + peerDependencies: + node-gyp: 8.x + dependenciesMeta: + node-gyp: + optional: true + peerDependenciesMeta: + node-gyp: + optional: true + checksum: 10/84b1183d39791b00bc9d9aa6f0d74738084c9447e7cff7cf3cc2fa7458474159e1272eed675cd3a5c6c5100e97557578dbf0e77082f1043ab6356e6446314e32 + languageName: node + linkType: hard + +"ssri@npm:^8.0.0, ssri@npm:^8.0.1": + version: 8.0.1 + resolution: "ssri@npm:8.0.1" + dependencies: + minipass: "npm:^3.1.1" + checksum: 10/fde247b7107674d9a424a20f9c1a6e3ad88a139c2636b9d9ffa7df59e85e11a894cdae48fadd0ad6be41eb0d5b847fe094736513d333615c7eebc3d111abe0d2 + languageName: node + linkType: hard + "ssri@npm:^9.0.0": version: 9.0.1 resolution: "ssri@npm:9.0.1" @@ -4910,6 +7229,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10/2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.8.0": + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: 10/034176196cfcaaab16dbdd96fc9e925a9544799fb6dc5a3e36fe43270f3a287c7f779d785b89edaf22cef2b5f1dcada2aae67430b8602e785ee74bdb3f671768 + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -4920,7 +7253,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -4931,7 +7264,18 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10/7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -4940,7 +7284,17 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"stringify-entities@npm:^4.0.0": + version: 4.0.4 + resolution: "stringify-entities@npm:4.0.4" + dependencies: + character-entities-html4: "npm:^2.0.0" + character-entities-legacy: "npm:^3.0.0" + checksum: 10/42bd2f37528795a7b4386bd39dc4699515fb0f0b8c418a6bb29ae205ce66eaff9e8801a2bee65b8049c918c9475a71c7e5911f6a88c19f1d84ebdcba3d881a2d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -4949,6 +7303,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 + languageName: node + linkType: hard + "strip-bom@npm:^4.0.0": version: 4.0.0 resolution: "strip-bom@npm:4.0.0" @@ -4970,6 +7333,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -5014,7 +7384,32 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10/526deae025453e825f87650808969662fbb12eb0461d033e9b447de60ec951c6c4607d0afe7ce057defe9d4e45cf80399dd74bc15f9d9e0773d5e990a78ce4ac + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10/1a52a51d240c118cbcd30f7368ea5e5baef1eac3e6b793fb1a41e6cd7319296c79c0264ccc5859f5294aa80f8f00b9239d519e627b9aade80038de6f966fec6a + languageName: node + linkType: hard + +"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -5046,6 +7441,68 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 10/dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: 10/486e1283a867440a904e36741ff1a177faa827cf94d69506f7e3ae4187b9afdf9ec368b3d8da225c192bfe2eb943f3f0080594156bf39f21b57cd1411e2e7f6d + languageName: node + linkType: hard + +"thread-stream@npm:^3.0.0": + version: 3.1.0 + resolution: "thread-stream@npm:3.1.0" + dependencies: + real-require: "npm:^0.2.0" + checksum: 10/ea2d816c4f6077a7062fac5414a88e82977f807c82ee330938fb9691fe11883bb03f078551c0518bb649c239e47ba113d44014fcbb5db42c5abd5996f35e4213 + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10/cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.1": + version: 0.3.1 + resolution: "tinyexec@npm:0.3.1" + checksum: 10/0537c70590d52d354f40c0255ff0f654a3d18ddb3812b440ddf9d436edf516c8057838ad5a38744c0c59670ec03e3cf23fbe04ae3d49f031d948274e99002569 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10/6109322f14b3763f65c8fa49fddab72cd3edd96b82dd50e05e63de74867329ff5353bff4377281ec963213d9314f37f4a353e9ee34bbac85fd4c1e4a568d6076 + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 10/2924444db6804355e5ba2b6e586c7f77329d93abdd7257a069a0f4530dff9f16de484e80479094e3f39273462541b003a65ee3a6afc2d12555aa745132deba5d + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -5062,6 +7519,13 @@ __metadata: languageName: node linkType: hard +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: 10/7a1325e4ce8ff7e9e52007600e9c9862a166d0db1f1cf0c9357e359e410acab1278fcd91cc279dfa5123fc37b69f080de02f471e91dbbc61b155b9ca92597929 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -5115,6 +7579,22 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.5.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10/7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -5131,6 +7611,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 10/11e9476dc85bf97a71f6844fb67ba8e64a4c7e445724c0f3bd37eb2ddf4bc97c1dc9337bd880b28bce158de1c0cb275c2d03259815a5bf64986727197126ab56 + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -5165,20 +7652,100 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.27.2": - version: 0.27.4 - resolution: "typedoc@npm:0.27.4" +"typedoc@npm:^0.26.10": + version: 0.26.11 + resolution: "typedoc@npm:0.26.11" dependencies: - "@gerrit0/mini-shiki": "npm:^1.24.0" lunr: "npm:^2.3.9" markdown-it: "npm:^14.1.0" minimatch: "npm:^9.0.5" - yaml: "npm:^2.6.1" + shiki: "npm:^1.16.2" + yaml: "npm:^2.5.1" peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x bin: typedoc: bin/typedoc - checksum: 10/420036e5bdadf0dc2e27d5c347807704cc1d8beb69666149ecd96cbd32b4fa2b5488c73e2d5c47b7712ff4233e63a98903d01f5bd49123cdd75fa09578c0595e + checksum: 10/969833b6ffaf1afc96ade3e2b6e594d2f072cc6e92bbc02e40f73c26e16eae8df01b63ccc4a445e2ef9ea2d3c7901ec7c8af476af526225a4b02ed014cdf88b7 + languageName: node + linkType: hard + +"typeorm@npm:^0.3.20": + version: 0.3.20 + resolution: "typeorm@npm:0.3.20" + dependencies: + "@sqltools/formatter": "npm:^1.2.5" + app-root-path: "npm:^3.1.0" + buffer: "npm:^6.0.3" + chalk: "npm:^4.1.2" + cli-highlight: "npm:^2.1.11" + dayjs: "npm:^1.11.9" + debug: "npm:^4.3.4" + dotenv: "npm:^16.0.3" + glob: "npm:^10.3.10" + mkdirp: "npm:^2.1.3" + reflect-metadata: "npm:^0.2.1" + sha.js: "npm:^2.4.11" + tslib: "npm:^2.5.0" + uuid: "npm:^9.0.0" + yargs: "npm:^17.6.2" + peerDependencies: + "@google-cloud/spanner": ^5.18.0 + "@sap/hana-client": ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 || ^9.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.8.0 + mssql: ^9.1.1 || ^10.0.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + "@google-cloud/spanner": + optional: true + "@sap/hana-client": + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + bin: + typeorm: cli.js + typeorm-ts-node-commonjs: cli-ts-node-commonjs.js + typeorm-ts-node-esm: cli-ts-node-esm.js + checksum: 10/956f64c6df4d0653d4bea7293bc1ddabf5d33df858c1f0f9d7e0f9fd861559c228e5ece7826eb89eb51b9d45757afc37c6b9eccca73e664c0d988c21e4758a69 languageName: node linkType: hard @@ -5209,6 +7776,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^1.1.1": + version: 1.1.1 + resolution: "unique-filename@npm:1.1.1" + dependencies: + unique-slug: "npm:^2.0.0" + checksum: 10/9b6969d649a2096755f19f793315465c6427453b66d67c2a1bee8f36ca7e1fc40725be2c028e974dec110d365bd30a4248e89b1044dc1dfe29663b6867d071ef + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -5218,6 +7794,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^2.0.0": + version: 2.0.2 + resolution: "unique-slug@npm:2.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10/6cfaf91976acc9c125fd0686c561ee9ca0784bb4b2b408972e6cd30e747b4ff0ca50264c01bcf5e711b463535ea611ffb84199e9f73088cd79ac9ddee8154042 + languageName: node + linkType: hard + "unique-slug@npm:^3.0.0": version: 3.0.0 resolution: "unique-slug@npm:3.0.0" @@ -5227,6 +7812,54 @@ __metadata: languageName: node linkType: hard +"unist-util-is@npm:^6.0.0": + version: 6.0.0 + resolution: "unist-util-is@npm:6.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10/edd6a93fb2255addf4b9eeb304c1da63c62179aef793169dd64ab955cf2f6814885fe25f95f8105893e3562dead348af535718d7a84333826e0491c04bf42511 + languageName: node + linkType: hard + +"unist-util-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-position@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10/89d4da00e74618d7562ac7ac288961df9bcd4ccca6df3b5a90650f018eceb6b95de6e771e88bdbef46cc9d96861d456abe57b7ad1108921e0feb67c6292aa29d + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-util-stringify-position@npm:4.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10/d15c88aca7a31902d95d5b5355bbe09583cf6f6ff6e59e134ef76c76d3c30bc1021f2d7ea5b7897c6d0858ed5f3770c1b19de9c78274f50d72f95a0d05f1af71 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^6.0.0": + version: 6.0.1 + resolution: "unist-util-visit-parents@npm:6.0.1" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10/645b3cbc5e923bc692b1eb1a9ca17bffc5aabc25e6090ff3f1489bff8effd1890b28f7a09dc853cb6a7fa0da8581bfebc9b670a68b53c4c086cb9610dfd37701 + languageName: node + linkType: hard + +"unist-util-visit@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-visit@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + unist-util-visit-parents: "npm:^6.0.0" + checksum: 10/f2bbde23641e9ade7640358c06ddeec0f38342322eb8e7819d9ee380b0f859d25d084dde22bf63db0280b3b2f36575f15aa1d6c23acf276c91c2493cf799e3b0 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -5264,6 +7897,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.1.0 resolution: "v8-to-istanbul@npm:9.1.0" @@ -5275,6 +7917,134 @@ __metadata: languageName: node linkType: hard +"vfile-message@npm:^4.0.0": + version: 4.0.2 + resolution: "vfile-message@npm:4.0.2" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-stringify-position: "npm:^4.0.0" + checksum: 10/1a5a72bf4945a7103750a3001bd979088ce42f6a01efa8590e68b2425e1afc61ddc5c76f2d3c4a7053b40332b24c09982b68743223e99281158fe727135719fc + languageName: node + linkType: hard + +"vfile@npm:^6.0.0": + version: 6.0.3 + resolution: "vfile@npm:6.0.3" + dependencies: + "@types/unist": "npm:^3.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10/a5a85293c9eb8787aa42e180edaef00c13199a493d6ed82fecf13ab29a68526850788e22434d77808ea6b17a74e03ff899b9b4711df5b9eee75afcddd7c2e1fb + languageName: node + linkType: hard + +"vite-node@npm:2.1.8": + version: 2.1.8 + resolution: "vite-node@npm:2.1.8" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.7" + es-module-lexer: "npm:^1.5.4" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10/0ff0ed7a6fb234d3ddc4946e4c1150229980cac9f34fb4bd7f443aab0aae2da5b73ac20ff68af1df476545807dc23189247194e8cea0dcdfa394311c73f04429 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.11 + resolution: "vite@npm:5.4.11" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10/719c4dea896e9547958643354003c8c9ea98e5367196d98f5f46cffb3ec963fead3ea5853f5af941c79bbfb73583dec19bbb0d28d2f644b95d7f59c55e22919d + languageName: node + linkType: hard + +"vitest@npm:^2.1.8": + version: 2.1.8 + resolution: "vitest@npm:2.1.8" + dependencies: + "@vitest/expect": "npm:2.1.8" + "@vitest/mocker": "npm:2.1.8" + "@vitest/pretty-format": "npm:^2.1.8" + "@vitest/runner": "npm:2.1.8" + "@vitest/snapshot": "npm:2.1.8" + "@vitest/spy": "npm:2.1.8" + "@vitest/utils": "npm:2.1.8" + chai: "npm:^5.1.2" + debug: "npm:^4.3.7" + expect-type: "npm:^1.1.0" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + std-env: "npm:^3.8.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.1" + tinypool: "npm:^1.0.1" + tinyrainbow: "npm:^1.2.0" + vite: "npm:^5.0.0" + vite-node: "npm:2.1.8" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.8 + "@vitest/ui": 2.1.8 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10/c2552c068f6faac82eb4e6debb9ed505c0e8016fd6e0a0f0e0dbb5b5417922fbcde80c54af0d3b5a5503a5d6ad6862b6e95b9b59b8b7e98bb553217b9c6fc227 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -5302,6 +8072,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10/0de6e6cd8f2f94a8b5ca44e84cf1751eadcac3ebedcdc6e5fbbe6c8011904afcbc1a2777c53496ec02ced7b81f2e7eda61e76bf8262a8bc3ceaa1f6040508051 + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -5311,7 +8093,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -5322,6 +8104,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10/7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -5375,12 +8168,19 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.6.1": - version: 2.6.1 - resolution: "yaml@npm:2.6.1" +"yaml@npm:^2.5.1": + version: 2.6.0 + resolution: "yaml@npm:2.6.0" bin: yaml: bin.mjs - checksum: 10/cf412f03a33886db0a3aac70bb4165588f4c5b3c6f8fc91520b71491e5537800b6c2c73ed52015617f6e191eb4644c73c92973960a1999779c62a200ee4c231d + checksum: 10/f4369f667c7626c216ea81b5840fe9b530cdae4cff2d84d166ec1239e54bf332dbfac4a71bf60d121f8e85e175364a4e280a520292269b6cf9d074368309adf9 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc languageName: node linkType: hard @@ -5391,7 +8191,22 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1, yargs@npm:^17.7.2": +"yargs@npm:^16.0.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e + languageName: node + linkType: hard + +"yargs@npm:^17.3.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -5412,3 +8227,17 @@ __metadata: checksum: 10/f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard + +"zod@npm:^3.23.8": + version: 3.23.8 + resolution: "zod@npm:3.23.8" + checksum: 10/846fd73e1af0def79c19d510ea9e4a795544a67d5b34b7e1c4d0425bf6bfd1c719446d94cdfa1721c1987d891321d61f779e8236fde517dc0e524aa851a6eff1 + languageName: node + linkType: hard + +"zwitch@npm:^2.0.4": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: 10/f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 + languageName: node + linkType: hard diff --git a/zombienet/medium-network.toml b/zombienet/medium-network.toml deleted file mode 100644 index 3f5383ba..00000000 --- a/zombienet/medium-network.toml +++ /dev/null @@ -1,66 +0,0 @@ -[relaychain] -default_command = "./zombienet/bin/polkadot" -default_args = [ "-lparachain=debug" ] -chain = "paseo-local" - - [[relaychain.nodes]] - name = "alice" - validator = true - extra_args = [ "-lparachain=debug" ] - ws_port = 9900 - - [[relaychain.nodes]] - name = "bob" - validator = true - extra_args = [ "-lparachain=debug" ] - - [[relaychain.nodes]] - name = "charlie" - validator = true - extra_args = [ "-lparachain=debug" ] - - [[relaychain.nodes]] - name = "dave" - validator = true - extra_args = [ "-lparachain=debug" ] - -[[parachains]] -id = 1000 -addToGenesis = true -chain = "asset-hub-paseo-local" -cumulus_based = true - - [[parachains.collators]] - name = "asset-hub-paseo-collator01" - command = "./zombienet/bin/polkadot-parachain" - args = ["--log=xcm=trace,pallet-assets=trace"] - ws_port = 9910 - - [[parachains.collators]] - name = "asset-hub-paseo-collator02" - command = "./zombienet/bin/polkadot-parachain" - ws_port = 9911 - args = ["--log=xcm=trace,pallet-assets=trace"] - -[[parachains]] -id = 1836 -add_to_genesis = true -cumulus_based = true -chain = "trappist-local" - - [[parachains.collators]] - name = "trappist-collator01" - command = "./zombienet/bin/trappist-node" - ws_port = 9920 - args = ["--log=xcm=trace,pallet-assets=trace"] - - [[parachains.collators]] - name = "trappist-collator02" - command = "./zombienet/bin/trappist-node" - ws_port = 9921 - args = ["--log=xcm=trace,pallet-assets=trace"] - -[types.Header] -number = "u64" -parent_hash = "Hash" -post_state = "Hash" diff --git a/zombienet/small-network.toml b/zombienet/small-network.toml deleted file mode 100644 index 556abb0e..00000000 --- a/zombienet/small-network.toml +++ /dev/null @@ -1,43 +0,0 @@ -[relaychain] -default_command = "./bin/polkadot" -default_args = [ "-lparachain=debug" ] -chain = "paseo-local" - - [[relaychain.nodes]] - name = "alice" - validator = true - extra_args = [ "-lparachain=debug" ] - ws_port = 9900 - - [[relaychain.nodes]] - name = "bob" - validator = true - extra_args = [ "-lparachain=debug" ] - - [[relaychain.nodes]] - name = "charlie" - validator = true - extra_args = [ "-lparachain=debug" ] - - [[relaychain.nodes]] - name = "dave" - validator = true - extra_args = [ "-lparachain=debug" ] - -[[parachains]] -id = 1000 -addToGenesis = true -chain = "asset-hub-paseo-local" -cumulus_based = true - - [[parachains.collators]] - name = "asset-hub-paseo-collator01" - command = "./bin/polkadot-parachain" - args = ["--log=xcm=trace,pallet-assets=trace"] - ws_port = 9910 - - [[parachains.collators]] - name = "asset-hub-paseo-collator02" - command = "./bin/polkadot-parachain" - ws_port = 9911 - args = ["--log=xcm=trace,pallet-assets=trace"] From 4f032b86044450f862761fd789f66dfc4a3d1f4c Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 11 Dec 2024 22:54:47 -0500 Subject: [PATCH 04/13] add e2e tests using chopsticks --- examples/tsconfig.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/tsconfig.json b/examples/tsconfig.json index c941f007..651b3488 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -3,10 +3,6 @@ "compilerOptions": { "baseUrl": ".", "outDir": "build", -<<<<<<< HEAD - "suppressImplicitAnyIndexErrors": true, -======= ->>>>>>> 65a65cf (update e2e tests to use chopsticks e2e) "resolveJsonModule": true, "esModuleInterop": true, "ignoreDeprecations": "5.0" From 4ad3b041cff992f47a19cffcf32d8093fdf14212 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 11 Dec 2024 23:15:51 -0500 Subject: [PATCH 05/13] update README --- e2e-tests/README.md | 6 ++++++ examples/tsconfig.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/e2e-tests/README.md b/e2e-tests/README.md index 5bbab6ff..2c39d787 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -4,6 +4,12 @@ End-to-End tests that run using Chopsticks. To run the end-to-end tests run the command: +```bash +$ yarn build && yarn build:e2e +``` + +Then run: + ```bash $ yarn test:e2e ``` diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 651b3488..dd639079 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@substrate/dev/config/tsconfig.json", + "extends": "../node_modules/@substrate/dev/config/tsconfig.json", "compilerOptions": { "baseUrl": ".", "outDir": "build", From e91a3229954742bc3b920accf67c93c1c76408a4 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 11 Dec 2024 23:22:15 -0500 Subject: [PATCH 06/13] increase setup timeouts --- e2e-tests/moonbeam.hydration.spec.ts | 4 ++-- e2e-tests/polkadotAssetHub.bridgeHub.spec.ts | 4 ++-- e2e-tests/polkadotAssetHub.hydration.spec.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e-tests/moonbeam.hydration.spec.ts b/e2e-tests/moonbeam.hydration.spec.ts index eebef7db..1bd10d6e 100644 --- a/e2e-tests/moonbeam.hydration.spec.ts +++ b/e2e-tests/moonbeam.hydration.spec.ts @@ -29,12 +29,12 @@ describe('Moonbeam <> Hydration', () => { hydration = hydration1; moonbeam = moonbeam1; - }, 100000); + }, 200000); afterEach(async () => { await moonbeam.teardown(); await hydration.teardown(); - }, 100000); + }, 200000); test('Transfer GLMR from Moonbeam to Hydration', async () => { await moonbeam.dev.setStorage({ diff --git a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts index 9ddf9c64..0f1fd3fc 100644 --- a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts +++ b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts @@ -35,12 +35,12 @@ describe('Polkadot AssetHub <> Ethereum', () => { polkadotBridgeHub = polkadotBridgeHub1; polkadotAssetHub = polkadotAssetHub1; - }, 100000); + }, 200000); afterEach(async () => { await polkadotBridgeHub.teardown(); await polkadotAssetHub.teardown(); - }, 100000); + }, 200000); test('Snowbridge WETH From AssetHub to Ethereum', async () => { await polkadotAssetHub.dev.setStorage({ diff --git a/e2e-tests/polkadotAssetHub.hydration.spec.ts b/e2e-tests/polkadotAssetHub.hydration.spec.ts index bf30c0da..0b3bef8f 100644 --- a/e2e-tests/polkadotAssetHub.hydration.spec.ts +++ b/e2e-tests/polkadotAssetHub.hydration.spec.ts @@ -39,12 +39,12 @@ describe('Polkadot AssetHub <> Hydration', () => { hydration = hydration1; polkadotAssetHub = polkadotAssetHub1; - }, 100000); + }, 200000); afterEach(async () => { await polkadotAssetHub.teardown(); await hydration.teardown(); - }, 100000); + }, 200000); test('AssetHub Local DOT Transfer', async () => { await polkadotAssetHub.api.isReady; From cf7fd6a993273fa09a5cf5ade5281fe51a53b56e Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 13 Dec 2024 17:37:06 -0500 Subject: [PATCH 07/13] update para to eth test --- README.md | 1 + e2e-tests/hydration.ethereum.spec.ts | 145 ++++++++++++++++++ .../transferAssetsUsingTypeAndThen.ts | 4 +- src/createXcmTypes/ParaToEthereum.ts | 10 +- src/index.ts | 49 +++--- 5 files changed, 182 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index f40bbf48..ccf4691e 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ The below chart is focusing on what directions are supported for constructing as | Parachain to Parachain | ✅ | ✅ | ✅ | | Parachain to Relay | ✅ | ✅ | ✅ | | Parachain to System | ✅ | ✅ | ✅ | +| Parachain to Ethereum | ❌ | ✅ | ✅ | ## Note on Parachain to Parachain Support diff --git a/e2e-tests/hydration.ethereum.spec.ts b/e2e-tests/hydration.ethereum.spec.ts index e69de29b..6d8db245 100644 --- a/e2e-tests/hydration.ethereum.spec.ts +++ b/e2e-tests/hydration.ethereum.spec.ts @@ -0,0 +1,145 @@ +import { setupNetworks, testingPairs, withExpect } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { AccountData } from '@polkadot/types/interfaces'; +import { afterEach, beforeEach, expect, test } from 'vitest'; +import { PalletAssetsAssetAccount } from '@polkadot/types/lookup'; +const { checkSystemEvents } = withExpect(expect); + +import { AssetTransferApi } from '../src/AssetTransferApi'; +import { Option } from '@polkadot/types-codec'; +import { AugmentedEvents } from '@polkadot/api/types'; + +describe('Hydration <> Ethereum', () => { + const ethereumNetworkGlobalConsensusLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`; + const recipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; + const snowbridgeWETHLocation = { + parents: 2, + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: 1 } } }, + { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, + ], + }, + }; + + let hydration: NetworkContext; + let polkadotAssetHub: NetworkContext; + let polkadotBridgeHub: NetworkContext; + + const { alice, alith } = testingPairs(); + + beforeEach(async () => { + const { hydration1, polkadotBridgeHub1, polkadotAssetHub1 } = await setupNetworks({ + hydration1: { + endpoint: 'wss://rpc.hydradx.cloud', + db: './db.sqlite', + }, + polkadotBridgeHub1: { + endpoint: 'wss://bridge-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8011, + }, + polkadotAssetHub1: { + endpoint: 'wss://asset-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8012, + }, + }); + + hydration = hydration1; + polkadotBridgeHub = polkadotBridgeHub1; + polkadotAssetHub = polkadotAssetHub1; + }, 200000); + + afterEach(async () => { + await hydration.teardown(); + await polkadotAssetHub.teardown(); + await polkadotBridgeHub.teardown(); + }, 200000); + + test('Transfer Snowbridge WETH from Hydration to Ethereum', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 5], { free: '50000000000000000000000000' }], // DOT + [[alice.address, 1000189], { free: '500000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, + }, + }, + }); + + const tx = await assetTransferApi.createTransferTransaction( + ethereumNetworkGlobalConsensusLocation, + alith.address, + ['DOT', 'WETH.snow'], + ['500000000000', '75000000000000'], + { + sendersAddr: alice.address, + format: 'payload', + xcmVersion: 4, + paysWithFeeDest: 'DOT', + }, + ); + + console.log("payload", JSON.stringify(tx)); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const assetHubEvents = await polkadotAssetHub.api.query.system.events(); + for (const event of assetHubEvents) { + console.log("EVENT---", event.toHuman()); + } + const foreignAssetsBurnedEvent = assetHubEvents[4]; + expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); + expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); + expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); + + const xcmMessageSentEvent = assetHubEvents[6]; + expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); + expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); + expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); + + await polkadotBridgeHub.dev.newBlock(); + + await checkSystemEvents(polkadotBridgeHub, 'ethereumOutboundQueue', 'balances') + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + for (const event of bridgeHubEvents) { + console.log("BridgeHub Events---", event.toHuman()); + } + }, 100000); +}); \ No newline at end of file diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index e5dcd7af..e5d9c075 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -28,6 +28,7 @@ import { normalizeArrToStr } from '../../util/normalizeArrToStr'; import type { CreateXcmCallOpts } from '../types'; import { establishXcmPallet } from '../util/establishXcmPallet'; import type { PolkadotXcmBaseArgs } from './types'; +import { resolveMultiLocation } from '../../util/resolveMultiLocation'; /** * Build a Polkadot-js SubmittableExtrinsic for a `transferAssetsUsingTypeAndThen` call. * @@ -167,7 +168,8 @@ export const transferAssetsUsingTypeAndThen = async ( sendersAddr = sanitizeAddress(sendersAddr); const sendersAccount = createXcmOnDestBeneficiary(sendersAddr, xcmVersion); - customXcmOnDestStr = `[{"setAppendix":[{"depositAsset":{"assets":{"Wild":"All"},"beneficiary":${JSON.stringify(sendersAccount)}}}]},{"initiateReserveWithdraw":{"assets":{"Wild":{"AllOf":${JSON.stringify(erc20Location)}}},"reserve":${destChainId},"xcm":[{"buyExecution":{"fees":${JSON.stringify(reanchoredERC20AccountLocation)},"weightLimit":"Unlimited"}},{"depositAsset":{"assets":{"Wild":{"AllCounted":"1"}},"beneficiary":${JSON.stringify(beneficiary)}}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]`; + const resolvedDestChainId = resolveMultiLocation(destChainId, xcmVersion); + customXcmOnDestStr = `[{"setAppendix":[{"depositAsset":{"assets":{"Wild":"All"},"beneficiary":${JSON.stringify(sendersAccount)}}}]},{"initiateReserveWithdraw":{"assets":{"Wild":{"AllOf":${JSON.stringify(erc20Location)}}},"reserve":${JSON.stringify(resolvedDestChainId)},"xcm":[{"buyExecution":{"fees":${JSON.stringify(reanchoredERC20AccountLocation)},"weightLimit":"Unlimited"}},{"depositAsset":{"assets":{"Wild":{"AllCounted":"1"}},"beneficiary":${JSON.stringify(beneficiary)}}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]}},{"setTopic":"0x0000000000000000000000000000000000000000000000000000000000000000"}]`; feeAssetTransferType = { DestinationReserve: 'null', diff --git a/src/createXcmTypes/ParaToEthereum.ts b/src/createXcmTypes/ParaToEthereum.ts index 6d744663..81083b29 100644 --- a/src/createXcmTypes/ParaToEthereum.ts +++ b/src/createXcmTypes/ParaToEthereum.ts @@ -26,6 +26,7 @@ import { dedupeAssets } from './util/dedupeAssets'; import { getXcAssetMultiLocationByAssetId } from './util/getXcAssetMultiLocationByAssetId'; import { isParachainPrimaryNativeAsset } from './util/isParachainPrimaryNativeAsset'; import { sortAssetsAscending } from './util/sortAssetsAscending'; +import { getParachainNativeAssetLocation } from './util/getParachainNativeAssetLocation'; export const ParaToEthereum: ICreateXcmType = { /** @@ -140,7 +141,7 @@ export const ParaToEthereum: ICreateXcmType = { assets: string[], opts: CreateAssetsOpts, ): Promise => { - const { registry } = opts; + const { registry, destChainId } = opts; const sortedAndDedupedMultiAssets = await createParaToEthereumMultiAssets( opts.api, @@ -149,6 +150,7 @@ export const ParaToEthereum: ICreateXcmType = { assets, xcmVersion, registry, + destChainId ); if (xcmVersion === 2) { @@ -233,6 +235,7 @@ const createParaToEthereumMultiAssets = async ( assets: string[], xcmVersion: number, registry: Registry, + destChainId?: string, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType | undefined = undefined; @@ -246,10 +249,7 @@ const createParaToEthereumMultiAssets = async ( if (isPrimaryParachainNativeAsset) { concreteMultiLocation = resolveMultiLocation( - { - parents: 0, - interior: { Here: '' }, - }, + getParachainNativeAssetLocation(registry, assets[0], destChainId), xcmVersion, ); diff --git a/src/index.ts b/src/index.ts index 092a9cb8..1fc78966 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,47 +13,54 @@ import { AssetTransferApi } from './AssetTransferApi'; const main = async () => { // const provider = new WsProvider(`wss://bifrost-polkadot-rpc.dwellir.com/ws`); - const provider = new WsProvider(`wss://hydradx-rpc.dwellir.com`); + // const provider = new WsProvider(`wss://hydradx-rpc.dwellir.com`); + // const provider = new WsProvider('wss://asset-hub-polkadot-rpc.dwellir.com'); + const provider = new WsProvider('wss://asset-hub-polkadot-rpc.dwellir.com'); + const api = await ApiPromise.create({ provider }); await api.isReady; - const assetTransferApi = new AssetTransferApi(api, 'hydradx', 4, - { - injectedRegistry: { - polkadot: { - 2034: { - xcAssetsData: [ - { - "symbol": "WETH.snow", - "xcmV1MultiLocation": "{\"v1\":{\"parents\":2,\"interior\":{\"x2\":[{\"globalConsensus\":{\"ethereum\":{\"chainId\":1}}},{\"accountKey20\":{\"network\":null,\"key\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"}}]}}}", - }, - ] - } - } - } - } + const assetTransferApi = new AssetTransferApi(api, 'asset-hub-polkadot', 4, + // { + // injectedRegistry: { + // polkadot: { + // 2034: { + // xcAssetsData: [ + // { + // "symbol": "WETH.snow", + // "xcmV1MultiLocation": "{\"v1\":{\"parents\":2,\"interior\":{\"x2\":[{\"globalConsensus\":{\"ethereum\":{\"chainId\":1}}},{\"accountKey20\":{\"network\":null,\"key\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"}}]}}}", + // }, + // ] + // } + // } + // } + // } ); const payload = await assetTransferApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + '2004', + // `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', // dest address - ['DOT', 'WETH.snow'], - ['10000000000000', '1000000000000'], + ['DOT'], + ['10000000000000'], { sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', - format: 'call', + format: 'payload', xcmVersion: 3, paysWithFeeDest: 'DOT', }, ); + const executionResult = await assetTransferApi.dryRunCall('7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', payload.tx, 'payload'); + console.log("EXECUTION RESULT---", JSON.stringify(executionResult)) + console.log('payload', JSON.stringify(payload)); - const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'call'); + const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'payload'); console.log('decodedPayload', decodedPayload); }; From 9dce245c15da5628b97c7255625670bea714eed9 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 11:48:17 -0500 Subject: [PATCH 08/13] add hydration to ethereum end to end tests for xcm v3 and v4 expanded existing e2e tests to cover xcm v3 and v4 updated integration tests --- README.md | 4 - e2e-tests/hydration.ethereum.spec.ts | 303 ++++++---- e2e-tests/moonbeam.hydration._spec.ts | 118 ---- e2e-tests/moonbeam.hydration.spec.ts | 206 +++++++ e2e-tests/polkadotAssetHub.bridgeHub._spec.ts | 88 --- e2e-tests/polkadotAssetHub.bridgeHub.spec.ts | 140 +++++ e2e-tests/polkadotAssetHub.hydration._spec.ts | 351 ----------- e2e-tests/polkadotAssetHub.hydration.spec.ts | 544 ++++++++++++++++++ .../hydrationToEthereumMainnetWETH.ts | 8 +- .../transferAssetsUsingTypeAndThen.ts | 2 +- src/createXcmTypes/ParaToEthereum.ts | 4 +- src/errors/checkXcmTxInputs.spec.ts | 12 +- src/errors/checkXcmTxInputs.ts | 15 +- src/index.ts | 62 -- .../parachains/hydration.spec.ts | 10 +- 15 files changed, 1111 insertions(+), 756 deletions(-) delete mode 100644 e2e-tests/moonbeam.hydration._spec.ts create mode 100644 e2e-tests/moonbeam.hydration.spec.ts delete mode 100644 e2e-tests/polkadotAssetHub.bridgeHub._spec.ts create mode 100644 e2e-tests/polkadotAssetHub.bridgeHub.spec.ts delete mode 100644 e2e-tests/polkadotAssetHub.hydration._spec.ts create mode 100644 e2e-tests/polkadotAssetHub.hydration.spec.ts diff --git a/README.md b/README.md index ccf4691e..cc4b91fa 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,6 @@ The below chart is focusing on what directions are supported for constructing as | Parachain to System | ✅ | ✅ | ✅ | | Parachain to Ethereum | ❌ | ✅ | ✅ | -## Note on Parachain to Parachain Support - -Parachain To Parachain support is currently limited to XCM V2, with the exception of Parachain primary asset tx construction (e.g. MOVR, SDN, etc.). - ## Note: System refers to System Parachains like Asset Hub. ## Usage diff --git a/e2e-tests/hydration.ethereum.spec.ts b/e2e-tests/hydration.ethereum.spec.ts index 6d8db245..34f79744 100644 --- a/e2e-tests/hydration.ethereum.spec.ts +++ b/e2e-tests/hydration.ethereum.spec.ts @@ -1,38 +1,24 @@ -import { setupNetworks, testingPairs, withExpect } from '@acala-network/chopsticks-testing'; +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; import { NetworkContext } from '@acala-network/chopsticks-utils'; -import { AccountData } from '@polkadot/types/interfaces'; +import { setTimeout } from 'timers/promises'; import { afterEach, beforeEach, expect, test } from 'vitest'; -import { PalletAssetsAssetAccount } from '@polkadot/types/lookup'; -const { checkSystemEvents } = withExpect(expect); import { AssetTransferApi } from '../src/AssetTransferApi'; -import { Option } from '@polkadot/types-codec'; -import { AugmentedEvents } from '@polkadot/api/types'; describe('Hydration <> Ethereum', () => { - const ethereumNetworkGlobalConsensusLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`; - const recipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; - const snowbridgeWETHLocation = { - parents: 2, - interior: { - X2: [ - { GlobalConsensus: { Ethereum: { chainId: 1 } } }, - { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, - ], - }, - }; - - let hydration: NetworkContext; + const ethereumNetworkGlobalConsensusLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`; + let hydration: NetworkContext; let polkadotAssetHub: NetworkContext; - let polkadotBridgeHub: NetworkContext; + let polkadotBridgeHub: NetworkContext; const { alice, alith } = testingPairs(); - beforeEach(async () => { + beforeEach(async () => { const { hydration1, polkadotBridgeHub1, polkadotAssetHub1 } = await setupNetworks({ - hydration1: { + hydration1: { endpoint: 'wss://rpc.hydradx.cloud', db: './db.sqlite', + port: 8010, }, polkadotBridgeHub1: { endpoint: 'wss://bridge-hub-polkadot-rpc.dwellir.com', @@ -46,100 +32,191 @@ describe('Hydration <> Ethereum', () => { }, }); - hydration = hydration1; + hydration = hydration1; polkadotBridgeHub = polkadotBridgeHub1; polkadotAssetHub = polkadotAssetHub1; - }, 200000); + }, 500000); - afterEach(async () => { + afterEach(async () => { await hydration.teardown(); - await polkadotAssetHub.teardown(); - await polkadotBridgeHub.teardown(); - }, 200000); - - test('Transfer Snowbridge WETH from Hydration to Ethereum', async () => { - await hydration.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX - ], - }, - Tokens: { - Accounts: [ - [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX - [[alice.address, 5], { free: '50000000000000000000000000' }], // DOT - [[alice.address, 1000189], { free: '500000000000000000000' }], // Snowbridge WETH - ], - }, - }); - - const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4, { - registryType: 'NPM', - injectedRegistry: { - polkadot: { - 2034: { - tokens: [], - assetsInfo: {}, - foreignAssetsInfo: {}, - poolPairsInfo: {}, - specName: 'hydradx', - xcAssetsData: [ - { - paraID: 0, - symbol: 'WETH.snow', - decimals: 18, - xcmV1MultiLocation: - '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', - asset: '1000189', - assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - }, - ], + await polkadotAssetHub.teardown(); + await polkadotBridgeHub.teardown(); + }, 500000); + + describe('XCM V3', () => { + const xcmVersion = 3; + + test('Transfer Snowbridge WETH from Hydration to Ethereum', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 5], { free: '50000000000000000000000000' }], // DOT + [[alice.address, 1000189], { free: '500000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, }, }, - }, - }); - - const tx = await assetTransferApi.createTransferTransaction( - ethereumNetworkGlobalConsensusLocation, - alith.address, - ['DOT', 'WETH.snow'], - ['500000000000', '75000000000000'], - { - sendersAddr: alice.address, - format: 'payload', - xcmVersion: 4, - paysWithFeeDest: 'DOT', - }, - ); - - console.log("payload", JSON.stringify(tx)); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await hydration.api.tx(extrinsic).signAndSend(alice); - await hydration.dev.newBlock(); - await polkadotAssetHub.dev.newBlock(); - - const assetHubEvents = await polkadotAssetHub.api.query.system.events(); - for (const event of assetHubEvents) { - console.log("EVENT---", event.toHuman()); - } - const foreignAssetsBurnedEvent = assetHubEvents[4]; - expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); - expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); - expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); - - const xcmMessageSentEvent = assetHubEvents[6]; - expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); - expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); - expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); - - await polkadotBridgeHub.dev.newBlock(); - - await checkSystemEvents(polkadotBridgeHub, 'ethereumOutboundQueue', 'balances') - const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); - for (const event of bridgeHubEvents) { - console.log("BridgeHub Events---", event.toHuman()); - } - }, 100000); -}); \ No newline at end of file + }); + + const tx = await assetTransferApi.createTransferTransaction( + ethereumNetworkGlobalConsensusLocation, + alith.address, + ['DOT', 'WETH.snow'], + ['500000000000', '75000000000000'], + { + sendersAddr: alice.address, + format: 'payload', + xcmVersion, + paysWithFeeDest: 'DOT', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const assetHubEvents = await polkadotAssetHub.api.query.system.events(); + const foreignAssetsBurnedEvent = assetHubEvents[4]; + expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); + expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); + expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); + + const xcmMessageSentEvent = assetHubEvents[6]; + expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); + expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); + expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); + + await setTimeout(5000); + await polkadotBridgeHub.dev.timeTravel(1); + + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; + expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); + + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; + expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); + }, 100000); + }); + describe('XCM V4', () => { + const xcmVersion = 4; + + test('Transfer Snowbridge WETH from Hydration to Ethereum', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 5], { free: '50000000000000000000000000' }], // DOT + [[alice.address, 1000189], { free: '500000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, + }, + }, + }); + + const tx = await assetTransferApi.createTransferTransaction( + ethereumNetworkGlobalConsensusLocation, + alith.address, + ['DOT', 'WETH.snow'], + ['500000000000', '75000000000000'], + { + sendersAddr: alice.address, + format: 'payload', + xcmVersion, + paysWithFeeDest: 'DOT', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const assetHubEvents = await polkadotAssetHub.api.query.system.events(); + const foreignAssetsBurnedEvent = assetHubEvents[4]; + expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); + expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); + expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); + + const xcmMessageSentEvent = assetHubEvents[6]; + expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); + expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); + expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); + + await setTimeout(5000); + await polkadotBridgeHub.dev.timeTravel(1); + + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; + expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); + + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; + expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); + }, 100000); + }); +}); diff --git a/e2e-tests/moonbeam.hydration._spec.ts b/e2e-tests/moonbeam.hydration._spec.ts deleted file mode 100644 index 1bd10d6e..00000000 --- a/e2e-tests/moonbeam.hydration._spec.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; -import { NetworkContext } from '@acala-network/chopsticks-utils'; -import { AccountData } from '@polkadot/types/interfaces'; -import { afterEach, beforeEach, expect, test } from 'vitest'; - -import { AssetTransferApi } from '../src/AssetTransferApi'; - -describe('Moonbeam <> Hydration', () => { - let hydration: NetworkContext; - let moonbeam: NetworkContext; - const hydrationRecipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; - const hdxMoonbeamAssetID = '69606720909260275826784788104880799692'; - - const { alice, alith } = testingPairs(); - - beforeEach(async () => { - const { hydration1, moonbeam1 } = await setupNetworks({ - hydration1: { - endpoint: 'wss://rpc.hydradx.cloud', - db: './db.sqlite', - port: 8000, - }, - moonbeam1: { - endpoint: 'wss://moonbeam-rpc.dwellir.com', - db: './db.sqlite', - port: 8001, - }, - }); - - hydration = hydration1; - moonbeam = moonbeam1; - }, 200000); - - afterEach(async () => { - await moonbeam.teardown(); - await hydration.teardown(); - }, 200000); - - test('Transfer GLMR from Moonbeam to Hydration', async () => { - await moonbeam.dev.setStorage({ - System: { - Account: [ - [[alith.address], { providers: 1, data: { free: '100000000000000000000000' } }], // GLMR - ], - }, - }); - - const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); - expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', 4); - const tx = await assetTransferApi.createTransferTransaction( - '2034', - hydrationRecipientAddress, - ['GLMR'], - ['10000000000000000000'], - { - format: 'payload', - xcmVersion: 4, - sendersAddr: alith.address, - }, - ); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await moonbeam.api.tx(extrinsic).signAndSend(alith); - await moonbeam.dev.newBlock(); - - await hydration.dev.newBlock(); - - const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); - - expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( - (recipientInitialGLMRBalance as AccountData).free.toBigInt(), - ); - }, 100000); - - test('Transfer HDX from Hydration to Moonbeam', async () => { - await hydration.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: '50000000000000000000000000' } }], // HDX - ], - }, - Tokens: { - Accounts: [ - [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX - ], - }, - }); - - const recipientInitialHDXBalance = ( - await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) - ).unwrapOrDefault(); - expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); - const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await hydration.api.tx(extrinsic).signAndSend(alice); - await hydration.dev.newBlock(); - - await moonbeam.dev.newBlock(); - - const recipientUpdatedHDXBalance = ( - await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) - ).unwrapOrDefault(); - expect(recipientUpdatedHDXBalance.balance.toBigInt()).toBeGreaterThan( - recipientInitialHDXBalance.balance.toBigInt(), - ); - }, 100000); -}); diff --git a/e2e-tests/moonbeam.hydration.spec.ts b/e2e-tests/moonbeam.hydration.spec.ts new file mode 100644 index 00000000..443bf69c --- /dev/null +++ b/e2e-tests/moonbeam.hydration.spec.ts @@ -0,0 +1,206 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { AccountData } from '@polkadot/types/interfaces'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Moonbeam <> Hydration', () => { + let hydration: NetworkContext; + let moonbeam: NetworkContext; + const hydrationRecipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; + const hdxMoonbeamAssetID = '69606720909260275826784788104880799692'; + + const { alice, alith } = testingPairs(); + + beforeEach(async () => { + const { hydration1, moonbeam1 } = await setupNetworks({ + hydration1: { + endpoint: 'wss://rpc.hydradx.cloud', + db: './db.sqlite', + port: 8000, + }, + moonbeam1: { + endpoint: 'wss://moonbeam-rpc.dwellir.com', + db: './db.sqlite', + port: 8001, + }, + }); + + hydration = hydration1; + moonbeam = moonbeam1; + }, 500000); + + afterEach(async () => { + await moonbeam.teardown(); + await hydration.teardown(); + }, 500000); + + describe('XCM V3', () => { + const xcmVersion = 3; + + test('Transfer GLMR from Moonbeam to Hydration', async () => { + await moonbeam.dev.setStorage({ + System: { + Account: [ + [[alith.address], { providers: 1, data: { free: '100000000000000000000000' } }], // GLMR + ], + }, + }); + + const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + hydrationRecipientAddress, + ['GLMR'], + ['10000000000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alith.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await moonbeam.api.tx(extrinsic).signAndSend(alith); + await moonbeam.dev.newBlock(); + + await hydration.dev.newBlock(); + + const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + + expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( + (recipientInitialGLMRBalance as AccountData).free.toBigInt(), + ); + }, 100000); + + test('Transfer HDX from Hydration to Moonbeam', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: '50000000000000000000000000' } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + ], + }, + }); + + const recipientInitialHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await moonbeam.dev.newBlock(); + + const recipientUpdatedHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientUpdatedHDXBalance.balance.toBigInt()).toBeGreaterThan( + recipientInitialHDXBalance.balance.toBigInt(), + ); + }, 100000); + }); + + describe('XCM V4', () => { + const xcmVersion = 4; + + test('Transfer GLMR from Moonbeam to Hydration', async () => { + await moonbeam.dev.setStorage({ + System: { + Account: [ + [[alith.address], { providers: 1, data: { free: '100000000000000000000000' } }], // GLMR + ], + }, + }); + + const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + hydrationRecipientAddress, + ['GLMR'], + ['10000000000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alith.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await moonbeam.api.tx(extrinsic).signAndSend(alith); + await moonbeam.dev.newBlock(); + + await hydration.dev.newBlock(); + + const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); + + expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( + (recipientInitialGLMRBalance as AccountData).free.toBigInt(), + ); + }, 100000); + + test('Transfer HDX from Hydration to Moonbeam', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: '50000000000000000000000000' } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + ], + }, + }); + + const recipientInitialHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await moonbeam.dev.newBlock(); + + const recipientUpdatedHDXBalance = ( + await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) + ).unwrapOrDefault(); + expect(recipientUpdatedHDXBalance.balance.toBigInt()).toBeGreaterThan( + recipientInitialHDXBalance.balance.toBigInt(), + ); + }, 100000); + }); +}); diff --git a/e2e-tests/polkadotAssetHub.bridgeHub._spec.ts b/e2e-tests/polkadotAssetHub.bridgeHub._spec.ts deleted file mode 100644 index 0f1fd3fc..00000000 --- a/e2e-tests/polkadotAssetHub.bridgeHub._spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; -import { NetworkContext } from '@acala-network/chopsticks-utils'; -import { afterEach, beforeEach, expect, test } from 'vitest'; - -import { AssetTransferApi } from '../src/AssetTransferApi'; - -describe('Polkadot AssetHub <> Ethereum', () => { - const snowbridgeWETHLocation = { - parents: 2, - interior: { - X2: [ - { GlobalConsensus: { Ethereum: { chainId: 1 } } }, - { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, - ], - }, - }; - let polkadotBridgeHub: NetworkContext; - let polkadotAssetHub: NetworkContext; - - const { alice, alith } = testingPairs(); - - beforeEach(async () => { - const { polkadotBridgeHub1, polkadotAssetHub1 } = await setupNetworks({ - polkadotBridgeHub1: { - endpoint: 'wss://bridge-hub-polkadot-rpc.dwellir.com', - db: './db.sqlite', - port: 8003, - }, - polkadotAssetHub1: { - endpoint: 'wss://asset-hub-polkadot-rpc.dwellir.com', - db: './db.sqlite', - port: 8004, - }, - }); - - polkadotBridgeHub = polkadotBridgeHub1; - polkadotAssetHub = polkadotAssetHub1; - }, 200000); - - afterEach(async () => { - await polkadotBridgeHub.teardown(); - await polkadotAssetHub.teardown(); - }, 200000); - - test('Snowbridge WETH From AssetHub to Ethereum', async () => { - await polkadotAssetHub.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT - ], - }, - ForeignAssets: { - Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], - }, - }); - - const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, - alith.address, - [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, - ], - ['25000000000000'], - { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }, - ); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); - await polkadotAssetHub.dev.newBlock(); - await polkadotBridgeHub.dev.newBlock(); - - const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); - - const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; - expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); - expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); - - const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; - expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); - expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); - }, 5000000); -}); diff --git a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts new file mode 100644 index 00000000..96265d91 --- /dev/null +++ b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts @@ -0,0 +1,140 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Polkadot AssetHub <> Ethereum', () => { + const snowbridgeWETHLocation = { + parents: 2, + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: 1 } } }, + { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, + ], + }, + }; + let polkadotBridgeHub: NetworkContext; + let polkadotAssetHub: NetworkContext; + + const { alice, alith } = testingPairs(); + + beforeEach(async () => { + const { polkadotBridgeHub1, polkadotAssetHub1 } = await setupNetworks({ + polkadotBridgeHub1: { + endpoint: 'wss://bridge-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8003, + }, + polkadotAssetHub1: { + endpoint: 'wss://asset-hub-polkadot-rpc.dwellir.com', + db: './db.sqlite', + port: 8004, + }, + }); + + polkadotBridgeHub = polkadotBridgeHub1; + polkadotAssetHub = polkadotAssetHub1; + }, 500000); + + afterEach(async () => { + await polkadotBridgeHub.teardown(); + await polkadotAssetHub.teardown(); + }, 500000); + + describe('XCM V3', () => { + const xcmVersion = 3; + + test('Snowbridge WETH From AssetHub to Ethereum', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + alith.address, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await polkadotBridgeHub.dev.newBlock(); + + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; + expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); + + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; + expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); + }, 100000); + }); + + describe('XCM V4', () => { + const xcmVersion = 4; + + test('Snowbridge WETH From AssetHub to Ethereum', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + alith.address, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await polkadotBridgeHub.dev.newBlock(); + + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); + + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; + expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); + + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; + expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); + expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); + }, 100000); + }); +}); diff --git a/e2e-tests/polkadotAssetHub.hydration._spec.ts b/e2e-tests/polkadotAssetHub.hydration._spec.ts deleted file mode 100644 index 69960741..00000000 --- a/e2e-tests/polkadotAssetHub.hydration._spec.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; -import { NetworkContext } from '@acala-network/chopsticks-utils'; -import { AccountData } from '@polkadot/types/interfaces'; -import { PalletAssetsAssetAccount } from '@polkadot/types/lookup'; -import { Option } from '@polkadot/types-codec'; -import { afterEach, beforeEach, expect, test } from 'vitest'; - -import { AssetTransferApi } from '../src/AssetTransferApi'; - -describe('Polkadot AssetHub <> Hydration', () => { - let hydration: NetworkContext; - let polkadotAssetHub: NetworkContext; - - const { alice } = testingPairs(); - const recipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; - const snowbridgeWETHLocation = { - parents: 2, - interior: { - X2: [ - { GlobalConsensus: { Ethereum: { chainId: 1 } } }, - { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, - ], - }, - }; - - beforeEach(async () => { - const { hydration1, polkadotAssetHub1 } = await setupNetworks({ - hydration1: { - endpoint: 'wss://hydration.ibp.network', - db: './db.sqlite', - port: 8006, - }, - polkadotAssetHub1: { - endpoint: 'wss://polkadot-asset-hub-rpc.polkadot.io', - db: './db.sqlite', - port: 8007, - }, - }); - - hydration = hydration1; - polkadotAssetHub = polkadotAssetHub1; - }, 200000); - - afterEach(async () => { - await polkadotAssetHub.teardown(); - await hydration.teardown(); - }, 200000); - - test('AssetHub Local DOT Transfer', async () => { - await polkadotAssetHub.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT - ], - }, - }); - - const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; - expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['dot'], ['1000000000000'], { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); - await polkadotAssetHub.dev.newBlock(); - - const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; - expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(1000000); - }, 50000); - - test('AssetHub Local Pool Asset Transfer', async () => { - await polkadotAssetHub.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT - [[recipientAddress], { providers: 1, data: { free: 2 * 1e12 } }], // DOT - ], - }, - PoolAssets: { - Account: [[[30, alice.address], { balance: 75000000000000 }]], - }, - }); - - const aliceBalance = (await polkadotAssetHub.api.query.poolAssets.account(30, alice.address)).unwrapOrDefault(); - expect(aliceBalance.balance.toNumber()).toEqual(75000000000000); - - const recipientsInitialPoolAssetBalance = ( - await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) - ).unwrapOrDefault(); - expect(recipientsInitialPoolAssetBalance.balance.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['30'], ['10'], { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - transferLiquidToken: true, - }); - - console.log('payload', JSON.stringify(tx)); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); - await polkadotAssetHub.dev.newBlock(); - - const recipientsUpdatedPoolAssetBalance = ( - await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) - ).unwrapOrDefault(); - expect(recipientsUpdatedPoolAssetBalance.balance.toNumber()).toBeGreaterThan( - recipientsInitialPoolAssetBalance.balance.toNumber(), - ); - }, 50000); - - test('Hydration Local HDX Transfer', async () => { - await hydration.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX - ], - }, - Tokens: { - Accounts: [ - [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX - ], - }, - }); - - const recipientInitialHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); - expect((recipientInitialHDXBalance as AccountData).free.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); - const tx = await assetTransferApi.createTransferTransaction( - '2034', - recipientAddress, - ['0'], // HDX currency ID - ['1000000000000'], - { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }, - ); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await hydration.api.tx(extrinsic).signAndSend(alice); - await hydration.dev.newBlock(); - - const recipientUpdatedHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); - expect((recipientUpdatedHDXBalance as AccountData).free.toNumber()).toBeGreaterThan( - (recipientInitialHDXBalance as AccountData).free.toNumber(), - ); - }, 70000); - - test('Transfer DOT From Hydration to AssetHub', async () => { - await hydration.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX - ], - }, - Tokens: { - Accounts: [ - [[alice.address, 5], { free: 1000 * 1e12 }], // DOT - ], - }, - }); - - const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; - expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }); - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await hydration.api.tx(extrinsic).signAndSend(alice); - await hydration.dev.newBlock(); - await polkadotAssetHub.dev.newBlock(); - - const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; - expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); - expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); - }, 70000); - - test('Transfer DOT From AssetHub to Hydration', async () => { - await polkadotAssetHub.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT - ], - }, - }); - - const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); - expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - }); - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); - await polkadotAssetHub.dev.newBlock(); - await hydration.dev.newBlock(); - - const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); - expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( - (recipientsInitialDOTBalance as AccountData).free.toNumber(), - ); - }, 50000); - - test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { - await hydration.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX - ], - }, - Tokens: { - Accounts: [ - [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX - [[alice.address, 1000189], { free: '50000000000000000000000000' }], // Snowbridge WETH - ], - }, - }); - - const recipientsInitialWETHBalance = ( - (await polkadotAssetHub.api.query.foreignAssets.account( - snowbridgeWETHLocation, - recipientAddress, - )) as Option - ).unwrapOrDefault(); - expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4, { - registryType: 'NPM', - injectedRegistry: { - polkadot: { - 2034: { - tokens: [], - assetsInfo: {}, - foreignAssetsInfo: {}, - poolPairsInfo: {}, - specName: 'hydradx', - xcAssetsData: [ - { - paraID: 0, - symbol: 'WETH.snow', - decimals: 18, - xcmV1MultiLocation: - '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', - asset: '1000189', - assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - }, - ], - }, - }, - }, - }); - const tx = await assetTransferApi.createTransferTransaction( - '1000', - recipientAddress, - ['WETH.snow'], - ['25000000000000'], - { - format: 'payload', - xcmVersion: 4, - sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', - }, - ); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await hydration.api.tx(extrinsic).signAndSend(alice); - await hydration.dev.newBlock(); - - await polkadotAssetHub.dev.newBlock(); - - const recipientsUpdatedWETHBalance = ( - (await polkadotAssetHub.api.query.foreignAssets.account( - snowbridgeWETHLocation, - recipientAddress, - )) as Option - ).unwrapOrDefault(); - - expect(JSON.stringify(recipientsUpdatedWETHBalance)).not.toEqual('null'); - expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(0); - }, 50000); - - test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { - await polkadotAssetHub.dev.setStorage({ - System: { - Account: [ - [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT - ], - }, - ForeignAssets: { - Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], - }, - }); - - const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); - expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); - - const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction( - '2034', - recipientAddress, - [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, - ], - ['25000000000000'], - { - format: 'payload', - xcmVersion: 4, - sendersAddr: alice.address, - paysWithFeeDest: - '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}', - assetTransferType: 'LocalReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'LocalReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - }, - ); - - const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - - await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); - await polkadotAssetHub.dev.newBlock(); - await hydration.dev.newBlock(); - - const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); - expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( - (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), - ); - }, 50000); -}); diff --git a/e2e-tests/polkadotAssetHub.hydration.spec.ts b/e2e-tests/polkadotAssetHub.hydration.spec.ts new file mode 100644 index 00000000..1db56d13 --- /dev/null +++ b/e2e-tests/polkadotAssetHub.hydration.spec.ts @@ -0,0 +1,544 @@ +import { setupNetworks, testingPairs } from '@acala-network/chopsticks-testing'; +import { NetworkContext } from '@acala-network/chopsticks-utils'; +import { AccountData } from '@polkadot/types/interfaces'; +import { PalletAssetsAssetAccount } from '@polkadot/types/lookup'; +import { Option } from '@polkadot/types-codec'; +import { afterEach, beforeEach, expect, test } from 'vitest'; + +import { AssetTransferApi } from '../src/AssetTransferApi'; + +describe('Polkadot AssetHub <> Hydration', () => { + let hydration: NetworkContext; + let polkadotAssetHub: NetworkContext; + + const { alice } = testingPairs(); + const recipientAddress = '15McF4S5ZsoAJGzdXE3FwSFVjSPoz1Cd7Xj7VQZCb7HULcjx'; + const snowbridgeWETHLocation = { + parents: 2, + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: 1 } } }, + { AccountKey20: { network: null, key: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' } }, + ], + }, + }; + + beforeEach(async () => { + const { hydration1, polkadotAssetHub1 } = await setupNetworks({ + hydration1: { + endpoint: 'wss://hydration.ibp.network', + db: './db.sqlite', + port: 8006, + }, + polkadotAssetHub1: { + endpoint: 'wss://polkadot-asset-hub-rpc.polkadot.io', + db: './db.sqlite', + port: 8007, + }, + }); + + hydration = hydration1; + polkadotAssetHub = polkadotAssetHub1; + }, 500000); + + afterEach(async () => { + await polkadotAssetHub.teardown(); + await hydration.teardown(); + }, 500000); + + describe('Local Transfers', () => { + test('AssetHub Local DOT Transfer', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['dot'], ['1000000000000'], { + format: 'payload', + sendersAddr: alice.address, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(1000000); + }, 100000); + + test('AssetHub Local Pool Asset Transfer', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + [[recipientAddress], { providers: 1, data: { free: 2 * 1e12 } }], // DOT + ], + }, + PoolAssets: { + Account: [[[30, alice.address], { balance: 75000000000000 }]], + }, + }); + + const aliceBalance = (await polkadotAssetHub.api.query.poolAssets.account(30, alice.address)).unwrapOrDefault(); + expect(aliceBalance.balance.toNumber()).toEqual(75000000000000); + + const recipientsInitialPoolAssetBalance = ( + await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) + ).unwrapOrDefault(); + expect(recipientsInitialPoolAssetBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['30'], ['10'], { + format: 'payload', + sendersAddr: alice.address, + transferLiquidToken: true, + }); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedPoolAssetBalance = ( + await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) + ).unwrapOrDefault(); + expect(recipientsUpdatedPoolAssetBalance.balance.toNumber()).toBeGreaterThan( + recipientsInitialPoolAssetBalance.balance.toNumber(), + ); + }, 100000); + + test('Hydration Local HDX Transfer', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + ], + }, + }); + + const recipientInitialHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); + expect((recipientInitialHDXBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + ['0'], // HDX currency ID + ['1000000000000'], + { + format: 'payload', + sendersAddr: alice.address, + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + const recipientUpdatedHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); + expect((recipientUpdatedHDXBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientInitialHDXBalance as AccountData).free.toNumber(), + ); + }, 100000); + }); + + describe('XCM V3', () => { + const xcmVersion = 3; + + test('Transfer DOT From Hydration to AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 5], { free: 1000 * 1e12 }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); + expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); + }, 100000); + + test('Transfer DOT From AssetHub to Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialDOTBalance as AccountData).free.toNumber(), + ); + }, 100000); + + test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 1000189], { free: '50000000000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const recipientsInitialWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, + }, + }, + }); + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['WETH.snow'], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + + expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(recipientsInitialWETHBalance.balance.toNumber()); + }, 100000); + + test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + paysWithFeeDest: + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}', + assetTransferType: 'LocalReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'LocalReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), + ); + }, 100000); + }); + + describe('XCM V4', () => { + const xcmVersion = 4; + + test('Transfer DOT From Hydration to AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 5], { free: 1000 * 1e12 }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; + expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); + expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); + }, 100000); + + test('Transfer DOT From AssetHub to Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + }); + + const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); + expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialDOTBalance as AccountData).free.toNumber(), + ); + }, 100000); + + test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { + await hydration.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // HDX + ], + }, + Tokens: { + Accounts: [ + [[alice.address, 0], { free: '50000000000000000000000000' }], // HDX + [[alice.address, 1000189], { free: '50000000000000000000000000' }], // Snowbridge WETH + ], + }, + }); + + const recipientsInitialWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { + registryType: 'NPM', + injectedRegistry: { + polkadot: { + 2034: { + tokens: [], + assetsInfo: {}, + foreignAssetsInfo: {}, + poolPairsInfo: {}, + specName: 'hydradx', + xcAssetsData: [ + { + paraID: 0, + symbol: 'WETH.snow', + decimals: 18, + xcmV1MultiLocation: + '{"v1":{"parents":2,"interior":{"x2":[{"globalConsensus":{"ethereum":{"chainId":1}}},{"accountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}}', + asset: '1000189', + assetHubReserveLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ], + }, + }, + }, + }); + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['WETH.snow'], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await hydration.api.tx(extrinsic).signAndSend(alice); + await hydration.dev.newBlock(); + + await polkadotAssetHub.dev.newBlock(); + + const recipientsUpdatedWETHBalance = ( + (await polkadotAssetHub.api.query.foreignAssets.account( + snowbridgeWETHLocation, + recipientAddress, + )) as Option + ).unwrapOrDefault(); + + expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(recipientsInitialWETHBalance.balance.toNumber()); + }, 100000); + + test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { + await polkadotAssetHub.dev.setStorage({ + System: { + Account: [ + [[alice.address], { providers: 1, data: { free: 10 * 1e12 } }], // DOT + ], + }, + ForeignAssets: { + Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], + }, + }); + + const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); + + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}`, + ], + ['25000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + paysWithFeeDest: + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}},{"AccountKey20":{"network":null,"key":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"}}]}}', + assetTransferType: 'LocalReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'LocalReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); + + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); + await polkadotAssetHub.dev.newBlock(); + await hydration.dev.newBlock(); + + const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( + (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), + ); + }, 100000); + }); +}); diff --git a/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts index 39f040d2..aaa56d2c 100644 --- a/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts +++ b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts @@ -38,10 +38,10 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}]}}`, - '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - ['WETH.snow', 'DOT'], - ['1000000000000', '10000000000'], + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + ['DOT', 'WETH.snow'], + ['500000000000', '75000000000000'], { sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', format: 'call', diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index e5d9c075..1f45198a 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -25,10 +25,10 @@ import { BaseError, BaseErrorsEnum } from '../../errors'; import { sanitizeAddress } from '../../sanitize/sanitizeAddress'; import { AssetTransferType, Direction } from '../../types'; import { normalizeArrToStr } from '../../util/normalizeArrToStr'; +import { resolveMultiLocation } from '../../util/resolveMultiLocation'; import type { CreateXcmCallOpts } from '../types'; import { establishXcmPallet } from '../util/establishXcmPallet'; import type { PolkadotXcmBaseArgs } from './types'; -import { resolveMultiLocation } from '../../util/resolveMultiLocation'; /** * Build a Polkadot-js SubmittableExtrinsic for a `transferAssetsUsingTypeAndThen` call. * diff --git a/src/createXcmTypes/ParaToEthereum.ts b/src/createXcmTypes/ParaToEthereum.ts index 81083b29..11a476eb 100644 --- a/src/createXcmTypes/ParaToEthereum.ts +++ b/src/createXcmTypes/ParaToEthereum.ts @@ -23,10 +23,10 @@ import type { XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; +import { getParachainNativeAssetLocation } from './util/getParachainNativeAssetLocation'; import { getXcAssetMultiLocationByAssetId } from './util/getXcAssetMultiLocationByAssetId'; import { isParachainPrimaryNativeAsset } from './util/isParachainPrimaryNativeAsset'; import { sortAssetsAscending } from './util/sortAssetsAscending'; -import { getParachainNativeAssetLocation } from './util/getParachainNativeAssetLocation'; export const ParaToEthereum: ICreateXcmType = { /** @@ -150,7 +150,7 @@ export const ParaToEthereum: ICreateXcmType = { assets, xcmVersion, registry, - destChainId + destChainId, ); if (xcmVersion === 2) { diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index 17931e02..d8e4725a 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -56,13 +56,21 @@ const runTests = async (tests: Test[]) => { }; describe('checkParaToEthereum', () => { + const ethereumAccountAddress = '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B'; + const substrateAccountAddress = '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX'; + + it ('Should correctly throw an error when destAddress is not an ethereum address', () => { + const err = () => checkParaToEthereum(substrateAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); + + expect(err).toThrow('destAddress must be a valid ethereum address for ParaToEthereum XCM direction'); + }); it('Should correctly throw an error when paysWithFeeDest is not provided', () => { - const err = () => checkParaToEthereum('7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); + const err = () => checkParaToEthereum(ethereumAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); expect(err).toThrow('paysWithFeeDest option must be provided for ParaToEthereum XCM direction'); }); it('Should correctly throw an error when sendersAddr is not provided', () => { - const err = () => checkParaToEthereum(undefined, 'DOT'); + const err = () => checkParaToEthereum(ethereumAccountAddress, undefined, 'DOT'); expect(err).toThrow('sendersAddr option must be provided for ParaToEthereum XCM direction'); }); diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 0edd9991..793ad7e0 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -628,10 +628,7 @@ export const checkParaAssets = async ( } } else { // check for assetId symbol match - console.log('THE ASSET---', assetId); - for (const info of paraXcAssets) { - console.log('INFOS ASSET---', info.asset); if (typeof info.symbol === 'string' && info.symbol.toLowerCase() === assetId.toLowerCase()) { return; } else if (assetIdIsLocation(assetId)) { @@ -1111,7 +1108,7 @@ export const checkAssetIdInput = async ( * @param registry */ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: CheckXcmTxInputsOpts) => { - const { api, direction, assetIds, amounts, destChainId, xcmVersion, specName, registry, xcmPallet } = baseArgs; + const { api, direction, assetIds, amounts, destChainId, xcmVersion, specName, registry, xcmPallet, destAddr } = baseArgs; const { paysWithFeeDest, isForeignAssetsTransfer, @@ -1253,11 +1250,17 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch } if (direction === Direction.ParaToEthereum) { - checkParaToEthereum(sendersAddr, paysWithFeeDest); + checkParaToEthereum(destAddr, sendersAddr, paysWithFeeDest); } }; -export const checkParaToEthereum = (sendersAddr?: string, paysWithFeeDest?: string) => { +export const checkParaToEthereum = (destAddr: string, sendersAddr?: string, paysWithFeeDest?: string) => { + if (!isEthereumAddress(destAddr)) { + throw new BaseError( + 'destAddress must be a valid ethereum address for ParaToEthereum XCM direction', + BaseErrorsEnum.InvalidInput, + ); + } if (!paysWithFeeDest) { throw new BaseError( 'paysWithFeeDest option must be provided for ParaToEthereum XCM direction', diff --git a/src/index.ts b/src/index.ts index 1fc78966..270fc9e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,65 +3,3 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; - -// import { hexToU8a} from '@polkadot/util'; -// import type { ExtrinsicPayloadValue } from '@polkadot/types/types'; - -import { ApiPromise, WsProvider } from '@polkadot/api'; - -import { AssetTransferApi } from './AssetTransferApi'; - -const main = async () => { - // const provider = new WsProvider(`wss://bifrost-polkadot-rpc.dwellir.com/ws`); - // const provider = new WsProvider(`wss://hydradx-rpc.dwellir.com`); - // const provider = new WsProvider('wss://asset-hub-polkadot-rpc.dwellir.com'); - const provider = new WsProvider('wss://asset-hub-polkadot-rpc.dwellir.com'); - - - const api = await ApiPromise.create({ provider }); - - await api.isReady; - - const assetTransferApi = new AssetTransferApi(api, 'asset-hub-polkadot', 4, - // { - // injectedRegistry: { - // polkadot: { - // 2034: { - // xcAssetsData: [ - // { - // "symbol": "WETH.snow", - // "xcmV1MultiLocation": "{\"v1\":{\"parents\":2,\"interior\":{\"x2\":[{\"globalConsensus\":{\"ethereum\":{\"chainId\":1}}},{\"accountKey20\":{\"network\":null,\"key\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"}}]}}}", - // }, - // ] - // } - // } - // } - // } -); - - - - const payload = await assetTransferApi.createTransferTransaction( - '2004', - // `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, - '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', // dest address - ['DOT'], - ['10000000000000'], - { - sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', - format: 'payload', - xcmVersion: 3, - paysWithFeeDest: 'DOT', - }, - ); - - const executionResult = await assetTransferApi.dryRunCall('7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', payload.tx, 'payload'); - console.log("EXECUTION RESULT---", JSON.stringify(executionResult)) - - console.log('payload', JSON.stringify(payload)); - - const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'payload'); - console.log('decodedPayload', decodedPayload); -}; - -main(); diff --git a/src/integrationTests/parachains/hydration.spec.ts b/src/integrationTests/parachains/hydration.spec.ts index 5c199dec..94b8068c 100644 --- a/src/integrationTests/parachains/hydration.spec.ts +++ b/src/integrationTests/parachains/hydration.spec.ts @@ -26,17 +26,17 @@ describe('Hydration', () => { const result = await hydrationATA.createTransferTransaction( `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', - ['WETH.snow'], - ['10000000000000'], + ['DOT', 'WETH.snow'], + ['10000000000000', '95000000000000'], { sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', format: 'payload', xcmVersion: 3, - paysWithFeeDest: 'WETH.snow', + paysWithFeeDest: 'DOT', }, ); const expected = - '0x69046b0d03010100a10f03040002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000b00a0724e180902030002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc202030c16040d01000001010062fecf9c60d8d49d400bd86804558401ec7151fecd440041ca6bf5fd578251771001010002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20002010907040c130000010300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20004000d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b2c00000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300'; + '0x31046b0d03010100a10f0308000100000b00a0724e18090002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000b00f040e96656020300010002030c16040d01000001010062fecf9c60d8d49d400bd86804558401ec7151fecd440041ca6bf5fd578251771001010002020907040300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20002010907040c130000010300c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20004000d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b2c00000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300'; expect(result.tx.toHex()).toEqual(expected); }); @@ -44,7 +44,7 @@ describe('Hydration', () => { describe('XCM V4', () => { it('Should correctly construct a transferAssetsUsingTypeAndThen call from Hydration to Ethereum paying destination fees with DOT', async () => { const result = await hydrationATA.createTransferTransaction( - `{"parents":"2","interior":{"X1":[{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}]}}`, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', ['DOT', 'WETH.snow'], ['10000000000000', '10000000000000'], From bd6430f0993e17ad04ace757d4336d24082f80a5 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 14:57:09 -0500 Subject: [PATCH 09/13] lint --- e2e-tests/hydration.ethereum.spec.ts | 36 +-- e2e-tests/moonbeam.hydration.spec.ts | 86 ++++--- e2e-tests/polkadotAssetHub.bridgeHub.spec.ts | 24 +- e2e-tests/polkadotAssetHub.hydration.spec.ts | 224 +++++++++++-------- src/errors/checkXcmTxInputs.spec.ts | 8 +- src/errors/checkXcmTxInputs.ts | 3 +- 6 files changed, 218 insertions(+), 163 deletions(-) diff --git a/e2e-tests/hydration.ethereum.spec.ts b/e2e-tests/hydration.ethereum.spec.ts index 34f79744..a4d2a041 100644 --- a/e2e-tests/hydration.ethereum.spec.ts +++ b/e2e-tests/hydration.ethereum.spec.ts @@ -61,7 +61,7 @@ describe('Hydration <> Ethereum', () => { ], }, }); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { registryType: 'NPM', injectedRegistry: { @@ -87,7 +87,7 @@ describe('Hydration <> Ethereum', () => { }, }, }); - + const tx = await assetTransferApi.createTransferTransaction( ethereumNetworkGlobalConsensusLocation, alith.address, @@ -100,32 +100,32 @@ describe('Hydration <> Ethereum', () => { paysWithFeeDest: 'DOT', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); await polkadotAssetHub.dev.newBlock(); - + const assetHubEvents = await polkadotAssetHub.api.query.system.events(); const foreignAssetsBurnedEvent = assetHubEvents[4]; expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); - + const xcmMessageSentEvent = assetHubEvents[6]; expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); - + await setTimeout(5000); await polkadotBridgeHub.dev.timeTravel(1); - + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); - + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); @@ -149,7 +149,7 @@ describe('Hydration <> Ethereum', () => { ], }, }); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { registryType: 'NPM', injectedRegistry: { @@ -175,7 +175,7 @@ describe('Hydration <> Ethereum', () => { }, }, }); - + const tx = await assetTransferApi.createTransferTransaction( ethereumNetworkGlobalConsensusLocation, alith.address, @@ -188,32 +188,32 @@ describe('Hydration <> Ethereum', () => { paysWithFeeDest: 'DOT', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); await polkadotAssetHub.dev.newBlock(); - + const assetHubEvents = await polkadotAssetHub.api.query.system.events(); const foreignAssetsBurnedEvent = assetHubEvents[4]; expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); - + const xcmMessageSentEvent = assetHubEvents[6]; expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); - + await setTimeout(5000); await polkadotBridgeHub.dev.timeTravel(1); - + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); - + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); diff --git a/e2e-tests/moonbeam.hydration.spec.ts b/e2e-tests/moonbeam.hydration.spec.ts index 443bf69c..b10ec6e2 100644 --- a/e2e-tests/moonbeam.hydration.spec.ts +++ b/e2e-tests/moonbeam.hydration.spec.ts @@ -47,10 +47,10 @@ describe('Moonbeam <> Hydration', () => { ], }, }); - + const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( '2034', @@ -63,21 +63,21 @@ describe('Moonbeam <> Hydration', () => { sendersAddr: alith.address, }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await moonbeam.api.tx(extrinsic).signAndSend(alith); await moonbeam.dev.newBlock(); - + await hydration.dev.newBlock(); - + const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); - + expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( (recipientInitialGLMRBalance as AccountData).free.toBigInt(), ); }, 100000); - + test('Transfer HDX from Hydration to Moonbeam', async () => { await hydration.dev.setStorage({ System: { @@ -91,26 +91,32 @@ describe('Moonbeam <> Hydration', () => { ], }, }); - + const recipientInitialHDXBalance = ( await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) ).unwrapOrDefault(); expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); - + const tx = await assetTransferApi.createTransferTransaction( + '2004', + alith.address, + ['HDX'], + ['10000000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); - + await moonbeam.dev.newBlock(); - + const recipientUpdatedHDXBalance = ( await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) ).unwrapOrDefault(); @@ -131,10 +137,10 @@ describe('Moonbeam <> Hydration', () => { ], }, }); - + const recipientInitialGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); expect((recipientInitialGLMRBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(moonbeam.api, 'moonbeam', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( '2034', @@ -147,16 +153,16 @@ describe('Moonbeam <> Hydration', () => { sendersAddr: alith.address, }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await moonbeam.api.tx(extrinsic).signAndSend(alith); await moonbeam.dev.newBlock(); - + await hydration.dev.newBlock(); - + const recipientUpdatedGLMRBalance = await hydration.api.query.tokens.accounts(hydrationRecipientAddress, 16); - + expect((recipientUpdatedGLMRBalance as AccountData).free.toBigInt()).toBeGreaterThan( (recipientInitialGLMRBalance as AccountData).free.toBigInt(), ); @@ -175,26 +181,32 @@ describe('Moonbeam <> Hydration', () => { ], }, }); - + const recipientInitialHDXBalance = ( await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) ).unwrapOrDefault(); expect(recipientInitialHDXBalance.balance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('2004', alith.address, ['HDX'], ['10000000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); - + const tx = await assetTransferApi.createTransferTransaction( + '2004', + alith.address, + ['HDX'], + ['10000000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); - + await moonbeam.dev.newBlock(); - + const recipientUpdatedHDXBalance = ( await moonbeam.api.query.assets.account(hdxMoonbeamAssetID, alith.address) ).unwrapOrDefault(); diff --git a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts index 96265d91..c9abf9c9 100644 --- a/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts +++ b/e2e-tests/polkadotAssetHub.bridgeHub.spec.ts @@ -56,7 +56,7 @@ describe('Polkadot AssetHub <> Ethereum', () => { Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], }, }); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, @@ -71,19 +71,19 @@ describe('Polkadot AssetHub <> Ethereum', () => { sendersAddr: alice.address, }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await polkadotBridgeHub.dev.newBlock(); - + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); - + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); - + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); @@ -104,7 +104,7 @@ describe('Polkadot AssetHub <> Ethereum', () => { Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], }, }); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, @@ -119,19 +119,19 @@ describe('Polkadot AssetHub <> Ethereum', () => { sendersAddr: alice.address, }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await polkadotBridgeHub.dev.newBlock(); - + const bridgeHubEvents = await polkadotBridgeHub.api.query.system.events(); - + const messageAcceptedEvent = bridgeHubEvents[bridgeHubEvents.length - 3]; expect(messageAcceptedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageAcceptedEvent.event.method).toEqual('MessageAccepted'); - + const messageCommittedEvent = bridgeHubEvents[bridgeHubEvents.length - 1]; expect(messageCommittedEvent.event.section).toEqual('ethereumOutboundQueue'); expect(messageCommittedEvent.event.method).toEqual('MessagesCommitted'); diff --git a/e2e-tests/polkadotAssetHub.hydration.spec.ts b/e2e-tests/polkadotAssetHub.hydration.spec.ts index 1db56d13..43736f8f 100644 --- a/e2e-tests/polkadotAssetHub.hydration.spec.ts +++ b/e2e-tests/polkadotAssetHub.hydration.spec.ts @@ -55,25 +55,31 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['dot'], ['1000000000000'], { - format: 'payload', - sendersAddr: alice.address, - }); - + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['dot'], + ['1000000000000'], + { + format: 'payload', + sendersAddr: alice.address, + }, + ); + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(1000000); }, 100000); - + test('AssetHub Local Pool Asset Transfer', async () => { await polkadotAssetHub.dev.setStorage({ System: { @@ -86,27 +92,27 @@ describe('Polkadot AssetHub <> Hydration', () => { Account: [[[30, alice.address], { balance: 75000000000000 }]], }, }); - + const aliceBalance = (await polkadotAssetHub.api.query.poolAssets.account(30, alice.address)).unwrapOrDefault(); expect(aliceBalance.balance.toNumber()).toEqual(75000000000000); - + const recipientsInitialPoolAssetBalance = ( await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) ).unwrapOrDefault(); expect(recipientsInitialPoolAssetBalance.balance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', 4); const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['30'], ['10'], { format: 'payload', sendersAddr: alice.address, transferLiquidToken: true, }); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedPoolAssetBalance = ( await polkadotAssetHub.api.query.poolAssets.account(30, recipientAddress) ).unwrapOrDefault(); @@ -114,7 +120,7 @@ describe('Polkadot AssetHub <> Hydration', () => { recipientsInitialPoolAssetBalance.balance.toNumber(), ); }, 100000); - + test('Hydration Local HDX Transfer', async () => { await hydration.dev.setStorage({ System: { @@ -128,10 +134,10 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientInitialHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); expect((recipientInitialHDXBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', 4); const tx = await assetTransferApi.createTransferTransaction( '2034', @@ -143,12 +149,12 @@ describe('Polkadot AssetHub <> Hydration', () => { sendersAddr: alice.address, }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); - + const recipientUpdatedHDXBalance = await hydration.api.query.tokens.accounts(recipientAddress, 0); expect((recipientUpdatedHDXBalance as AccountData).free.toNumber()).toBeGreaterThan( (recipientInitialHDXBalance as AccountData).free.toNumber(), @@ -172,27 +178,33 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['DOT'], + ['1000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); }, 100000); - + test('Transfer DOT From AssetHub to Hydration', async () => { await polkadotAssetHub.dev.setStorage({ System: { @@ -201,28 +213,34 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + ['DOT'], + ['1000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await hydration.dev.newBlock(); - + const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( (recipientsInitialDOTBalance as AccountData).free.toNumber(), ); }, 100000); - + test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { await hydration.dev.setStorage({ System: { @@ -237,7 +255,7 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialWETHBalance = ( (await polkadotAssetHub.api.query.foreignAssets.account( snowbridgeWETHLocation, @@ -245,7 +263,7 @@ describe('Polkadot AssetHub <> Hydration', () => { )) as Option ).unwrapOrDefault(); expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { registryType: 'NPM', injectedRegistry: { @@ -282,24 +300,26 @@ describe('Polkadot AssetHub <> Hydration', () => { sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); - + await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedWETHBalance = ( (await polkadotAssetHub.api.query.foreignAssets.account( snowbridgeWETHLocation, recipientAddress, )) as Option ).unwrapOrDefault(); - - expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(recipientsInitialWETHBalance.balance.toNumber()); + + expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan( + recipientsInitialWETHBalance.balance.toNumber(), + ); }, 100000); - + test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { await polkadotAssetHub.dev.setStorage({ System: { @@ -311,10 +331,13 @@ describe('Polkadot AssetHub <> Hydration', () => { Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], }, }); - - const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + + const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts( + recipientAddress, + 1000189, + ); expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( '2034', @@ -335,13 +358,13 @@ describe('Polkadot AssetHub <> Hydration', () => { remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await hydration.dev.newBlock(); - + const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), @@ -365,27 +388,33 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsInitialDOTBalance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('1000', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); + const tx = await assetTransferApi.createTransferTransaction( + '1000', + recipientAddress, + ['DOT'], + ['1000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedDOTBalance = (await polkadotAssetHub.api.query.system.account(recipientAddress)).data.free; expect(recipientsUpdatedDOTBalance.toNumber()).not.toEqual(0); expect(recipientsUpdatedDOTBalance.toNumber()).toBeGreaterThan(recipientsInitialDOTBalance.toNumber()); }, 100000); - + test('Transfer DOT From AssetHub to Hydration', async () => { await polkadotAssetHub.dev.setStorage({ System: { @@ -394,28 +423,34 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); expect((recipientsInitialDOTBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); - const tx = await assetTransferApi.createTransferTransaction('2034', recipientAddress, ['DOT'], ['1000000000000'], { - format: 'payload', - xcmVersion, - sendersAddr: alice.address, - }); + const tx = await assetTransferApi.createTransferTransaction( + '2034', + recipientAddress, + ['DOT'], + ['1000000000000'], + { + format: 'payload', + xcmVersion, + sendersAddr: alice.address, + }, + ); const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await hydration.dev.newBlock(); - + const recipientsUpdatedDOTBalance = await hydration.api.query.tokens.accounts(recipientAddress, 5); expect((recipientsUpdatedDOTBalance as AccountData).free.toNumber()).toBeGreaterThan( (recipientsInitialDOTBalance as AccountData).free.toNumber(), ); }, 100000); - + test('Transfer SnowBridge WETH From Hydration To AssetHub', async () => { await hydration.dev.setStorage({ System: { @@ -430,7 +465,7 @@ describe('Polkadot AssetHub <> Hydration', () => { ], }, }); - + const recipientsInitialWETHBalance = ( (await polkadotAssetHub.api.query.foreignAssets.account( snowbridgeWETHLocation, @@ -438,7 +473,7 @@ describe('Polkadot AssetHub <> Hydration', () => { )) as Option ).unwrapOrDefault(); expect(recipientsInitialWETHBalance.balance.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(hydration.api, 'hydradx', xcmVersion, { registryType: 'NPM', injectedRegistry: { @@ -475,24 +510,26 @@ describe('Polkadot AssetHub <> Hydration', () => { sendersAddr: '7NPoMQbiA6trJKkjB35uk96MeJD4PGWkLQLH7k7hXEkZpiba', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await hydration.api.tx(extrinsic).signAndSend(alice); await hydration.dev.newBlock(); - + await polkadotAssetHub.dev.newBlock(); - + const recipientsUpdatedWETHBalance = ( (await polkadotAssetHub.api.query.foreignAssets.account( snowbridgeWETHLocation, recipientAddress, )) as Option ).unwrapOrDefault(); - - expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan(recipientsInitialWETHBalance.balance.toNumber()); + + expect(recipientsUpdatedWETHBalance.balance.toNumber()).toBeGreaterThan( + recipientsInitialWETHBalance.balance.toNumber(), + ); }, 100000); - + test('Transfer SnowBridge WETH From AssetHub To Hydration', async () => { await polkadotAssetHub.dev.setStorage({ System: { @@ -504,10 +541,13 @@ describe('Polkadot AssetHub <> Hydration', () => { Account: [[[snowbridgeWETHLocation, alice.address], { balance: 75000000000000 }]], }, }); - - const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); + + const recipientsInitialHydrationWETHBalance = await hydration.api.query.tokens.accounts( + recipientAddress, + 1000189, + ); expect((recipientsInitialHydrationWETHBalance as AccountData).free.toNumber()).toEqual(0); - + const assetTransferApi = new AssetTransferApi(polkadotAssetHub.api, 'asset-hub-polkadot', xcmVersion); const tx = await assetTransferApi.createTransferTransaction( '2034', @@ -528,13 +568,13 @@ describe('Polkadot AssetHub <> Hydration', () => { remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); - + const extrinsic = assetTransferApi.api.registry.createType('Extrinsic', { method: tx.tx.method }, { version: 4 }); - + await polkadotAssetHub.api.tx(extrinsic).signAndSend(alice); await polkadotAssetHub.dev.newBlock(); await hydration.dev.newBlock(); - + const recipientsUpdatedWETHBalance = await hydration.api.query.tokens.accounts(recipientAddress, 1000189); expect((recipientsUpdatedWETHBalance as AccountData).free.toNumber()).toBeGreaterThan( (recipientsInitialHydrationWETHBalance as AccountData).free.toNumber(), diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index d8e4725a..a5778124 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -59,13 +59,15 @@ describe('checkParaToEthereum', () => { const ethereumAccountAddress = '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B'; const substrateAccountAddress = '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX'; - it ('Should correctly throw an error when destAddress is not an ethereum address', () => { - const err = () => checkParaToEthereum(substrateAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); + it('Should correctly throw an error when destAddress is not an ethereum address', () => { + const err = () => + checkParaToEthereum(substrateAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); expect(err).toThrow('destAddress must be a valid ethereum address for ParaToEthereum XCM direction'); }); it('Should correctly throw an error when paysWithFeeDest is not provided', () => { - const err = () => checkParaToEthereum(ethereumAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); + const err = () => + checkParaToEthereum(ethereumAccountAddress, '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', undefined); expect(err).toThrow('paysWithFeeDest option must be provided for ParaToEthereum XCM direction'); }); diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 793ad7e0..c3e38d6f 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -1108,7 +1108,8 @@ export const checkAssetIdInput = async ( * @param registry */ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: CheckXcmTxInputsOpts) => { - const { api, direction, assetIds, amounts, destChainId, xcmVersion, specName, registry, xcmPallet, destAddr } = baseArgs; + const { api, direction, assetIds, amounts, destChainId, xcmVersion, specName, registry, xcmPallet, destAddr } = + baseArgs; const { paysWithFeeDest, isForeignAssetsTransfer, From 8bbcaa22270e0586def912daeaab0697558e70ba Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 15:21:03 -0500 Subject: [PATCH 10/13] update example --- examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts index aaa56d2c..0c831417 100644 --- a/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts +++ b/examples/polkadot/parachain/hydrationToEthereumMainnetWETH.ts @@ -41,7 +41,7 @@ const main = async () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"1"}}}}}`, '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', ['DOT', 'WETH.snow'], - ['500000000000', '75000000000000'], + ['70000000000', '75000000000000'], { sendersAddr: '7KqMfyEXGMAgkNGxiTf3PNgKqSH1WNghbAGLKezYyLLW4Zp1', format: 'call', From 52e6347a9abc85e4c4d9c2aee380f4bb334db1d7 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 15:50:05 -0500 Subject: [PATCH 11/13] update integration tests --- .../parachains/bifrost.spec.ts | 130 ------------------ 1 file changed, 130 deletions(-) diff --git a/src/integrationTests/parachains/bifrost.spec.ts b/src/integrationTests/parachains/bifrost.spec.ts index 6702feba..3fa4c816 100644 --- a/src/integrationTests/parachains/bifrost.spec.ts +++ b/src/integrationTests/parachains/bifrost.spec.ts @@ -16,53 +16,6 @@ const bifrostATA = new AssetTransferApi(adjustedMockBifrostParachainApi, 'bifros describe('Bifrost', () => { describe('ParaToPara', () => { describe('transferAssets', () => { - describe('XCM V2', () => { - it('Should correctly construct a transferAssets call from Bifrost to Moonriver', async () => { - const tests: TestMultiassetWithFormat[] = [ - [ - '2023', - 'vKSM', - 'call', - '0x290b010101009d1f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010400025a62020000000000', - ], - [ - '2023', - 'vBNC', - 'payload', - '0x0d01290b010101009d1f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], - ]; - - for (const test of tests) { - const [destChainId, assetId, format, expectedResult] = test; - const res = await bifrostTransferAssets( - bifrostATA, - format as Format, - 2, - destChainId, - [assetId], - ['10000000'], - { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }, - ); - - if (format === 'call') { - expect(res.tx).toEqual(expectedResult); - } else { - expect((res.tx as GenericExtrinsicPayload).toHex()).toEqual(expectedResult); - } - } - }); - it('Should correctly build a V2 transferAssets submittable', async () => { - const res = await bifrostTransferAssets(bifrostATA, 'submittable', 2, '2023', ['vKSM'], ['10000000'], { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); - }); describe('XCM V3', () => { it('Should correctly construct a transferAssets call from Bifrost to Moonriver', async () => { const tests: TestMultiassetWithFormat[] = [ @@ -141,31 +94,16 @@ describe('Bifrost', () => { 'bnc', '0xe8460101000000000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vbnc', - '0x050146010100010200451f06080101000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2023', 'movr', '0xfc460101000102009d1f040a000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vmovr', - '0x050146010100010200451f0608010a000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2023', 'ksm', '0xe8460101000100000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vksm', - '0x050146010100010200451f06080104000700e40b5402010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2092', 'kint', @@ -249,12 +187,6 @@ describe('Bifrost', () => { describe('XCM V2', () => { it('Should correctly build xTokens transferMultiassets txs from Bifrost Kusama', async () => { const tests: TestMultiassets[] = [ - [ - '2023', - ['vmovr', 'movr'], - ['10000000000', '10000000000'], - '0x55014605010800010200451f0608010a000700e40b5402000102009d1f040a000700e40b540200000000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2092', ['kint', 'kbtc'], @@ -334,31 +266,16 @@ describe('Bifrost', () => { 'bnc', '0x2101460301000000000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vbnc', - '0x3d0146030100010200451f06080101000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2023', 'movr', '0x3501460301000102009d1f040a000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vmovr', - '0x3d0146030100010200451f0608010a000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2023', 'ksm', '0x2101460301000100000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', ], - [ - '2023', - 'vksm', - '0x3d0146030100010200451f06080104000700e40b54020100010300a10f043205011f0000010102009d1f0100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f4502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], [ '2092', 'kint', @@ -652,53 +569,6 @@ describe('Bifrost', () => { }); }); describe('transferAssets', () => { - describe('XCM V2', () => { - it('Should correctly construct a transferAssets call from Bifrost to AssetHub', async () => { - const tests: TestMultiassetWithFormat[] = [ - [ - '1000', - 'vKSM', - 'call', - '0x290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010400025a62020000000000', - ], - [ - '1000', - 'vBNC', - 'payload', - '0x0d01290b01010100a10f0100010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b010400010200451f0608010100025a620200000000004502280000fe080000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d450300', - ], - ]; - - for (const test of tests) { - const [destChainId, assetId, format, expectedResult] = test; - const res = await bifrostTransferAssets( - bifrostATA, - format as Format, - 2, - destChainId, - [assetId], - ['10000000'], - { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }, - ); - - if (format === 'call') { - expect(res.tx).toEqual(expectedResult); - } else { - expect((res.tx as GenericExtrinsicPayload).toHex()).toEqual(expectedResult); - } - } - }); - it('Should correctly build a V2 transferAssets submittable', async () => { - const res = await bifrostTransferAssets(bifrostATA, 'submittable', 2, '1000', ['vKSM'], ['10000000'], { - isForeignAssetsTransfer: false, - isLiquidTokenTransfer: false, - }); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); - }); describe('XCM V3', () => { it('Should correctly construct a transferAssets call from Bifrost to AssetHub', async () => { const tests: TestMultiassetWithFormat[] = [ From 23b4a5ac33d9960b5ced1d16ec100c5003b0c2e1 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 17:14:45 -0500 Subject: [PATCH 12/13] update para to eth e2e tests --- e2e-tests/hydration.ethereum.spec.ts | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/e2e-tests/hydration.ethereum.spec.ts b/e2e-tests/hydration.ethereum.spec.ts index a4d2a041..f7a7543d 100644 --- a/e2e-tests/hydration.ethereum.spec.ts +++ b/e2e-tests/hydration.ethereum.spec.ts @@ -108,15 +108,11 @@ describe('Hydration <> Ethereum', () => { await polkadotAssetHub.dev.newBlock(); const assetHubEvents = await polkadotAssetHub.api.query.system.events(); - const foreignAssetsBurnedEvent = assetHubEvents[4]; - expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); - expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); - expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); - const xcmMessageSentEvent = assetHubEvents[6]; - expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); - expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); - expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); + const xcmMessageProcessed = assetHubEvents[assetHubEvents.length - 1]; + expect(xcmMessageProcessed.phase.toString()).toEqual('Finalization'); + expect(xcmMessageProcessed.event.method).toEqual('Processed'); + expect(xcmMessageProcessed.event.section).toEqual('messageQueue'); await setTimeout(5000); await polkadotBridgeHub.dev.timeTravel(1); @@ -196,15 +192,11 @@ describe('Hydration <> Ethereum', () => { await polkadotAssetHub.dev.newBlock(); const assetHubEvents = await polkadotAssetHub.api.query.system.events(); - const foreignAssetsBurnedEvent = assetHubEvents[4]; - expect(foreignAssetsBurnedEvent.phase.toString()).toEqual('Finalization'); - expect(foreignAssetsBurnedEvent.event.section).toEqual('foreignAssets'); - expect(foreignAssetsBurnedEvent.event.method).toEqual('Burned'); - - const xcmMessageSentEvent = assetHubEvents[6]; - expect(xcmMessageSentEvent.phase.toString()).toEqual('Finalization'); - expect(xcmMessageSentEvent.event.method).toEqual('XcmpMessageSent'); - expect(xcmMessageSentEvent.event.section).toEqual('xcmpQueue'); + + const xcmMessageProcessed = assetHubEvents[assetHubEvents.length - 1]; + expect(xcmMessageProcessed.phase.toString()).toEqual('Finalization'); + expect(xcmMessageProcessed.event.method).toEqual('Processed'); + expect(xcmMessageProcessed.event.section).toEqual('messageQueue'); await setTimeout(5000); await polkadotBridgeHub.dev.timeTravel(1); From a71830ff43cfee636a8f89de927733681a41ee35 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 17 Dec 2024 17:47:12 -0500 Subject: [PATCH 13/13] increase timeout --- e2e-tests/hydration.ethereum.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-tests/hydration.ethereum.spec.ts b/e2e-tests/hydration.ethereum.spec.ts index f7a7543d..a1d79709 100644 --- a/e2e-tests/hydration.ethereum.spec.ts +++ b/e2e-tests/hydration.ethereum.spec.ts @@ -35,13 +35,13 @@ describe('Hydration <> Ethereum', () => { hydration = hydration1; polkadotBridgeHub = polkadotBridgeHub1; polkadotAssetHub = polkadotAssetHub1; - }, 500000); + }, 1000000); afterEach(async () => { await hydration.teardown(); await polkadotAssetHub.teardown(); await polkadotBridgeHub.teardown(); - }, 500000); + }, 1000000); describe('XCM V3', () => { const xcmVersion = 3;