From c200fb673465b8cebcc9ca34592c8ee6c0cbcb3b Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 7 Mar 2024 09:18:22 -0500 Subject: [PATCH 01/44] test bridge tx interface --- src/index.ts | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/index.ts b/src/index.ts index 406c8285..e3a08b7b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,60 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; + +import { ApiPromise, WsProvider } from '@polkadot/api'; + +import { AssetTransferApi } from './AssetTransferApi'; + +const main = async () => { + // const specName = 'bridge-hub-kusama'; + // const specname = 'statemine'; + // const provider = new WsProvider(`wss://kusama-asset-hub-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://statemine-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://kusama.api.encointer.org`); + // const provider = new WsProvider(`wss://westend-asset-hub-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://wss.api.moonbeam.network`); + // const provider = new WsProvider(`wss://sys.ibp.network/collectives-westend`); + // 'wss://moonriver.api.onfinality.io/public-ws' + const provider = new WsProvider( + 'wss://rococo-asset-hub-rpc.polkadot.io', + // `wss://westend-rpc.polkadot.io`, + // `wss://moonriver.api.onfinality.io/public-ws` + // `wss://bifrost-rpc.liebi.com/ws` + // `wss://rpc.shiden.astar.network` + ); + + const api = await ApiPromise.create({ provider }); + + await api.isReady; + + const assetTransferApi = new AssetTransferApi(api, 'rococo', 4); + + const payload = await assetTransferApi.createTransferTransaction( + 'sepolia', + '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', + ['weth'], + ['1000000000000000000'], + { + format: 'payload', + xcmVersion: 4, + isLimited: true, + sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', + }, + ); + + console.log('payload', JSON.stringify(payload)); + + const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); + console.log('decodedPayload', decodedPayload); + + const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { + version: 4, + }); + + console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); + const payloadJSON = payloadExtrinsic.method.toJSON(); + console.log('payload json', payloadJSON); +}; + +main(); From 66d5ca8b199adb43a992fc95a1aeae8ec57c2952 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 14 Mar 2024 16:02:47 -0400 Subject: [PATCH 02/44] add system to bridge direction add unit tests add util functions for determining direction based on asset and dest locations --- .../assetHubSnowbridgeETHToBridgeHub.ts | 53 ++++ ...etHubSnowbridgeETHForeignAssetsTransfer.ts | 49 +++ .../local/assetHubSnowbridgeETHToContracts.ts | 52 ++++ .../reserve/assetHubSnowbridgeETHToKhala.ts | 50 +++ src/AssetTransferApi.spec.ts | 7 + src/AssetTransferApi.ts | 38 ++- src/constructApiPromise.ts | 6 + src/consts.ts | 6 + src/createCalls/foreignAssets/transfer.ts | 1 + .../polkadotXcm/transferAssets.ts | 2 +- src/createXcmTypes/SystemToBridge.spec.ts | 207 +++++++++++++ src/createXcmTypes/SystemToBridge.ts | 285 ++++++++++++++++++ src/createXcmTypes/SystemToPara.spec.ts | 2 +- src/createXcmTypes/index.ts | 4 +- src/createXcmTypes/types.ts | 21 +- .../util/assetDestIsBridge.spec.ts | 26 ++ src/createXcmTypes/util/assetDestIsBridge.ts | 14 + .../util/chainDestIsBridge.spec.ts | 20 ++ src/createXcmTypes/util/chainDestIsBridge.ts | 10 + .../foreignAssetsMultiLocationExists.spec.ts | 12 +- .../util/foreignAssetsMultiLocationExists.ts | 13 +- src/createXcmTypes/util/getAssetId.ts | 8 +- ...obalConsensusDestFromAssetLocation.spec.ts | 62 ++++ ...getGlobalConsensusDestFromAssetLocation.ts | 38 +++ .../util/getGlobalConsensusSystemName.spec.ts | 34 +++ .../util/getGlobalConsensusSystemName.ts | 17 ++ src/createXcmTypes/util/isParachain.ts | 9 +- src/createXcmTypes/util/isSystemChain.ts | 9 +- src/errors/BaseError.ts | 4 + .../checkLocalTxInput/checkLocalTxInput.ts | 2 +- src/errors/checkXcmTxInputs.spec.ts | 2 +- src/errors/checkXcmTxInputs.ts | 31 +- src/index.ts | 113 +++---- src/registry/Registry.ts | 12 +- src/registry/findRelayChain.spec.ts | 5 + src/registry/findRelayChain.ts | 17 +- .../adjustedMockSystemApiV1007000.ts | 16 +- src/types.ts | 9 + src/util/resolveMultiLocation.spec.ts | 6 - src/util/resolveMultiLocation.ts | 18 +- 40 files changed, 1167 insertions(+), 123 deletions(-) create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts create mode 100644 src/createXcmTypes/SystemToBridge.spec.ts create mode 100644 src/createXcmTypes/SystemToBridge.ts create mode 100644 src/createXcmTypes/util/assetDestIsBridge.spec.ts create mode 100644 src/createXcmTypes/util/assetDestIsBridge.ts create mode 100644 src/createXcmTypes/util/chainDestIsBridge.spec.ts create mode 100644 src/createXcmTypes/util/chainDestIsBridge.ts create mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts create mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts create mode 100644 src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts create mode 100644 src/createXcmTypes/util/getGlobalConsensusSystemName.ts diff --git a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts new file mode 100644 index 00000000..c8497ea3 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts @@ -0,0 +1,53 @@ +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Rococo Bridge Hub (System ParaChain) account, where the `xcmVersion` is set to 4, the `isLimited` option is set to true and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * + * NOTE: When `isLimited` is true it will use the `limited` version of either `reserveTransferAssets`, or `teleportAssets`. + */ +const main = async () => { + const { api, specName, chainName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + console.log('SPECNAME', specName); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { + chainName, + }); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, + '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + ], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + isLimited: true, + }, + ); + + 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/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts new file mode 100644 index 00000000..2fb8fa21 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts @@ -0,0 +1,49 @@ +/** + * 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 `foreignAssets` pallet `transfer` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, +`) + * from a Rococo Asset Hub (System Parachain) account + * to a Rococo Asset Hub (System Parachain) account. + * + * NOTE: When `isLimited` is true it will use the `limited` version of the either `reserveAssetTransfer`, or `teleportAssets`. + */ +const main = async () => { + const { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + '1000', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + ], + ['1000000000000'], + { + format: 'call', + xcmVersion: 3, + }, + ); + + 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/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts new file mode 100644 index 00000000..c9d1c146 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts @@ -0,0 +1,52 @@ +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Rococo Contracts (System ParaChain) account, where the `xcmVersion` is set to 4, the `isLimited` option is set to true and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * + * NOTE: When `isLimited` is true it will use the `limited` version of either `reserveTransferAssets`, or `teleportAssets`. + */ +const main = async () => { + const { api, specName, chainName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { + chainName + }); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + '1002', + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + ], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + isLimited: true, + }, + ); + + 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/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts new file mode 100644 index 00000000..85e29d44 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts @@ -0,0 +1,50 @@ +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send ETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, the `isLimited` option is set to true and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * + * NOTE: When `isLimited` is true it will use the `limited` version of either `reserveTransferAssets`, or `teleportAssets`. + */ +const main = async () => { + const { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + '2004', + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + ], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + isLimited: true, + }, + ); + + 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/src/AssetTransferApi.spec.ts b/src/AssetTransferApi.spec.ts index 8e33b6c7..87a2a672 100644 --- a/src/AssetTransferApi.spec.ts +++ b/src/AssetTransferApi.spec.ts @@ -64,6 +64,7 @@ describe('AssetTransferAPI', () => { isDestParachain: false, isOriginSystemParachain: true, isOriginParachain: false, + isDestBridge: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToSystem'); @@ -75,6 +76,7 @@ describe('AssetTransferAPI', () => { isDestParachain: true, isOriginSystemParachain: true, isOriginParachain: false, + isDestBridge: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToPara'); @@ -86,6 +88,7 @@ describe('AssetTransferAPI', () => { isDestParachain: false, isOriginSystemParachain: true, isOriginParachain: false, + isDestBridge: false, }; const res = systemAssetsApi['establishDirection'](false, info); expect(res).toEqual('SystemToRelay'); @@ -97,6 +100,7 @@ describe('AssetTransferAPI', () => { isDestParachain: true, isOriginSystemParachain: false, isOriginParachain: false, + isDestBridge: false, }; const res = relayAssetsApi['establishDirection'](false, info); expect(res).toEqual('RelayToPara'); @@ -108,6 +112,7 @@ describe('AssetTransferAPI', () => { isDestParachain: false, isOriginSystemParachain: false, isOriginParachain: false, + isDestBridge: false, }; const res = relayAssetsApi['establishDirection'](false, info); expect(res).toEqual('RelayToSystem'); @@ -119,6 +124,7 @@ describe('AssetTransferAPI', () => { isDestParachain: false, isOriginSystemParachain: false, isOriginParachain: true, + isDestBridge: false, }; const res = moonriverAssetsApi['establishDirection'](false, info); expect(res).toEqual('ParaToSystem'); @@ -130,6 +136,7 @@ describe('AssetTransferAPI', () => { isDestParachain: true, isOriginSystemParachain: false, isOriginParachain: true, + isDestBridge: false, }; const res = moonriverAssetsApi['establishDirection'](false, info); expect(res).toEqual('ParaToPara'); diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 16bc5206..30e16716 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -34,6 +34,7 @@ import { getAssetId } from './createXcmTypes/util/getAssetId'; import { isParachain } from './createXcmTypes/util/isParachain'; import { isParachainPrimaryNativeAsset } from './createXcmTypes/util/isParachainPrimaryNativeAsset'; import { isSystemChain } from './createXcmTypes/util/isSystemChain'; +import { assetDestIsBridge } from './createXcmTypes/util/assetDestIsBridge'; import { multiLocationAssetIsParachainsNativeAsset } from './createXcmTypes/util/multiLocationAssetIsParachainsNativeAsset'; import { BaseError, @@ -76,9 +77,11 @@ import { } from './types'; import { callExistsInRuntime } from './util/callExistsInRuntime'; import { deepEqual } from './util/deepEqual'; -import { resolveMultiLocation } from './util/resolveMultiLocation'; +// import { resolveMultiLocation } from './util/resolveMultiLocation'; import { sanitizeKeys } from './util/sanitizeKeys'; import { validateNumber } from './validate'; +import { chainDestIsBridge } from './createXcmTypes/util/chainDestIsBridge'; +import { getGlobalConsensusSystemName } from './createXcmTypes/util/getGlobalConsensusSystemName'; /** * Holds open an api connection to a specified chain within the ApiPromise in order to help @@ -203,6 +206,7 @@ export class AssetTransferApi { isDestRelayChain: destChainId === RELAY_CHAIN_IDS[0], isDestSystemParachain: isSystemChain(destChainId), isDestParachain: isParachain(destChainId), + isDestBridge: assetDestIsBridge(assetIds), // check the asset is going to another consensus system }; /** @@ -422,7 +426,7 @@ export class AssetTransferApi { if (isLocal) return Direction.Local; const { api } = this; - const { isDestParachain, isDestRelayChain, isDestSystemParachain, isOriginParachain, isOriginSystemParachain } = + const { isDestParachain, isDestRelayChain, isDestSystemParachain, isOriginParachain, isOriginSystemParachain, isDestBridge } = chainOriginDestInfo; /** @@ -440,6 +444,10 @@ export class AssetTransferApi { return Direction.SystemToPara; } + if (isOriginSystemParachain && isDestBridge) { + return Direction.SystemToBridge; + } + /** * Check if the origin is a Relay Chain */ @@ -486,7 +494,7 @@ export class AssetTransferApi { method: Methods, dest: string, origin: string, - opts: { format?: T; paysWithFeeOrigin?: string; sendersAddr?: string }, + opts: { format?: T; paysWithFeeOrigin?: string; sendersAddr?: string}, ): Promise> { const { format, paysWithFeeOrigin, sendersAddr } = opts; const fmt = format ? format : 'payload'; @@ -758,7 +766,13 @@ export class AssetTransferApi { return registry.relayChain; } + if (chainDestIsBridge(destId)) { + return getGlobalConsensusSystemName(destId); + } + const lookup = registry.lookupParachainInfo(destId); + console.log('LOOKUP VALUE', lookup); + console.log('WHAT IS THE RELAY CHAIN', registry.relayChain); if (lookup.length === 0) { throw new BaseError( `Could not find any parachain information given the destId: ${destId}`, @@ -770,7 +784,7 @@ export class AssetTransferApi { } /** - * Returns if assetIds contains a values for a foreign asset transfer + * Returns if assetIds are a part of a foreign asset transfer * * @param assetIds string[] * @returns boolean @@ -864,6 +878,7 @@ export class AssetTransferApi { localTxChainType: LocalTxChainType, opts: LocalTxOpts, ) { + console.log("IM HERE", localTxChainType); const { api, specName } = this; let assetId = assetIds[0]; const amount = amounts[0]; @@ -873,6 +888,10 @@ export class AssetTransferApi { isNativeRelayChainAsset = true; } + console.log('XCM DIRECTION', xcmDirection); + console.log('NOT IS VALID NUMBER', !isValidNumber); + console.log('NOT IS RELAY CHAIN NATIVE ASSET', !isNativeRelayChainAsset); + if (xcmDirection === Direction.SystemToSystem && !isValidNumber && !isNativeRelayChainAsset) { // for SystemToSystem, assetId is not the native relayChains asset and is not a number // check for the general index of the assetId and assign the correct value for the local tx @@ -885,6 +904,8 @@ export class AssetTransferApi { declaredXcmVersion, opts.isForeignAssetsTransfer, ); + + console.log('ASSET ID IS', assetId); } const method = opts.keepAlive ? 'transferKeepAlive' : 'transfer'; @@ -899,6 +920,7 @@ export class AssetTransferApi { opts.isForeignAssetsTransfer, opts.isLiquidTokenTransfer, ); // Throws an error when any of the inputs are incorrect. + console.log('WHAT IS LOCAL ASSET TYPE', localAssetType); let tx: SubmittableExtrinsic<'promise', ISubmittableResult> | undefined; let palletMethod: LocalTransferTypes | undefined; @@ -921,11 +943,13 @@ export class AssetTransferApi { : poolAssets.transfer(api, addr, assetId, amount); palletMethod = `poolAssets::${method}`; } else if (localAssetType === LocalTxType.ForeignAssets) { - const multiLocation = resolveMultiLocation(assetId, declaredXcmVersion); + console.log('MULTILOCATION', assetId); + const location = JSON.parse(assetId) as UnionXcmMultiLocation; + console.log('RESOLVED', JSON.stringify(location)); tx = method === 'transferKeepAlive' - ? foreignAssets.transferKeepAlive(api, addr, multiLocation, amount) - : foreignAssets.transfer(api, addr, multiLocation, amount); + ? foreignAssets.transferKeepAlive(api, addr, location, amount) + : foreignAssets.transfer(api, addr, location, amount); palletMethod = `foreignAssets::${method}`; } else { throw new BaseError( diff --git a/src/constructApiPromise.ts b/src/constructApiPromise.ts index 5840f606..c6b33088 100644 --- a/src/constructApiPromise.ts +++ b/src/constructApiPromise.ts @@ -18,6 +18,10 @@ export interface ApiInfo { * SpecName of the chain which the api is connected to. */ specName: string; + /** + * Chain name of the chain which the api is connected to. + */ + chainName: string; /** * SafeXcmVersion for the chain which the api is connected too. */ @@ -45,11 +49,13 @@ export const constructApiPromise = async (wsUrl: string, opts: ApiOptions = {}): await api.isReady; const { specName } = await api.rpc.state.getRuntimeVersion(); + const chainName = await api.rpc.system.chain(); const safeXcmVersion = await fetchSafeXcmVersion(api); return { api, specName: specName.toString(), + chainName: chainName.toString(), safeXcmVersion: safeXcmVersion, }; }; diff --git a/src/consts.ts b/src/consts.ts index 0084bdc0..78f76ace 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -37,6 +37,7 @@ export const POLKADOT_ASSET_HUB_SPEC_NAMES = ['statemint', 'asset-hub-polkadot'] export const KUSAMA_ASSET_HUB_SPEC_NAMES = ['statemine', 'asset-hub-kusama']; export const WESTEND_ASSET_HUB_SPEC_NAMES = ['westmint', 'asset-hub-westend']; export const ROCOCO_ASSET_HUB_SPEC_NAME = ['asset-hub-rococo']; +export const ETHEREUM_CHAIN_NAMES = ['sepolia', 'ethereum']; /** * The default xcm version to construct a xcm message. @@ -71,3 +72,8 @@ export const CDN_URL = 'https://paritytech.github.io/asset-transfer-api-registry * May result in either: `node` or `browser`. */ export const JS_ENV = detectJsEnv(); + +/** + * Supported consensus system chain names + */ +export const KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES = ['polkadot', 'kusama', 'westend', 'rococo', 'ethereum']; \ No newline at end of file diff --git a/src/createCalls/foreignAssets/transfer.ts b/src/createCalls/foreignAssets/transfer.ts index 01e880c0..a529c2c2 100644 --- a/src/createCalls/foreignAssets/transfer.ts +++ b/src/createCalls/foreignAssets/transfer.ts @@ -12,5 +12,6 @@ export const transfer = ( assetId: UnionXcmMultiLocation, amount: string, ): SubmittableExtrinsic<'promise', ISubmittableResult> => { + console.log('TRANSFER ASSET ID', JSON.stringify(assetId)); return api.tx.foreignAssets.transfer(assetId, destAddr, amount); }; diff --git a/src/createXcmCalls/polkadotXcm/transferAssets.ts b/src/createXcmCalls/polkadotXcm/transferAssets.ts index c7faceca..b3141dfc 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssets.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssets.ts @@ -25,7 +25,7 @@ export const transferAssets = async ( const ext = api.tx[pallet].transferAssets; const typeCreator = createXcmTypes[direction]; const beneficiary = typeCreator.createBeneficiary(destAddr, xcmVersion); - const dest = typeCreator.createDest(destChainId, xcmVersion); + const dest = typeCreator.createDest(destChainId, xcmVersion, assetIds); const assets = await typeCreator.createAssets(normalizeArrToStr(amounts), xcmVersion, specName, assetIds, { registry, isForeignAssetsTransfer, diff --git a/src/createXcmTypes/SystemToBridge.spec.ts b/src/createXcmTypes/SystemToBridge.spec.ts new file mode 100644 index 00000000..cf7353b8 --- /dev/null +++ b/src/createXcmTypes/SystemToBridge.spec.ts @@ -0,0 +1,207 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { Registry } from '../registry'; +import { adjustedMockSystemApiV1007000 } from '../testHelpers/adjustedMockSystemApiV1007000'; +import { SystemToBridge } from './SystemToBridge'; + +describe('SystemToBridge', () => { + const registry = new Registry('asset-hub-rococo', {}); + const isForeignAssetsTransfer = true; + const isLiquidTokenTransfer = false; + describe('Beneficiary', () => { + it('Should work for V3', () => { + const beneficiary = SystemToBridge.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 3, + ); + + const expectedRes = { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V3 for an Ethereum Address', () => { + const beneficiary = SystemToBridge.createBeneficiary('0x96Bd611EbE3Af39544104e26764F4939924F6Ece', 3); + + const expectedRes = { + V3: { + parents: 0, + interior: { + X1: { + AccountKey20: { + key: '0x96Bd611EbE3Af39544104e26764F4939924F6Ece', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const beneficiary = SystemToBridge.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 4, + ); + + const expectedRes = { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + ], + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V4 for an Ethereum Address', () => { + const beneficiary = SystemToBridge.createBeneficiary('0x96Bd611EbE3Af39544104e26764F4939924F6Ece', 4); + + const expectedRes = { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountKey20: { + key: '0x96Bd611EbE3Af39544104e26764F4939924F6Ece', + }, + }, + ], + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + }); + describe('Destination', () => { + it('Should work for V3', () => { + const assetIds = [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`]; + const destination = SystemToBridge.createDest('100', 3, assetIds); + + const expectedRes = { + V3: { + parents: 1, + interior: { + X1: { + GlobalConsensus: { + Ethereum: { + chainId: '11155111' + } + }, + }, + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const assetIds = [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`]; + + const destination = SystemToBridge.createDest('100', 4, assetIds); + + const expectedRes = { + V4: { + parents: 1, + interior: { + X1: [ + { + GlobalConsensus: 'Kusama', + }, + ], + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + }); + describe('Assets', () => { + it('Should work for V3', async () => { + const assets = await SystemToBridge.createAssets(['10000000000'], 3, 'asset-hub-westend', [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1007000, + }); + + const expectedRes = { + V3: [ + { + id: { + Concrete: { + Parents: '2', + Interior: { + X1: { GlobalConsensus: 'Rococo' }, + }, + }, + }, + fun: { + Fungible: '10000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + it('Should work for V4', async () => { + const assets = await SystemToBridge.createAssets(['10000000000'], 4, 'asset-hub-westend', [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1007000, + }); + + const expectedRes = { + V4: [ + { + id: { + Parents: '2', + Interior: { + X2: [ + { + GlobalConsensus: { + Ethereum: { + Chainid: '11155111', + } + } + }, + { + AccountKey20: { + Network: null, + Key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14' + } + }], + }, + }, + fun: { + Fungible: '10000000000', + }, + }, + ] + }; + + expect(assets).toStrictEqual(expectedRes); + }); + }); +}); \ No newline at end of file diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts new file mode 100644 index 00000000..81bb0681 --- /dev/null +++ b/src/createXcmTypes/SystemToBridge.ts @@ -0,0 +1,285 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import type { ApiPromise } from '@polkadot/api'; + +import { BaseError, BaseErrorsEnum } from '../errors'; +// import type { Registry } from '../registry'; +import { getFeeAssetItemIndex } from '../util/getFeeAssetItemIndex'; +import { normalizeArrToStr } from '../util/normalizeArrToStr'; +import { resolveMultiLocation } from '../util/resolveMultiLocation'; +// import { validateNumber } from '../validate'; +import { + CreateAssetsOpts, + CreateFeeAssetItemOpts, + CreateWeightLimitOpts, + FungibleStrAsset, + FungibleStrAssetType, + FungibleStrMultiAsset, + ICreateXcmType, + UnionXcmMultiAssets, + // UnionXcmMultiLocation, + XcmDestBeneficiary, + XcmV4JunctionDestBeneficiary, + XcmWeight, +} from './types'; +import { dedupeAssets } from './util/dedupeAssets'; +// import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; +// import { getAssetId } from './util/getAssetId'; +// import { isRelayNativeAsset } from './util/isRelayNativeAsset'; +import { isSystemChain } from './util/isSystemChain'; +import { sortAssetsAscending } from './util/sortAssetsAscending'; +import { isEthereumAddress } from '@polkadot/util-crypto'; +// import { assetDestIsBridge } from './util/assetDestIsBridge'; +import { getGlobalConsensusDestFromAssetLocation } from './util/getGlobalConsensusDestFromAssetLocation'; + +export const SystemToBridge: ICreateXcmType = { + /** + * Create a XcmVersionedMultiLocation structured 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 === 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 structured type for a destination. + * + * @param destId The chainId of the destination. + * @param xcmVersion The accepted xcm version. + */ + createDest: (_: string, xcmVersion: number, assetIds?: string[]): XcmDestBeneficiary => { + if (!assetIds) { + throw new BaseError(`assetId arg must provided for Bridge transactions`); + } + + const destination = getGlobalConsensusDestFromAssetLocation(assetIds[0], xcmVersion); + + 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: 2, + interior: { + X1: destination, + }, + }, + }; + } + + const X1 = [destination as XcmV4JunctionDestBeneficiary]; + + return { + V4: { + parents: 2, + interior: { + X1, + }, + }, + }; + }, + /** + * 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, isForeignAssetsTransfer, isLiquidTokenTransfer, api } = opts; + + const sortedAndDedupedMultiAssets = await createSystemToBridgeAssets( + // api, + amounts, + // specName, + assets, + // registry, + xcmVersion, + // isForeignAssetsTransfer, + // isLiquidTokenTransfer, + ); + + 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.isLimited && 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, + // isLiquidTokenTransfer, + } = opts; + if (xcmVersion && xcmVersion === 3 && specName && amounts && assetIds && paysWithFeeDest) { + const multiAssets = await createSystemToBridgeAssets( + // api, + normalizeArrToStr(amounts), + // specName, + assetIds, + // registry, + xcmVersion, + // isForeignAssetsTransfer, + // isLiquidTokenTransfer, + ); + + const systemChainId = registry.lookupChainIdBySpecName(specName); + + if (!isSystemChain(systemChainId)) { + throw new BaseError( + `specName ${specName} did not match a valid system chain ID. Found ID ${systemChainId}`, + BaseErrorsEnum.InternalError, + ); + } + + const assetIndex = getFeeAssetItemIndex( + api, + registry, + paysWithFeeDest, + multiAssets, + specName, + xcmVersion, + opts.isForeignAssetsTransfer, + ); + + return assetIndex; + } + + return 0; + }, +}; + +/** + * Create multiassets for SystemToBridge 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. + * @param isLiquidTokenTransfer Whether this transfer is a liquid pool assets transfer. + */ +export const createSystemToBridgeAssets = async ( + // api: ApiPromise, + amounts: string[], + // specName: string, + assets: string[], + // registry: Registry, + xcmVersion: number, + // isForeignAssetsTransfer: boolean, + // isLiquidTokenTransfer: boolean, +): Promise => { + let multiAssets: FungibleStrAssetType[] = []; + let multiAsset: FungibleStrAssetType; + // const bridgeChainId = registry.lookupChainIdBySpecName(specName); + + // if (!assetDestIsBridge(assets)) { + // throw new BaseError( + // `specName ${specName} did not match a valid Ethereum chain ID. Found ID ${bridgeChainId}`, + // BaseErrorsEnum.InternalError, + // ); + // } + + for (let i = 0; i < assets.length; i++) { + let assetId: string = assets[i]; + const amount = amounts[i]; + + let assetLocation = resolveMultiLocation(assetId, xcmVersion); + console.log('CONCRETE MULTILOCATION', assetLocation); + + if (xcmVersion < 4) { + multiAsset = { + id: { + Concrete: assetLocation, + }, + fun: { + Fungible: amount, + }, + }; + } else { + multiAsset = { + id: assetLocation, + fun: { + Fungible: amount, + }, + }; + } + + multiAssets.push(multiAsset); + } + + multiAssets = sortAssetsAscending(multiAssets) as FungibleStrAssetType[]; + + const sortedAndDedupedMultiAssets = dedupeAssets(multiAssets) as FungibleStrAssetType[]; + + return sortedAndDedupedMultiAssets; +}; diff --git a/src/createXcmTypes/SystemToPara.spec.ts b/src/createXcmTypes/SystemToPara.spec.ts index 3ee49144..e9ce193b 100644 --- a/src/createXcmTypes/SystemToPara.spec.ts +++ b/src/createXcmTypes/SystemToPara.spec.ts @@ -204,7 +204,7 @@ describe('SystemToPara XcmVersioned Generation', () => { { id: { Concrete: { - parents: 0, + Parents: 0, interior: { X2: [{ PalletInstance: '50' }, { GeneralIndex: '1' }], }, diff --git a/src/createXcmTypes/index.ts b/src/createXcmTypes/index.ts index 250f0f11..149e5d8c 100644 --- a/src/createXcmTypes/index.ts +++ b/src/createXcmTypes/index.ts @@ -9,6 +9,7 @@ import { RelayToSystem } from './RelayToSystem'; import { SystemToPara } from './SystemToPara'; import { SystemToRelay } from './SystemToRelay'; import { SystemToSystem } from './SystemToSystem'; +import { SystemToBridge } from './SystemToBridge'; import { ICreateXcmType } from './types'; type ICreateXcmTypeLookup = { @@ -18,8 +19,9 @@ type ICreateXcmTypeLookup = { export const createXcmTypes: ICreateXcmTypeLookup = { SystemToSystem, SystemToPara, - RelayToPara, SystemToRelay, + SystemToBridge, + RelayToPara, RelayToSystem, ParaToPara, ParaToRelay, diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index 6825b642..80a8a9e0 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -6,11 +6,14 @@ import type { AnyJson } from '@polkadot/types/types'; import type { Registry } from '../registry'; import type { RequireOnlyOne } from '../types'; + +export type InteriorKeyValue = RequireOnlyOne | XcmV4JunctionDestBeneficiary[] | null; + export type XcmDestBeneficiary = { [x: string]: { parents: number; interior: { - [x: string]: RequireOnlyOne | XcmV4JunctionDestBeneficiary | null; + [x: string]: InteriorKeyValue }; }; }; @@ -25,24 +28,28 @@ export type XcmJunctionDestBeneficiary = { key: string; }; Parachain: string; + GlobalConsensus: string | AnyJson; }; -export type XcmV4JunctionDestBeneficiary = - | { +export type XcmV4JunctionDestBeneficiary = + { AccountId32: { network?: string; id: string; }; - }[] + } | { Parachain: string; - }[] + } | { AccountKey20: { network?: string; key: string; }; - }[]; + } + | { + GlobalConsensus: string | AnyJson; + }; export type XcmV2MultiLocation = { parents: number; @@ -409,7 +416,7 @@ export interface CreateWeightLimitOpts { export interface ICreateXcmType { createBeneficiary: (accountId: string, xcmVersion: number) => XcmDestBeneficiary; - createDest: (destId: string, xcmVersion: number) => XcmDestBeneficiary; + createDest: (destId: string, xcmVersion: number, assetIds?: string[]) => XcmDestBeneficiary; createAssets: ( amounts: string[], xcmVersion: number, diff --git a/src/createXcmTypes/util/assetDestIsBridge.spec.ts b/src/createXcmTypes/util/assetDestIsBridge.spec.ts new file mode 100644 index 00000000..99b43061 --- /dev/null +++ b/src/createXcmTypes/util/assetDestIsBridge.spec.ts @@ -0,0 +1,26 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import { assetDestIsBridge } from './assetDestIsBridge'; + +describe('assetDestIsBridge', () => { + it('Should correctly return false for a assetId of 1984', () => { + const result = assetDestIsBridge(['1984']); + + expect(result).toEqual(false); + }); + it('Should correctly return false for a non global consensus assetId location', () => { + const result = assetDestIsBridge([`{"parents":"1","interior":"Here"}}`]); + + expect(result).toEqual(false); + }); + it('Should correctly return true for an Ethereum assetId location containing a global consenus junction', () => { + const result = assetDestIsBridge([`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`]); + + expect(result).toEqual(true); + }); + it('Should correctly return true for a Kusama assetId location containing a global consensus junction', () => { + const result = assetDestIsBridge([`{"parents":"1","interior":{"x1":{"GlobalConsensus":"Kusama"}}}`]); + + expect(result).toEqual(true); + }); +}); diff --git a/src/createXcmTypes/util/assetDestIsBridge.ts b/src/createXcmTypes/util/assetDestIsBridge.ts new file mode 100644 index 00000000..14f6bbb3 --- /dev/null +++ b/src/createXcmTypes/util/assetDestIsBridge.ts @@ -0,0 +1,14 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +/** + * Determines if the dest chain is a Global Consensus origin based on the value of its assetId/location + * @param assetId + * @returns boolean + */ +export const assetDestIsBridge = (assetIds: string[]): boolean => { + if (assetIds.length === 0 || assetIds.length > 1) { + return false; + } + + return assetIds[0].toLowerCase().includes('globalconsensus'); +}; diff --git a/src/createXcmTypes/util/chainDestIsBridge.spec.ts b/src/createXcmTypes/util/chainDestIsBridge.spec.ts new file mode 100644 index 00000000..e03d505b --- /dev/null +++ b/src/createXcmTypes/util/chainDestIsBridge.spec.ts @@ -0,0 +1,20 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { chainDestIsBridge } from "./chainDestIsBridge"; + +describe('chainDestIsBridge', () => { + it('Should correctly return true for a GlobalConsensus destination location', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + + const result = chainDestIsBridge(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 = chainDestIsBridge(destLocation); + + expect(result).toEqual(false); + }); +}) \ No newline at end of file diff --git a/src/createXcmTypes/util/chainDestIsBridge.ts b/src/createXcmTypes/util/chainDestIsBridge.ts new file mode 100644 index 00000000..d5592620 --- /dev/null +++ b/src/createXcmTypes/util/chainDestIsBridge.ts @@ -0,0 +1,10 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +/** + * Determines if the dest chain is a Global Consensus origin based on the value of its dest location + * @param destLocation + * @returns boolean + */ +export const chainDestIsBridge = (destLocation: string): boolean => { + return destLocation.toLowerCase().includes('globalconsensus'); +}; diff --git a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.spec.ts b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.spec.ts index 1d575d5a..0fd8d79f 100644 --- a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.spec.ts +++ b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.spec.ts @@ -11,7 +11,7 @@ describe('foreignMultiAssetMultiLocationExists', () => { const expected = true; const multiLocation = '{"parents":"1","interior":{"X2": [{"Parachain":"1103"}, {"GeneralIndex": "0"}]}}'; - const isValid = await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation, 2); + const isValid = await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation); expect(isValid).toEqual(expected); }); @@ -20,7 +20,7 @@ describe('foreignMultiAssetMultiLocationExists', () => { const expected = false; const multiLocation = '{"parents":"1","interior":{"X1": {"Parachain":"21252525"}}}'; - const isValid = await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation, 2); + const isValid = await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation); expect(isValid).toEqual(expected); }); @@ -30,7 +30,7 @@ describe('foreignMultiAssetMultiLocationExists', () => { const multiLocation = '{"parents":"1","interior":{"X1": {"Parachain":"g2125"}}}'; await expect(async () => { - await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation, 2); + await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation); }).rejects.toThrow(expectedError); }); @@ -40,7 +40,7 @@ describe('foreignMultiAssetMultiLocationExists', () => { const multiLocation = '{"parents":"2","interior":{"X1": {"Parachain":"2,125"}}}'; await expect(async () => { - await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation, 2); + await foreignAssetsMultiLocationExists(adjustedMockSystemApi, registry, multiLocation); }).rejects.toThrow(expectedError); }); @@ -60,12 +60,12 @@ describe('foreignMultiAssetMultiLocationExists', () => { }); const multiLocation = '{"parents":"1","interior":{"X2": [{"Parachain":"1103"}, {"GeneralIndex": "0"}]}}'; - await foreignAssetsMultiLocationExists(adjustedMockSystemApi, emptyRegistry, multiLocation, 2); + await foreignAssetsMultiLocationExists(adjustedMockSystemApi, emptyRegistry, multiLocation); const result = emptyRegistry.cacheLookupForeignAsset('GDZ'); expect(result).toEqual({ - multiLocation: '{"Parents":"1","Interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}', + multiLocation: '{"parents":"1","interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}', name: 'Godzilla', symbol: 'GDZ', }); diff --git a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts index 30da42ca..a6784389 100644 --- a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts +++ b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts @@ -6,22 +6,21 @@ import { BaseError, BaseErrorsEnum } from '../../errors'; import { Registry } from '../../registry'; import type { ForeignAssetsData } from '../../registry/types'; import type { AssetMetadata } from '../../types'; -import { resolveMultiLocation } from '../../util/resolveMultiLocation'; +import { UnionXcAssetsMultiLocation } from '../types'; export const foreignAssetsMultiLocationExists = async ( assetHubApi: ApiPromise, registry: Registry, multilocationStr: string, - xcmVersion: number, ): Promise => { try { - const multiLocation = resolveMultiLocation(multilocationStr, xcmVersion); - - const foreignAsset = await assetHubApi.query.foreignAssets.asset(multiLocation); + const rawMultiLocation = JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation; + const foreignAsset = await assetHubApi.query.foreignAssets.asset(JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation); + console.log('FOREIGN ASSET', JSON.stringify(foreignAsset)); // check if foreign asset exists if (foreignAsset.toString().length > 0) { - const foreignAssetMetadata = (await assetHubApi.query.foreignAssets.metadata(multiLocation)).toHuman(); + const foreignAssetMetadata = (await assetHubApi.query.foreignAssets.metadata(rawMultiLocation)).toHuman(); if (foreignAssetMetadata) { const metadata = foreignAssetMetadata as AssetMetadata; @@ -30,7 +29,7 @@ export const foreignAssetsMultiLocationExists = async ( const asset: ForeignAssetsData = { symbol: assetSymbol, name: assetName, - multiLocation: JSON.stringify(multiLocation), + multiLocation: JSON.stringify(rawMultiLocation), }; // cache the foreign asset diff --git a/src/createXcmTypes/util/getAssetId.ts b/src/createXcmTypes/util/getAssetId.ts index c45f6cd1..2e8bf175 100644 --- a/src/createXcmTypes/util/getAssetId.ts +++ b/src/createXcmTypes/util/getAssetId.ts @@ -30,10 +30,12 @@ export const getAssetId = async ( xcmVersion: number, isForeignAssetsTransfer?: boolean, ): Promise => { + console.log("IM REACHED"); const currentChainId = registry.lookupChainIdBySpecName(specName); const assetIsValidInt = validateNumber(asset); const isParachain = new BN(currentChainId).gte(new BN(2000)); + console.log("IM REACHED ALSO??"); // if assets pallet, check the cache and return the cached assetId if found if (!isForeignAssetsTransfer) { const cachedAsset = registry.cacheLookupAsset(asset); @@ -53,6 +55,7 @@ export const getAssetId = async ( throw new BaseError(`${specName} has no associated token symbol ${asset}`, BaseErrorsEnum.InvalidAsset); } } + console.log("IM REACHED AS WELL?"); // check number assetId in registry if (assetIsValidInt) { // if assetId index is valid, return the assetId @@ -71,6 +74,8 @@ export const getAssetId = async ( } } + console.log("THIS ALSO?"); + let assetId = ''; const isAssetHub = currentChainId === ASSET_HUB_CHAIN_ID; @@ -81,7 +86,8 @@ export const getAssetId = async ( if (multiLocationIsInRegistry) { assetId = asset; } else { - const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, asset, xcmVersion); + console.log('ARE WE REACHING THIS'); + const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, asset); if (!isValidForeignAsset) { throw new BaseError(`MultiLocation ${asset} not found`, BaseErrorsEnum.AssetNotFound); diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts new file mode 100644 index 00000000..a7f89b78 --- /dev/null +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts @@ -0,0 +1,62 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { getGlobalConsensusDestFromAssetLocation } from './getGlobalConsensusDestFromAssetLocation'; +import { InteriorKeyValue } from '../types'; + +describe('getGlobalConsensusDestFromAssetLocation', () => { + it('Should correctly retrieve the global consensus dest based on the asset location for Polkadot', () => { + const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; + const xcmVersion = 4; + + const expected: InteriorKeyValue = { + GlobalConsensus: 'Polkadot' + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the asset location for Kusama', () => { + const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + const xcmVersion = 3; + const expected: InteriorKeyValue = { + GlobalConsensus: 'Kusama' + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the asset location for Ethereum', () => { + const assetLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + const xcmVersion = 4; + + const expected: InteriorKeyValue = { + GlobalConsensus: { + Ethereum: { + chainId: '11155111' + } + } + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly throw an error when an assetLocation is provided that does not contain a GlobalConsensus destination junction value', () => { + const assetLocationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; + const xcmVersion = 3; + + const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(err).toThrow(`Bridge transaction asset location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`); + }); + it('Should correctly throw an error when an assetLocation is provided that does not contain a valid GlobalConsensus at the 0 index', () => { + const assetLocationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; + const xcmVersion = 4; + + const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(err).toThrow(`Bridge transaction asset location interior {"X2":[{"Parachain":"2030\"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`); + }); +}); \ No newline at end of file diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts new file mode 100644 index 00000000..49d86f0d --- /dev/null +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts @@ -0,0 +1,38 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import type { AnyJson } from '@polkadot/types/types'; +import { UnionXcmMultiLocation, InteriorKeyValue } from "../types"; +import { BaseError, BaseErrorsEnum } from '../../errors'; + +export const getGlobalConsensusDestFromAssetLocation = (assetLocationStr: string, xcmVersion: number): InteriorKeyValue => { + if (!assetLocationStr.toLowerCase().includes('globalconsensus')) { + throw new BaseError( + `Bridge transaction asset location ${assetLocationStr} does not contain a GlobalConsensus Junction`, + BaseErrorsEnum.InternalError, + ); + } + + const assetLocation = (JSON.parse(assetLocationStr) as UnionXcmMultiLocation); + let globalConsensusDest: AnyJson | undefined; + + if (assetLocation.interior.X1) { + globalConsensusDest = assetLocation.interior.X1; + } else { + const interiorJunctionKey = Object.keys(assetLocation.interior)[0]; + globalConsensusDest = assetLocation.interior[interiorJunctionKey][0]; + + if (!JSON.stringify(globalConsensusDest).toLowerCase().includes('globalconsensus')) { + throw new BaseError( + `Bridge transaction asset location interior ${JSON.stringify(assetLocation.interior)} does not contain a GlobalConsensus Junction in the first index`, + BaseErrorsEnum.InternalError, + ); + } + } + + if (xcmVersion < 4) { + return globalConsensusDest as InteriorKeyValue; + } else { + return globalConsensusDest as InteriorKeyValue; + } + +} \ No newline at end of file diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts new file mode 100644 index 00000000..9b993efe --- /dev/null +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts @@ -0,0 +1,34 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { getGlobalConsensusSystemName } from './getGlobalConsensusSystemName'; + +describe('getGlobalConsensusSystemName', () => { + it('Should correctly return the consensus system name for Polkadot', () => { + const destLocation = `{"parents":"2","interior":{"X1":"Polkadot"}}}`; + + const result = getGlobalConsensusSystemName(destLocation); + + expect(result).toEqual('polkadot'); + }); + it('Should correctly return the consensus system name for Kusama', () => { + const destLocation = `{"parents":"2","interior":{"X1":"Kusama"}}}`; + + const result = getGlobalConsensusSystemName(destLocation); + + expect(result).toEqual('kusama'); + }); + it('Should correctly return the consensus system name for Ethereum', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + + const result = getGlobalConsensusSystemName(destLocation); + + expect(result).toEqual('ethereum'); + }); + it('Should correctly throw an error when no valid consensus system name is found', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`; + + const err = () => getGlobalConsensusSystemName(destLocation); + + expect(err).toThrow(`No known consensus system found for location {"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`); + }); +}) \ No newline at end of file diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts new file mode 100644 index 00000000..a7b649db --- /dev/null +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts @@ -0,0 +1,17 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES } from "../../consts"; +import { BaseError, BaseErrorsEnum } from "../../errors"; + +export const getGlobalConsensusSystemName = (destLocation: string): string => { + for (const systemName of KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES) { + if (destLocation.toLowerCase().includes(systemName)) { + return systemName; + } + } + + throw new BaseError( + `No known consensus system found for location ${destLocation}`, + BaseErrorsEnum.UnknownConsensusSystem + ); +} \ No newline at end of file diff --git a/src/createXcmTypes/util/isParachain.ts b/src/createXcmTypes/util/isParachain.ts index 0a8f3a8e..84c2576f 100644 --- a/src/createXcmTypes/util/isParachain.ts +++ b/src/createXcmTypes/util/isParachain.ts @@ -1,5 +1,6 @@ // Copyright 2023 Parity Technologies (UK) Ltd. import BN from 'bn.js'; +import { validateNumber } from '../../validate'; /** * Determines if a chain is a parachain based on the value of its chainId being strictly greater than or equal to 2000 @@ -7,6 +8,10 @@ import BN from 'bn.js'; * @returns boolean */ export const isParachain = (chainId: string): boolean => { - const chainIdAsNumber = new BN(chainId); - return chainIdAsNumber.gte(new BN(2000)); + if (validateNumber(chainId)) { + const chainIdAsNumber = new BN(chainId); + return chainIdAsNumber.gte(new BN(2000)); + } + + return false; }; diff --git a/src/createXcmTypes/util/isSystemChain.ts b/src/createXcmTypes/util/isSystemChain.ts index 83d94498..fa5cf0c1 100644 --- a/src/createXcmTypes/util/isSystemChain.ts +++ b/src/createXcmTypes/util/isSystemChain.ts @@ -1,5 +1,6 @@ // Copyright 2023 Parity Technologies (UK) Ltd. import BN from 'bn.js'; +import { validateNumber } from '../../validate'; /** * Determines if a chain is a system chain based on the value of its chainId being strictly greater than 0 and less than 2000 @@ -7,6 +8,10 @@ import BN from 'bn.js'; * @returns boolean */ export const isSystemChain = (chainId: string): boolean => { - const chainIdAsNumber = new BN(chainId); - return chainIdAsNumber.gt(new BN(0)) && chainIdAsNumber.lt(new BN(2000)); + if (validateNumber(chainId)) { + const chainIdAsNumber = new BN(chainId); + return chainIdAsNumber.gt(new BN(0)) && chainIdAsNumber.lt(new BN(2000)); + } + + return false; }; diff --git a/src/errors/BaseError.ts b/src/errors/BaseError.ts index d4e8bd20..3994897e 100644 --- a/src/errors/BaseError.ts +++ b/src/errors/BaseError.ts @@ -84,6 +84,10 @@ export enum BaseErrorsEnum { * Did not find the correct call in the current runtime. */ RuntimeCallNotFound = 'RuntimeCallNotFound', + /** + * Did not find a known consensus system for bridge transaction. + */ + UnknownConsensusSystem = 'UnknownConsensusSystem', } export class BaseError extends Error { diff --git a/src/errors/checkLocalTxInput/checkLocalTxInput.ts b/src/errors/checkLocalTxInput/checkLocalTxInput.ts index b932d50b..9026ef23 100644 --- a/src/errors/checkLocalTxInput/checkLocalTxInput.ts +++ b/src/errors/checkLocalTxInput/checkLocalTxInput.ts @@ -54,7 +54,7 @@ export const checkLocalTxInput = async ( if (foreignAssetIsInRegistry) { return LocalTxType.ForeignAssets; } else { - const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, multiLocationStr, xcmVersion); + const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, multiLocationStr); if (isValidForeignAsset) { return LocalTxType.ForeignAssets; } else { diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index 72040118..d568cee0 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -896,7 +896,7 @@ describe('checkParaAssets', () => { ); expect(registry.cacheLookupForeignAsset('GDZ')).toEqual({ - multiLocation: '{"Parents":"1","Interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}', + multiLocation: '{"parents":"1","interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}', name: 'Godzilla', symbol: 'GDZ', }); diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index da39f488..55d49300 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -404,7 +404,7 @@ const checkSystemAssets = async ( const multiLocationIsInRegistry = foreignAssetMultiLocationIsInCacheOrRegistry(assetId, registry, xcmVersion); if (!multiLocationIsInRegistry) { - const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, assetId, xcmVersion); + const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, assetId); if (!isValidForeignAsset) { throw new BaseError(`MultiLocation ${assetId} not found`, BaseErrorsEnum.AssetNotFound); @@ -918,6 +918,23 @@ export const checkAssetIdsAreOfSameAssetIdType = (assetIds: string[]) => { } }; +/** + * Checks to ensure that the xcmVersion is at least 3 if paysWithFeeDest is provided + * + * @param xcmDirection + * @param xcmVersion + */ +export const checkXcmVersionIsValidForSystemToBridge = ( + xcmVersion: number, +) => { + if ( + xcmVersion && + xcmVersion < 3 + ) { + throw new BaseError('SystemToBridge transactions require XCM version 3 or greater', BaseErrorsEnum.InvalidXcmVersion); + } +}; + /** * Checks to ensure that the xcmVersion is at least 3 if paysWithFeeDest is provided * @@ -1117,7 +1134,6 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationIdLength(assetIds); checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); - checkAssetsAmountMatch(assetIds, amounts); checkMultiLocationsContainOnlyNativeOrForeignAssetsOfDestChain(direction, destChainId, assetIds); } checkAssetsAmountMatch(assetIds, amounts); @@ -1125,14 +1141,21 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch if (direction === Direction.SystemToSystem) { if (isForeignAssetsTransfer) { - checkMultiLocationIdLength(assetIds); - checkMultiLocationAmountsLength(amounts); + checkAssetsAmountMatch(assetIds, amounts); checkMultiLocationsContainOnlyNativeOrForeignAssetsOfDestChain(direction, destChainId, assetIds); } checkIfNativeRelayChainAssetPresentInMultiAssetIdList(assetIds, registry); } + if (direction === Direction.SystemToBridge) { + checkMultiLocationIdLength(assetIds); + checkMultiLocationAmountsLength(amounts); + checkAssetsAmountMatch(assetIds, amounts); + checkXcmVersionIsValidForSystemToBridge(xcmVersion); + // check asset is ... + } + if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { CheckXTokensPalletOriginIsNonForeignAssetTx(direction, xcmPallet, isForeignAssetsTransfer); checkAssetsAmountMatch(assetIds, amounts, isPrimaryParachainNativeAsset); diff --git a/src/index.ts b/src/index.ts index e3a08b7b..674a890c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,59 +4,60 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; -import { ApiPromise, WsProvider } from '@polkadot/api'; - -import { AssetTransferApi } from './AssetTransferApi'; - -const main = async () => { - // const specName = 'bridge-hub-kusama'; - // const specname = 'statemine'; - // const provider = new WsProvider(`wss://kusama-asset-hub-rpc.polkadot.io`); - // const provider = new WsProvider(`wss://statemine-rpc.polkadot.io`); - // const provider = new WsProvider(`wss://kusama.api.encointer.org`); - // const provider = new WsProvider(`wss://westend-asset-hub-rpc.polkadot.io`); - // const provider = new WsProvider(`wss://wss.api.moonbeam.network`); - // const provider = new WsProvider(`wss://sys.ibp.network/collectives-westend`); - // 'wss://moonriver.api.onfinality.io/public-ws' - const provider = new WsProvider( - 'wss://rococo-asset-hub-rpc.polkadot.io', - // `wss://westend-rpc.polkadot.io`, - // `wss://moonriver.api.onfinality.io/public-ws` - // `wss://bifrost-rpc.liebi.com/ws` - // `wss://rpc.shiden.astar.network` - ); - - const api = await ApiPromise.create({ provider }); - - await api.isReady; - - const assetTransferApi = new AssetTransferApi(api, 'rococo', 4); - - const payload = await assetTransferApi.createTransferTransaction( - 'sepolia', - '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', - ['weth'], - ['1000000000000000000'], - { - format: 'payload', - xcmVersion: 4, - isLimited: true, - sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', - }, - ); - - console.log('payload', JSON.stringify(payload)); - - const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); - console.log('decodedPayload', decodedPayload); - - const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { - version: 4, - }); - - console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); - const payloadJSON = payloadExtrinsic.method.toJSON(); - console.log('payload json', payloadJSON); -}; - -main(); +// import { ApiPromise, WsProvider } from '@polkadot/api'; + +// import { AssetTransferApi } from './AssetTransferApi'; + +// const main = async () => { +// // const specName = 'bridge-hub-kusama'; +// // const specname = 'statemine'; +// // const provider = new WsProvider(`wss://kusama-asset-hub-rpc.polkadot.io`); +// // const provider = new WsProvider(`wss://statemine-rpc.polkadot.io`); +// // const provider = new WsProvider(`wss://kusama.api.encointer.org`); +// // const provider = new WsProvider(`wss://westend-asset-hub-rpc.polkadot.io`); +// // const provider = new WsProvider(`wss://wss.api.moonbeam.network`); +// // const provider = new WsProvider(`wss://sys.ibp.network/collectives-westend`); +// // 'wss://moonriver.api.onfinality.io/public-ws' +// const provider = new WsProvider( +// 'wss://rococo-asset-hub-rpc.polkadot.io', +// // `wss://westend-rpc.polkadot.io`, +// // `wss://moonriver.api.onfinality.io/public-ws` +// // `wss://bifrost-rpc.liebi.com/ws` +// // `wss://rpc.shiden.astar.network` +// ); + +// const api = await ApiPromise.create({ provider }); + +// await api.isReady; + +// const assetTransferApi = new AssetTransferApi(api, 'asset-hub-rococo', 4); + +// const payload = await assetTransferApi.createTransferTransaction( +// 'ethereum-sepolia', +// '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', +// // ['0xfff9976782d46cc05630d1f6ebab18b2324d6b14'], +// [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], +// ['1000000000000000000'], +// { +// format: 'payload', +// xcmVersion: 4, +// isLimited: true, +// sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', +// }, +// ); + +// console.log('payload', JSON.stringify(payload)); + +// const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); +// console.log('decodedPayload', decodedPayload); + +// const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { +// version: 4, +// }); + +// console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); +// const payloadJSON = payloadExtrinsic.method.toJSON(); +// console.log('payload json', payloadJSON); +// }; + +// main(); diff --git a/src/registry/Registry.ts b/src/registry/Registry.ts index c70c304f..2184c2b3 100644 --- a/src/registry/Registry.ts +++ b/src/registry/Registry.ts @@ -4,6 +4,7 @@ import registry from '@substrate/asset-transfer-api-registry'; import { ASSET_HUB_CHAIN_ID, + ETHEREUM_CHAIN_NAMES, KUSAMA_ASSET_HUB_SPEC_NAMES, POLKADOT_ASSET_HUB_SPEC_NAMES, ROCOCO_ASSET_HUB_SPEC_NAME, @@ -33,7 +34,7 @@ export class Registry { this.opts = opts; this.specName = specName; this.registry = parseRegistry(registry as ChainInfoRegistry, opts); - this.relayChain = findRelayChain(this.specName, this.registry); + this.relayChain = findRelayChain(this.specName, this.registry, this.opts.chainName); this.currentRelayRegistry = this.registry[this.relayChain]; this.specNameToIdCache = new Map(); this.cache = { @@ -241,14 +242,17 @@ export class Registry { */ public lookupParachainInfo(id: string): ExpandedChainInfoKeys[] { const chainIds = Object.keys(this.currentRelayRegistry); + console.log('CHAIN IDS', chainIds); + console.log('ID ARG', id); if (chainIds.includes(id)) { + console.log('ID IS IN FACT INCLUDED'); return [Object.assign({}, this.currentRelayRegistry[id], { chainId: id })]; } return []; } /** - * Return the Id of a parachain given its specName. + * Return the Id of a chain given its specName. * * @param specName */ @@ -257,6 +261,10 @@ export class Registry { return this.specNameToIdCache.get(specName) as string; } + if (ETHEREUM_CHAIN_NAMES.includes(specName.toLowerCase())) { + this.specNameToIdCache.set(specName, '1000'); + } + if ( POLKADOT_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase()) || KUSAMA_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase()) || diff --git a/src/registry/findRelayChain.spec.ts b/src/registry/findRelayChain.spec.ts index 8100fef1..de804a0a 100644 --- a/src/registry/findRelayChain.spec.ts +++ b/src/registry/findRelayChain.spec.ts @@ -12,18 +12,23 @@ describe('findRelayChain', () => { const findPolkadot = findRelayChain('statemint', registry); const findKusama = findRelayChain('statemine', registry); const findWestend = findRelayChain('westmint', registry); + const findRococo = findRelayChain('statemine', registry, 'Rococo Asset Hub'); expect(findPolkadot).toEqual('polkadot'); expect(findKusama).toEqual('kusama'); expect(findWestend).toEqual('westend'); + expect(findRococo).toEqual('rococo'); }); it('Should correctly discover the right relay chain when using asset-hub specNames', () => { const findPolkadot = findRelayChain('asset-hub-polkadot', registry); const findKusama = findRelayChain('asset-hub-kusama', registry); const findWestend = findRelayChain('asset-hub-westend', registry); + const findRococo = findRelayChain('asset-hub-rococo', registry, 'Rococo Asset Hub'); + expect(findPolkadot).toEqual('polkadot'); expect(findKusama).toEqual('kusama'); expect(findWestend).toEqual('westend'); + expect(findRococo).toEqual('rococo'); }); }); diff --git a/src/registry/findRelayChain.ts b/src/registry/findRelayChain.ts index dd16e745..275ec985 100644 --- a/src/registry/findRelayChain.ts +++ b/src/registry/findRelayChain.ts @@ -14,12 +14,23 @@ import type { ChainInfoKeys, ChainInfoRegistry, RelayChains } from './types'; * * @param specName SpecName of the given chain * @param registry The registry to search + * @param chainName optional chain name for cases where more than one chain share a specName */ -export const findRelayChain = (specName: string, registry: ChainInfoRegistry): RelayChains => { +export const findRelayChain = (specName: string, registry: ChainInfoRegistry, chainName?: string): RelayChains => { const polkadotChains = Object.keys(registry.polkadot).map((val) => registry.polkadot[val].specName); if (polkadotChains.includes(specName.toLowerCase()) || POLKADOT_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase())) return 'polkadot'; + // check rococo first due to Kusama `statemine` specName collision + const rococoChains = Object.keys(registry.rococo).map((val) => registry.rococo[val].specName); + if ( + rococoChains.includes(specName.toLowerCase()) || + ROCOCO_ASSET_HUB_SPEC_NAME.includes(specName.toLowerCase()) || + specName.toLowerCase() === 'statemine' && chainName && chainName.toLowerCase().includes('rococo') + ) { + return 'rococo'; + } + const kusamaChains = Object.keys(registry.kusama).map((val) => registry.kusama[val].specName); if (kusamaChains.includes(specName.toLowerCase()) || KUSAMA_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase())) return 'kusama'; @@ -28,10 +39,6 @@ export const findRelayChain = (specName: string, registry: ChainInfoRegistry registry.rococo[val].specName); - if (rococoChains.includes(specName.toLowerCase()) || ROCOCO_ASSET_HUB_SPEC_NAME.includes(specName.toLowerCase())) { - return 'rococo'; - } throw new BaseError(`Cannot find the relay chain for specName: ${specName}`, BaseErrorsEnum.InternalError); }; diff --git a/src/testHelpers/adjustedMockSystemApiV1007000.ts b/src/testHelpers/adjustedMockSystemApiV1007000.ts index fd340504..f8f70a4a 100644 --- a/src/testHelpers/adjustedMockSystemApiV1007000.ts +++ b/src/testHelpers/adjustedMockSystemApiV1007000.ts @@ -186,13 +186,21 @@ const assetsMetadata = (assetId: number | string | BN): Promise> => Promise.resolve().then(() => { const assets: Map = new Map(); - const assetsMutliLocation = mockSystemApi.registry.createType('XcmV2MultiLocation', asset); + const assetsMutliLocation = JSON.stringify(asset); + const multiLocationStr = '{"parents":"1","interior":{"X2": [{"Parachain":"1103"}, {"GeneralIndex": "0"}]}}'; - const multiLocation = mockSystemApi.registry.createType('XcmV2MultiLocation', JSON.parse(multiLocationStr)); const multiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); - assets.set(multiLocation.toHex(), multiLocationAsset); + assets.set(multiLocationStr, multiLocationAsset); + + const bridgedRococoMultiLocation1Str = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}'; + const bridgedRococoMultiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); + assets.set(bridgedRococoMultiLocation1Str, bridgedRococoMultiLocationAsset); + + const bridgedEthereumMultiLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + const bridgedEthereumMultiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); + assets.set(bridgedEthereumMultiLocationStr, bridgedEthereumMultiLocationAsset); - const maybeAsset = assets.has(assetsMutliLocation.toHex()) ? assets.get(assetsMutliLocation.toHex()) : undefined; + const maybeAsset = assets.has(assetsMutliLocation) ? assets.get(JSON.stringify(assetsMutliLocation)) : undefined; if (maybeAsset) { return new Option(createWestmintRegistry(1007000), 'PalletAssetsAssetDetails', maybeAsset); diff --git a/src/types.ts b/src/types.ts index ed41096b..4f7ecd67 100644 --- a/src/types.ts +++ b/src/types.ts @@ -44,6 +44,10 @@ export enum Direction { * System parachain to System parachain chain. */ SystemToSystem = 'SystemToSystem', + /** + * System parachain to an external `GlobalConsensus` chain. + */ + SystemToBridge = 'SystemToBridge', /** * Parachain to Parachain. */ @@ -94,6 +98,7 @@ export interface ChainOriginDestInfo { isDestParachain: boolean; isOriginSystemParachain: boolean; isOriginParachain: boolean; + isDestBridge: boolean; } export interface LocalTxOpts extends TransferArgsOpts { @@ -166,6 +171,10 @@ export type AssetTransferApiOpts { - it('Should correctly throw an error when multiLocation contains a generalKey junction and the xcmVersion is not 2', () => { - const str = `{"parents":1,"interior":{"x2":[{"parachain":2001},{"generalKey":"0x0001"}]}}`; - const err = () => resolveMultiLocation(str, 3); - - expect(err).toThrow('XcmVersion must be version 2 for MultiLocations that contain a GeneralKey junction.'); - }); it('Should correctly not throw an error when xcmVersion is 3 and the multiLocation does not contain a generalKey Junction', () => { const str = `{"parents":0,"interior":{"here": null}}`; const err = () => resolveMultiLocation(str, 3); diff --git a/src/util/resolveMultiLocation.ts b/src/util/resolveMultiLocation.ts index 26cd38f6..68f34326 100644 --- a/src/util/resolveMultiLocation.ts +++ b/src/util/resolveMultiLocation.ts @@ -5,7 +5,7 @@ import type { AnyJson } from '@polkadot/types/types'; import { SUPPORTED_XCM_VERSIONS } from '../consts'; import type { UnionXcmMultiLocation } from '../createXcmTypes/types'; import { BaseError, BaseErrorsEnum } from '../errors/BaseError'; -import { sanitizeKeys } from './sanitizeKeys'; +// import { sanitizeKeys } from './sanitizeKeys'; /** * This ensures that the given multiLocation does not have certain junctions depending on the xcm version. @@ -26,17 +26,17 @@ export const resolveMultiLocation = (multiLocation: AnyJson, xcmVersion: number) ); } - const hasGeneralKey = multiLocationStr.includes('generalKey') || multiLocationStr.includes('GeneralKey'); - if (xcmVersion != 2 && hasGeneralKey) { - throw new BaseError( - 'XcmVersion must be version 2 for MultiLocations that contain a GeneralKey junction.', - BaseErrorsEnum.InvalidXcmVersion, - ); - } + // const hasGeneralKey = multiLocationStr.includes('generalKey') || multiLocationStr.includes('GeneralKey'); + // if (xcmVersion != 2 && hasGeneralKey) { + // throw new BaseError( + // 'XcmVersion must be version 2 for MultiLocations that contain a GeneralKey junction.', + // BaseErrorsEnum.InvalidXcmVersion, + // ); + // } if (!SUPPORTED_XCM_VERSIONS.includes(xcmVersion)) { throw new BaseError(`Invalid XcmVersion for mulitLocation construction`, BaseErrorsEnum.InternalError); } - return sanitizeKeys(JSON.parse(multiLocationStr) as UnionXcmMultiLocation); + return JSON.parse(multiLocationStr) as UnionXcmMultiLocation; }; From 7dfb859313184687806f955cf9659df42f07dc58 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 14 Mar 2024 17:46:22 -0400 Subject: [PATCH 03/44] update rococo bridge tx example --- .../assetHubSnowbridgeETHToBridgeHub.ts | 11 +- ...etHubSnowbridgeETHForeignAssetsTransfer.ts | 4 +- .../local/assetHubSnowbridgeETHToContracts.ts | 12 +- .../reserve/assetHubSnowbridgeETHToKhala.ts | 6 +- examples/tsconfig.json | 1 + src/AssetTransferApi.ts | 34 +++-- src/consts.ts | 4 +- src/createCalls/foreignAssets/transfer.ts | 1 - .../polkadotXcm/transferAssets.spec.ts | 3 +- src/createXcmTypes/SystemToBridge.spec.ts | 117 +++++++++-------- src/createXcmTypes/SystemToBridge.ts | 60 +++++---- src/createXcmTypes/SystemToPara.spec.ts | 2 +- src/createXcmTypes/index.ts | 2 +- src/createXcmTypes/types.ts | 21 ++-- .../util/assetDestIsBridge.spec.ts | 6 +- .../util/chainDestIsBridge.spec.ts | 24 ++-- .../util/foreignAssetsMultiLocationExists.ts | 8 +- src/createXcmTypes/util/getAssetId.ts | 6 - ...obalConsensusDestFromAssetLocation.spec.ts | 118 +++++++++--------- ...getGlobalConsensusDestFromAssetLocation.ts | 63 +++++----- .../util/getGlobalConsensusSystemName.spec.ts | 44 +++---- .../util/getGlobalConsensusSystemName.ts | 24 ++-- src/createXcmTypes/util/isParachain.ts | 1 + src/createXcmTypes/util/isSystemChain.ts | 1 + .../util/sortAssetsAscending.ts | 6 +- src/errors/checkXcmTxInputs.ts | 15 +-- src/index.ts | 58 --------- .../AssetsTransferApi.spec.ts | 31 +++++ src/registry/Registry.ts | 3 - src/registry/findRelayChain.spec.ts | 1 - src/registry/findRelayChain.ts | 11 +- .../adjustedMockSystemApiV1007000.ts | 29 ++--- src/util/resolveMultiLocation.ts | 8 +- 33 files changed, 374 insertions(+), 361 deletions(-) diff --git a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts index c8497ea3..c11a1aa2 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts @@ -16,8 +16,9 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * NOTE: When `isLimited` is true it will use the `limited` version of either `reserveTransferAssets`, or `teleportAssets`. */ const main = async () => { - const { api, specName, chainName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); - console.log('SPECNAME', specName); + const { api, specName, chainName, safeXcmVersion } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { chainName, }); @@ -28,13 +29,13 @@ const main = async () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], ['1000000000000'], { format: 'call', - xcmVersion: 4, - isLimited: true, + xcmVersion: 4, + isLimited: true, }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts index 2fb8fa21..a8d51482 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts @@ -25,12 +25,12 @@ const main = async () => { '1000', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], ['1000000000000'], { format: 'call', - xcmVersion: 3, + xcmVersion: 3, }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts index c9d1c146..7787533e 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts @@ -16,9 +16,11 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * NOTE: When `isLimited` is true it will use the `limited` version of either `reserveTransferAssets`, or `teleportAssets`. */ const main = async () => { - const { api, specName, chainName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const { api, specName, chainName, safeXcmVersion } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { - chainName + chainName, }); let callInfo: TxResult<'call'>; @@ -27,13 +29,13 @@ const main = async () => { '1002', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], ['1000000000000'], { format: 'call', - xcmVersion: 4, - isLimited: true, + xcmVersion: 4, + isLimited: true, }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts index 85e29d44..7fd43d7c 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts @@ -25,13 +25,13 @@ const main = async () => { '2004', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}` + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], ['1000000000000'], { format: 'call', - xcmVersion: 4, - isLimited: true, + xcmVersion: 4, + isLimited: true, }, ); diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 09bc17f4..b2d2df1e 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -16,6 +16,7 @@ ], "include": [ "./*", + "./rococo/**/*.ts", "./kusama/**/*.ts", "./polkadot/**/*.ts", "../src/**/*.ts", diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 30e16716..937ba632 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -29,12 +29,14 @@ import { CreateXcmCallOpts } from './createXcmCalls/types'; import { establishXcmPallet, XcmPalletName } from './createXcmCalls/util/establishXcmPallet'; import { XTokensBaseArgs } from './createXcmCalls/xTokens/types'; import { UnionXcmMultiLocation } from './createXcmTypes/types'; +import { assetDestIsBridge } from './createXcmTypes/util/assetDestIsBridge'; import { assetIdsContainRelayAsset } from './createXcmTypes/util/assetIdsContainsRelayAsset'; +import { chainDestIsBridge } from './createXcmTypes/util/chainDestIsBridge'; import { getAssetId } from './createXcmTypes/util/getAssetId'; +import { getGlobalConsensusSystemName } from './createXcmTypes/util/getGlobalConsensusSystemName'; import { isParachain } from './createXcmTypes/util/isParachain'; import { isParachainPrimaryNativeAsset } from './createXcmTypes/util/isParachainPrimaryNativeAsset'; import { isSystemChain } from './createXcmTypes/util/isSystemChain'; -import { assetDestIsBridge } from './createXcmTypes/util/assetDestIsBridge'; import { multiLocationAssetIsParachainsNativeAsset } from './createXcmTypes/util/multiLocationAssetIsParachainsNativeAsset'; import { BaseError, @@ -80,8 +82,6 @@ import { deepEqual } from './util/deepEqual'; // import { resolveMultiLocation } from './util/resolveMultiLocation'; import { sanitizeKeys } from './util/sanitizeKeys'; import { validateNumber } from './validate'; -import { chainDestIsBridge } from './createXcmTypes/util/chainDestIsBridge'; -import { getGlobalConsensusSystemName } from './createXcmTypes/util/getGlobalConsensusSystemName'; /** * Holds open an api connection to a specified chain within the ApiPromise in order to help @@ -206,7 +206,7 @@ export class AssetTransferApi { isDestRelayChain: destChainId === RELAY_CHAIN_IDS[0], isDestSystemParachain: isSystemChain(destChainId), isDestParachain: isParachain(destChainId), - isDestBridge: assetDestIsBridge(assetIds), // check the asset is going to another consensus system + isDestBridge: assetDestIsBridge(assetIds), // check the asset is going to another consensus system }; /** @@ -426,8 +426,14 @@ export class AssetTransferApi { if (isLocal) return Direction.Local; const { api } = this; - const { isDestParachain, isDestRelayChain, isDestSystemParachain, isOriginParachain, isOriginSystemParachain, isDestBridge } = - chainOriginDestInfo; + const { + isDestParachain, + isDestRelayChain, + isDestSystemParachain, + isOriginParachain, + isOriginSystemParachain, + isDestBridge, + } = chainOriginDestInfo; /** * Check if the origin is a System Parachain @@ -494,7 +500,7 @@ export class AssetTransferApi { method: Methods, dest: string, origin: string, - opts: { format?: T; paysWithFeeOrigin?: string; sendersAddr?: string}, + opts: { format?: T; paysWithFeeOrigin?: string; sendersAddr?: string }, ): Promise> { const { format, paysWithFeeOrigin, sendersAddr } = opts; const fmt = format ? format : 'payload'; @@ -771,8 +777,7 @@ export class AssetTransferApi { } const lookup = registry.lookupParachainInfo(destId); - console.log('LOOKUP VALUE', lookup); - console.log('WHAT IS THE RELAY CHAIN', registry.relayChain); + if (lookup.length === 0) { throw new BaseError( `Could not find any parachain information given the destId: ${destId}`, @@ -878,7 +883,7 @@ export class AssetTransferApi { localTxChainType: LocalTxChainType, opts: LocalTxOpts, ) { - console.log("IM HERE", localTxChainType); + console.log('IM HERE', localTxChainType); const { api, specName } = this; let assetId = assetIds[0]; const amount = amounts[0]; @@ -888,10 +893,6 @@ export class AssetTransferApi { isNativeRelayChainAsset = true; } - console.log('XCM DIRECTION', xcmDirection); - console.log('NOT IS VALID NUMBER', !isValidNumber); - console.log('NOT IS RELAY CHAIN NATIVE ASSET', !isNativeRelayChainAsset); - if (xcmDirection === Direction.SystemToSystem && !isValidNumber && !isNativeRelayChainAsset) { // for SystemToSystem, assetId is not the native relayChains asset and is not a number // check for the general index of the assetId and assign the correct value for the local tx @@ -904,8 +905,6 @@ export class AssetTransferApi { declaredXcmVersion, opts.isForeignAssetsTransfer, ); - - console.log('ASSET ID IS', assetId); } const method = opts.keepAlive ? 'transferKeepAlive' : 'transfer'; @@ -920,7 +919,6 @@ export class AssetTransferApi { opts.isForeignAssetsTransfer, opts.isLiquidTokenTransfer, ); // Throws an error when any of the inputs are incorrect. - console.log('WHAT IS LOCAL ASSET TYPE', localAssetType); let tx: SubmittableExtrinsic<'promise', ISubmittableResult> | undefined; let palletMethod: LocalTransferTypes | undefined; @@ -943,9 +941,7 @@ export class AssetTransferApi { : poolAssets.transfer(api, addr, assetId, amount); palletMethod = `poolAssets::${method}`; } else if (localAssetType === LocalTxType.ForeignAssets) { - console.log('MULTILOCATION', assetId); const location = JSON.parse(assetId) as UnionXcmMultiLocation; - console.log('RESOLVED', JSON.stringify(location)); tx = method === 'transferKeepAlive' ? foreignAssets.transferKeepAlive(api, addr, location, amount) diff --git a/src/consts.ts b/src/consts.ts index 78f76ace..5c0fbe3b 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -74,6 +74,6 @@ export const CDN_URL = 'https://paritytech.github.io/asset-transfer-api-registry export const JS_ENV = detectJsEnv(); /** - * Supported consensus system chain names + * Supported consensus system chain names */ -export const KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES = ['polkadot', 'kusama', 'westend', 'rococo', 'ethereum']; \ No newline at end of file +export const KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES = ['polkadot', 'kusama', 'westend', 'rococo', 'ethereum']; diff --git a/src/createCalls/foreignAssets/transfer.ts b/src/createCalls/foreignAssets/transfer.ts index a529c2c2..01e880c0 100644 --- a/src/createCalls/foreignAssets/transfer.ts +++ b/src/createCalls/foreignAssets/transfer.ts @@ -12,6 +12,5 @@ export const transfer = ( assetId: UnionXcmMultiLocation, amount: string, ): SubmittableExtrinsic<'promise', ISubmittableResult> => { - console.log('TRANSFER ASSET ID', JSON.stringify(assetId)); return api.tx.foreignAssets.transfer(assetId, destAddr, amount); }; diff --git a/src/createXcmCalls/polkadotXcm/transferAssets.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssets.spec.ts index ef4af643..807bf779 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssets.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssets.spec.ts @@ -191,9 +191,10 @@ describe('transferAssets', () => { specName: 'westmint', registry, }; + const FAbaseArgs = { ...baseArgs, - assetIds: ['{"parents":"1","interior":{ "X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}'], + assetIds: ['{"parents":"1","interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}'], }; it('Should correctly construct a tx for a system parachain with V4', async () => { const isLimited = true; diff --git a/src/createXcmTypes/SystemToBridge.spec.ts b/src/createXcmTypes/SystemToBridge.spec.ts index cf7353b8..911eacae 100644 --- a/src/createXcmTypes/SystemToBridge.spec.ts +++ b/src/createXcmTypes/SystemToBridge.spec.ts @@ -5,10 +5,10 @@ import { adjustedMockSystemApiV1007000 } from '../testHelpers/adjustedMockSystem import { SystemToBridge } from './SystemToBridge'; describe('SystemToBridge', () => { - const registry = new Registry('asset-hub-rococo', {}); - const isForeignAssetsTransfer = true; - const isLiquidTokenTransfer = false; - describe('Beneficiary', () => { + const registry = new Registry('asset-hub-rococo', {}); + const isForeignAssetsTransfer = true; + const isLiquidTokenTransfer = false; + describe('Beneficiary', () => { it('Should work for V3', () => { const beneficiary = SystemToBridge.createBeneficiary( '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', @@ -91,22 +91,24 @@ describe('SystemToBridge', () => { expect(beneficiary).toStrictEqual(expectedRes); }); - }); - describe('Destination', () => { - it('Should work for V3', () => { - const assetIds = [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`]; + }); + describe('Destination', () => { + it('Should work for V3', () => { + const assetIds = [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ]; const destination = SystemToBridge.createDest('100', 3, assetIds); const expectedRes = { V3: { - parents: 1, + parents: 2, interior: { X1: { GlobalConsensus: { - Ethereum: { - chainId: '11155111' - } - }, + Ethereum: { + chainId: '11155111', + }, + }, }, }, }, @@ -115,13 +117,13 @@ describe('SystemToBridge', () => { expect(destination).toStrictEqual(expectedRes); }); it('Should work for V4', () => { - const assetIds = [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`]; + const assetIds = [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`]; const destination = SystemToBridge.createDest('100', 4, assetIds); const expectedRes = { V4: { - parents: 1, + parents: 2, interior: { X1: [ { @@ -134,23 +136,29 @@ describe('SystemToBridge', () => { expect(destination).toStrictEqual(expectedRes); }); - }); - describe('Assets', () => { - it('Should work for V3', async () => { - const assets = await SystemToBridge.createAssets(['10000000000'], 3, 'asset-hub-westend', [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], { - registry, - isForeignAssetsTransfer, - isLiquidTokenTransfer, - api: adjustedMockSystemApiV1007000, - }); + }); + describe('Assets', () => { + it('Should work for V3', async () => { + const assets = await SystemToBridge.createAssets( + ['10000000000'], + 3, + 'asset-hub-westend', + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1007000, + }, + ); const expectedRes = { V3: [ { id: { Concrete: { - Parents: '2', - Interior: { + parents: '2', + interior: { X1: { GlobalConsensus: 'Rococo' }, }, }, @@ -165,43 +173,52 @@ describe('SystemToBridge', () => { expect(assets).toStrictEqual(expectedRes); }); it('Should work for V4', async () => { - const assets = await SystemToBridge.createAssets(['10000000000'], 4, 'asset-hub-westend', [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], { - registry, - isForeignAssetsTransfer, - isLiquidTokenTransfer, - api: adjustedMockSystemApiV1007000, - }); + const assets = await SystemToBridge.createAssets( + ['10000000000'], + 4, + 'asset-hub-westend', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1007000, + }, + ); const expectedRes = { V4: [ { id: { - Parents: '2', - Interior: { + parents: '2', + interior: { X2: [ - { - GlobalConsensus: { - Ethereum: { - Chainid: '11155111', - } - } - }, - { - AccountKey20: { - Network: null, - Key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14' - } - }], + { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }, + { + AccountKey20: { + network: null, + key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14', + }, + }, + ], }, }, fun: { Fungible: '10000000000', }, }, - ] + ], }; expect(assets).toStrictEqual(expectedRes); }); - }); -}); \ No newline at end of file + }); +}); diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index 81bb0681..98a93142 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -1,13 +1,14 @@ // Copyright 2024 Parity Technologies (UK) Ltd. import type { ApiPromise } from '@polkadot/api'; +import { isEthereumAddress } from '@polkadot/util-crypto'; import { BaseError, BaseErrorsEnum } from '../errors'; -// import type { Registry } from '../registry'; +import type { Registry } from '../registry'; import { getFeeAssetItemIndex } from '../util/getFeeAssetItemIndex'; import { normalizeArrToStr } from '../util/normalizeArrToStr'; import { resolveMultiLocation } from '../util/resolveMultiLocation'; -// import { validateNumber } from '../validate'; +import { validateNumber } from '../validate'; import { CreateAssetsOpts, CreateFeeAssetItemOpts, @@ -23,14 +24,15 @@ import { XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; +import { getAssetId } from './util/getAssetId'; +// import { assetDestIsBridge } from './util/assetDestIsBridge'; +import { getGlobalConsensusDestFromAssetLocation } from './util/getGlobalConsensusDestFromAssetLocation'; +import { isRelayNativeAsset } from './util/isRelayNativeAsset'; // import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; // import { getAssetId } from './util/getAssetId'; // import { isRelayNativeAsset } from './util/isRelayNativeAsset'; import { isSystemChain } from './util/isSystemChain'; import { sortAssetsAscending } from './util/sortAssetsAscending'; -import { isEthereumAddress } from '@polkadot/util-crypto'; -// import { assetDestIsBridge } from './util/assetDestIsBridge'; -import { getGlobalConsensusDestFromAssetLocation } from './util/getGlobalConsensusDestFromAssetLocation'; export const SystemToBridge: ICreateXcmType = { /** @@ -79,7 +81,7 @@ export const SystemToBridge: ICreateXcmType = { throw new BaseError(`assetId arg must provided for Bridge transactions`); } - const destination = getGlobalConsensusDestFromAssetLocation(assetIds[0], xcmVersion); + const destination = getGlobalConsensusDestFromAssetLocation(assetIds[0], xcmVersion); if (xcmVersion === 3) { /** @@ -119,20 +121,20 @@ export const SystemToBridge: ICreateXcmType = { createAssets: async ( amounts: string[], xcmVersion: number, - _specName: string, + specName: string, assets: string[], - _opts: CreateAssetsOpts, + opts: CreateAssetsOpts, ): Promise => { - // const { registry, isForeignAssetsTransfer, isLiquidTokenTransfer, api } = opts; + const { registry, isForeignAssetsTransfer, api } = opts; const sortedAndDedupedMultiAssets = await createSystemToBridgeAssets( - // api, + api, amounts, - // specName, + specName, assets, - // registry, + registry, xcmVersion, - // isForeignAssetsTransfer, + isForeignAssetsTransfer, // isLiquidTokenTransfer, ); @@ -175,18 +177,18 @@ export const SystemToBridge: ICreateXcmType = { assetIds, amounts, xcmVersion, - // isForeignAssetsTransfer, + isForeignAssetsTransfer, // isLiquidTokenTransfer, } = opts; if (xcmVersion && xcmVersion === 3 && specName && amounts && assetIds && paysWithFeeDest) { const multiAssets = await createSystemToBridgeAssets( - // api, + api, normalizeArrToStr(amounts), - // specName, + specName, assetIds, - // registry, + registry, xcmVersion, - // isForeignAssetsTransfer, + isForeignAssetsTransfer, // isLiquidTokenTransfer, ); @@ -229,18 +231,18 @@ export const SystemToBridge: ICreateXcmType = { * @param isLiquidTokenTransfer Whether this transfer is a liquid pool assets transfer. */ export const createSystemToBridgeAssets = async ( - // api: ApiPromise, + api: ApiPromise, amounts: string[], - // specName: string, + specName: string, assets: string[], - // registry: Registry, + registry: Registry, xcmVersion: number, - // isForeignAssetsTransfer: boolean, + isForeignAssetsTransfer: boolean, // isLiquidTokenTransfer: boolean, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType; - // const bridgeChainId = registry.lookupChainIdBySpecName(specName); + const systemChainId = registry.lookupChainIdBySpecName(specName); // if (!assetDestIsBridge(assets)) { // throw new BaseError( @@ -253,8 +255,16 @@ export const createSystemToBridgeAssets = async ( let assetId: string = assets[i]; const amount = amounts[i]; - let assetLocation = resolveMultiLocation(assetId, xcmVersion); - console.log('CONCRETE MULTILOCATION', assetLocation); + const { tokens } = registry.currentRelayRegistry[systemChainId]; + + const isValidInt = validateNumber(assetId); + const isRelayNative = isRelayNativeAsset(tokens, assetId); + + if (!isRelayNative && !isValidInt) { + assetId = await getAssetId(api, registry, assetId, specName, xcmVersion, isForeignAssetsTransfer); + } + + const assetLocation = resolveMultiLocation(assetId, xcmVersion); if (xcmVersion < 4) { multiAsset = { diff --git a/src/createXcmTypes/SystemToPara.spec.ts b/src/createXcmTypes/SystemToPara.spec.ts index e9ce193b..3ee49144 100644 --- a/src/createXcmTypes/SystemToPara.spec.ts +++ b/src/createXcmTypes/SystemToPara.spec.ts @@ -204,7 +204,7 @@ describe('SystemToPara XcmVersioned Generation', () => { { id: { Concrete: { - Parents: 0, + parents: 0, interior: { X2: [{ PalletInstance: '50' }, { GeneralIndex: '1' }], }, diff --git a/src/createXcmTypes/index.ts b/src/createXcmTypes/index.ts index 149e5d8c..4d4121b6 100644 --- a/src/createXcmTypes/index.ts +++ b/src/createXcmTypes/index.ts @@ -6,10 +6,10 @@ import { ParaToRelay } from './ParaToRelay'; import { ParaToSystem } from './ParaToSystem'; import { RelayToPara } from './RelayToPara'; import { RelayToSystem } from './RelayToSystem'; +import { SystemToBridge } from './SystemToBridge'; import { SystemToPara } from './SystemToPara'; import { SystemToRelay } from './SystemToRelay'; import { SystemToSystem } from './SystemToSystem'; -import { SystemToBridge } from './SystemToBridge'; import { ICreateXcmType } from './types'; type ICreateXcmTypeLookup = { diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index 80a8a9e0..3d05165d 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -6,18 +6,19 @@ import type { AnyJson } from '@polkadot/types/types'; import type { Registry } from '../registry'; import type { RequireOnlyOne } from '../types'; - -export type InteriorKeyValue = RequireOnlyOne | XcmV4JunctionDestBeneficiary[] | null; +export type InteriorValue = RequireOnlyOne | XcmV4JunctionDestBeneficiary[] | null; export type XcmDestBeneficiary = { [x: string]: { parents: number; - interior: { - [x: string]: InteriorKeyValue - }; + interior: InteriorKey; }; }; +export type InteriorKey = { + [x: string]: InteriorValue; +}; + export type XcmJunctionDestBeneficiary = { AccountId32: { network?: string; @@ -31,8 +32,8 @@ export type XcmJunctionDestBeneficiary = { GlobalConsensus: string | AnyJson; }; -export type XcmV4JunctionDestBeneficiary = - { +export type XcmV4JunctionDestBeneficiary = + | { AccountId32: { network?: string; id: string; @@ -48,8 +49,8 @@ export type XcmV4JunctionDestBeneficiary = }; } | { - GlobalConsensus: string | AnyJson; - }; + GlobalConsensus: string | AnyJson; + }; export type XcmV2MultiLocation = { parents: number; @@ -175,6 +176,8 @@ export type XcmV4JunctionBase = { GlobalConsensus: string | AnyJson; }; +export type UnionJunction = XcmV4Junction | XcmV3Junction | XcmV2Junction; + export type UnionXcmMultiLocation = XcmV4Location | XcmV3MultiLocation | XcmV2MultiLocation; export type UnionXcmMultiAssets = XcmV2MultiAssets | XcmV3MultiAssets | XcmV4Assets; diff --git a/src/createXcmTypes/util/assetDestIsBridge.spec.ts b/src/createXcmTypes/util/assetDestIsBridge.spec.ts index 99b43061..a1acac1a 100644 --- a/src/createXcmTypes/util/assetDestIsBridge.spec.ts +++ b/src/createXcmTypes/util/assetDestIsBridge.spec.ts @@ -8,13 +8,15 @@ describe('assetDestIsBridge', () => { expect(result).toEqual(false); }); - it('Should correctly return false for a non global consensus assetId location', () => { + it('Should correctly return false for a non global consensus assetId location', () => { const result = assetDestIsBridge([`{"parents":"1","interior":"Here"}}`]); expect(result).toEqual(false); }); it('Should correctly return true for an Ethereum assetId location containing a global consenus junction', () => { - const result = assetDestIsBridge([`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`]); + const result = assetDestIsBridge([ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ]); expect(result).toEqual(true); }); diff --git a/src/createXcmTypes/util/chainDestIsBridge.spec.ts b/src/createXcmTypes/util/chainDestIsBridge.spec.ts index e03d505b..d593701d 100644 --- a/src/createXcmTypes/util/chainDestIsBridge.spec.ts +++ b/src/createXcmTypes/util/chainDestIsBridge.spec.ts @@ -1,20 +1,20 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import { chainDestIsBridge } from "./chainDestIsBridge"; +import { chainDestIsBridge } from './chainDestIsBridge'; describe('chainDestIsBridge', () => { - it('Should correctly return true for a GlobalConsensus destination location', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + it('Should correctly return true for a GlobalConsensus destination location', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; - const result = chainDestIsBridge(destLocation); + const result = chainDestIsBridge(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"}}}`; + 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 = chainDestIsBridge(destLocation); + const result = chainDestIsBridge(destLocation); - expect(result).toEqual(false); - }); -}) \ No newline at end of file + expect(result).toEqual(false); + }); +}); diff --git a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts index a6784389..6eb828e1 100644 --- a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts +++ b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts @@ -15,13 +15,17 @@ export const foreignAssetsMultiLocationExists = async ( ): Promise => { try { const rawMultiLocation = JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation; - const foreignAsset = await assetHubApi.query.foreignAssets.asset(JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation); - console.log('FOREIGN ASSET', JSON.stringify(foreignAsset)); + const foreignAsset = await assetHubApi.query.foreignAssets.asset( + JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation, + ); + console.log('FOREIGN ASSET IS', JSON.stringify(foreignAsset)); + console.log('LENGTH', foreignAsset.toString().length > 0); // check if foreign asset exists if (foreignAsset.toString().length > 0) { const foreignAssetMetadata = (await assetHubApi.query.foreignAssets.metadata(rawMultiLocation)).toHuman(); + console.log('DOES METADATA EXIST', JSON.stringify(foreignAssetMetadata)); if (foreignAssetMetadata) { const metadata = foreignAssetMetadata as AssetMetadata; const assetSymbol = metadata.symbol; diff --git a/src/createXcmTypes/util/getAssetId.ts b/src/createXcmTypes/util/getAssetId.ts index 2e8bf175..2e2329a5 100644 --- a/src/createXcmTypes/util/getAssetId.ts +++ b/src/createXcmTypes/util/getAssetId.ts @@ -30,12 +30,10 @@ export const getAssetId = async ( xcmVersion: number, isForeignAssetsTransfer?: boolean, ): Promise => { - console.log("IM REACHED"); const currentChainId = registry.lookupChainIdBySpecName(specName); const assetIsValidInt = validateNumber(asset); const isParachain = new BN(currentChainId).gte(new BN(2000)); - console.log("IM REACHED ALSO??"); // if assets pallet, check the cache and return the cached assetId if found if (!isForeignAssetsTransfer) { const cachedAsset = registry.cacheLookupAsset(asset); @@ -55,7 +53,6 @@ export const getAssetId = async ( throw new BaseError(`${specName} has no associated token symbol ${asset}`, BaseErrorsEnum.InvalidAsset); } } - console.log("IM REACHED AS WELL?"); // check number assetId in registry if (assetIsValidInt) { // if assetId index is valid, return the assetId @@ -74,8 +71,6 @@ export const getAssetId = async ( } } - console.log("THIS ALSO?"); - let assetId = ''; const isAssetHub = currentChainId === ASSET_HUB_CHAIN_ID; @@ -86,7 +81,6 @@ export const getAssetId = async ( if (multiLocationIsInRegistry) { assetId = asset; } else { - console.log('ARE WE REACHING THIS'); const isValidForeignAsset = await foreignAssetsMultiLocationExists(api, registry, asset); if (!isValidForeignAsset) { diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts index a7f89b78..c386f600 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts @@ -1,62 +1,66 @@ // Copyright 2024 Parity Technologies (UK) Ltd. +import { InteriorValue } from '../types'; import { getGlobalConsensusDestFromAssetLocation } from './getGlobalConsensusDestFromAssetLocation'; -import { InteriorKeyValue } from '../types'; describe('getGlobalConsensusDestFromAssetLocation', () => { - it('Should correctly retrieve the global consensus dest based on the asset location for Polkadot', () => { - const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; - const xcmVersion = 4; - - const expected: InteriorKeyValue = { - GlobalConsensus: 'Polkadot' - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the asset location for Kusama', () => { - const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; - const xcmVersion = 3; - const expected: InteriorKeyValue = { - GlobalConsensus: 'Kusama' - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the asset location for Ethereum', () => { - const assetLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; - const xcmVersion = 4; - - const expected: InteriorKeyValue = { - GlobalConsensus: { - Ethereum: { - chainId: '11155111' - } - } - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly throw an error when an assetLocation is provided that does not contain a GlobalConsensus destination junction value', () => { - const assetLocationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; - const xcmVersion = 3; - - const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(err).toThrow(`Bridge transaction asset location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`); - }); - it('Should correctly throw an error when an assetLocation is provided that does not contain a valid GlobalConsensus at the 0 index', () => { - const assetLocationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; - const xcmVersion = 4; - - const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(err).toThrow(`Bridge transaction asset location interior {"X2":[{"Parachain":"2030\"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`); - }); -}); \ No newline at end of file + it('Should correctly retrieve the global consensus dest based on the asset location for Polkadot', () => { + const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; + const xcmVersion = 4; + + const expected: InteriorValue = { + GlobalConsensus: 'Polkadot', + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the asset location for Kusama', () => { + const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + const xcmVersion = 3; + const expected: InteriorValue = { + GlobalConsensus: 'Kusama', + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the asset location for Ethereum', () => { + const assetLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + const xcmVersion = 4; + + const expected: InteriorValue = { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }; + + const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly throw an error when an assetLocation is provided that does not contain a GlobalConsensus destination junction value', () => { + const assetLocationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; + const xcmVersion = 3; + + const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(err).toThrow( + `Bridge transaction asset location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`, + ); + }); + it('Should correctly throw an error when an assetLocation is provided that does not contain a valid GlobalConsensus at the 0 index', () => { + const assetLocationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; + const xcmVersion = 4; + + const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); + + expect(err).toThrow( + `Bridge transaction asset location interior {"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`, + ); + }); +}); diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts index 49d86f0d..d42c4147 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts @@ -1,38 +1,43 @@ // Copyright 2024 Parity Technologies (UK) Ltd. import type { AnyJson } from '@polkadot/types/types'; -import { UnionXcmMultiLocation, InteriorKeyValue } from "../types"; -import { BaseError, BaseErrorsEnum } from '../../errors'; -export const getGlobalConsensusDestFromAssetLocation = (assetLocationStr: string, xcmVersion: number): InteriorKeyValue => { - if (!assetLocationStr.toLowerCase().includes('globalconsensus')) { - throw new BaseError( - `Bridge transaction asset location ${assetLocationStr} does not contain a GlobalConsensus Junction`, - BaseErrorsEnum.InternalError, - ); - } +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { InteriorKey, InteriorValue, UnionXcmMultiLocation } from '../types'; - const assetLocation = (JSON.parse(assetLocationStr) as UnionXcmMultiLocation); - let globalConsensusDest: AnyJson | undefined; +export const getGlobalConsensusDestFromAssetLocation = ( + assetLocationStr: string, + xcmVersion: number, +): InteriorValue => { + if (!assetLocationStr.toLowerCase().includes('globalconsensus')) { + throw new BaseError( + `Bridge transaction asset location ${assetLocationStr} does not contain a GlobalConsensus Junction`, + BaseErrorsEnum.InternalError, + ); + } - if (assetLocation.interior.X1) { - globalConsensusDest = assetLocation.interior.X1; - } else { - const interiorJunctionKey = Object.keys(assetLocation.interior)[0]; - globalConsensusDest = assetLocation.interior[interiorJunctionKey][0]; + const assetLocation = JSON.parse(assetLocationStr) as UnionXcmMultiLocation; + let globalConsensusDest: AnyJson | undefined; - if (!JSON.stringify(globalConsensusDest).toLowerCase().includes('globalconsensus')) { - throw new BaseError( - `Bridge transaction asset location interior ${JSON.stringify(assetLocation.interior)} does not contain a GlobalConsensus Junction in the first index`, - BaseErrorsEnum.InternalError, - ); - } - } + if (assetLocation.interior.X1) { + globalConsensusDest = assetLocation.interior.X1; + } else { + const interiorJunctionKey = Object.keys(assetLocation.interior)[0]; + globalConsensusDest = (assetLocation.interior[interiorJunctionKey] as InteriorKey)[0]; - if (xcmVersion < 4) { - return globalConsensusDest as InteriorKeyValue; - } else { - return globalConsensusDest as InteriorKeyValue; - } + if (!JSON.stringify(globalConsensusDest).toLowerCase().includes('globalconsensus')) { + throw new BaseError( + `Bridge transaction asset location interior ${JSON.stringify( + assetLocation.interior, + )} does not contain a GlobalConsensus Junction in the first index`, + BaseErrorsEnum.InternalError, + ); + } + } -} \ No newline at end of file + if (xcmVersion < 4) { + return globalConsensusDest as InteriorValue; + } else { + return globalConsensusDest as InteriorValue; + } +}; diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts index 9b993efe..4cea308f 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts @@ -3,32 +3,34 @@ import { getGlobalConsensusSystemName } from './getGlobalConsensusSystemName'; describe('getGlobalConsensusSystemName', () => { - it('Should correctly return the consensus system name for Polkadot', () => { - const destLocation = `{"parents":"2","interior":{"X1":"Polkadot"}}}`; + it('Should correctly return the consensus system name for Polkadot', () => { + const destLocation = `{"parents":"2","interior":{"X1":"Polkadot"}}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('polkadot'); - }); - it('Should correctly return the consensus system name for Kusama', () => { - const destLocation = `{"parents":"2","interior":{"X1":"Kusama"}}}`; + expect(result).toEqual('polkadot'); + }); + it('Should correctly return the consensus system name for Kusama', () => { + const destLocation = `{"parents":"2","interior":{"X1":"Kusama"}}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('kusama'); - }); - it('Should correctly return the consensus system name for Ethereum', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + expect(result).toEqual('kusama'); + }); + it('Should correctly return the consensus system name for Ethereum', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('ethereum'); - }); - it('Should correctly throw an error when no valid consensus system name is found', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`; + expect(result).toEqual('ethereum'); + }); + it('Should correctly throw an error when no valid consensus system name is found', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`; - const err = () => getGlobalConsensusSystemName(destLocation); + const err = () => getGlobalConsensusSystemName(destLocation); - expect(err).toThrow(`No known consensus system found for location {"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`); - }); -}) \ No newline at end of file + expect(err).toThrow( + `No known consensus system found for location {"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`, + ); + }); +}); diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts index a7b649db..bd17818d 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts @@ -1,17 +1,17 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import { KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES } from "../../consts"; -import { BaseError, BaseErrorsEnum } from "../../errors"; +import { KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES } from '../../consts'; +import { BaseError, BaseErrorsEnum } from '../../errors'; export const getGlobalConsensusSystemName = (destLocation: string): string => { - for (const systemName of KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES) { - if (destLocation.toLowerCase().includes(systemName)) { - return systemName; - } - } + for (const systemName of KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES) { + if (destLocation.toLowerCase().includes(systemName)) { + return systemName; + } + } - throw new BaseError( - `No known consensus system found for location ${destLocation}`, - BaseErrorsEnum.UnknownConsensusSystem - ); -} \ No newline at end of file + throw new BaseError( + `No known consensus system found for location ${destLocation}`, + BaseErrorsEnum.UnknownConsensusSystem, + ); +}; diff --git a/src/createXcmTypes/util/isParachain.ts b/src/createXcmTypes/util/isParachain.ts index 84c2576f..a9adb692 100644 --- a/src/createXcmTypes/util/isParachain.ts +++ b/src/createXcmTypes/util/isParachain.ts @@ -1,5 +1,6 @@ // Copyright 2023 Parity Technologies (UK) Ltd. import BN from 'bn.js'; + import { validateNumber } from '../../validate'; /** diff --git a/src/createXcmTypes/util/isSystemChain.ts b/src/createXcmTypes/util/isSystemChain.ts index fa5cf0c1..bd913dcb 100644 --- a/src/createXcmTypes/util/isSystemChain.ts +++ b/src/createXcmTypes/util/isSystemChain.ts @@ -1,5 +1,6 @@ // Copyright 2023 Parity Technologies (UK) Ltd. import BN from 'bn.js'; + import { validateNumber } from '../../validate'; /** diff --git a/src/createXcmTypes/util/sortAssetsAscending.ts b/src/createXcmTypes/util/sortAssetsAscending.ts index 11ba6b3a..c2f2fb4f 100644 --- a/src/createXcmTypes/util/sortAssetsAscending.ts +++ b/src/createXcmTypes/util/sortAssetsAscending.ts @@ -11,11 +11,9 @@ import { validateNumber } from '../../validate'; import type { FungibleObjAssetType, FungibleStrAssetType, - XcmV2Junction, + UnionJunction, XcmV2Junctions, - XcmV3Junction, XcmV3Junctions, - XcmV4Junction, XcmV4Junctions, } from '../types'; @@ -229,8 +227,6 @@ const getSameJunctionMultiLocationSortOrder = ( return sortOrder; }; -type UnionJunction = XcmV4Junction | XcmV3Junction | XcmV2Junction; - type MultiLocationJunctions = | [UnionJunction, UnionJunction] | [UnionJunction, UnionJunction, UnionJunction] diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 55d49300..cd486c14 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -924,14 +924,12 @@ export const checkAssetIdsAreOfSameAssetIdType = (assetIds: string[]) => { * @param xcmDirection * @param xcmVersion */ -export const checkXcmVersionIsValidForSystemToBridge = ( - xcmVersion: number, -) => { - if ( - xcmVersion && - xcmVersion < 3 - ) { - throw new BaseError('SystemToBridge transactions require XCM version 3 or greater', BaseErrorsEnum.InvalidXcmVersion); +export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { + if (xcmVersion && xcmVersion < 3) { + throw new BaseError( + 'SystemToBridge transactions require XCM version 3 or greater', + BaseErrorsEnum.InvalidXcmVersion, + ); } }; @@ -1141,7 +1139,6 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch if (direction === Direction.SystemToSystem) { if (isForeignAssetsTransfer) { - checkAssetsAmountMatch(assetIds, amounts); checkMultiLocationsContainOnlyNativeOrForeignAssetsOfDestChain(direction, destChainId, assetIds); } diff --git a/src/index.ts b/src/index.ts index 674a890c..406c8285 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,61 +3,3 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; - -// import { ApiPromise, WsProvider } from '@polkadot/api'; - -// import { AssetTransferApi } from './AssetTransferApi'; - -// const main = async () => { -// // const specName = 'bridge-hub-kusama'; -// // const specname = 'statemine'; -// // const provider = new WsProvider(`wss://kusama-asset-hub-rpc.polkadot.io`); -// // const provider = new WsProvider(`wss://statemine-rpc.polkadot.io`); -// // const provider = new WsProvider(`wss://kusama.api.encointer.org`); -// // const provider = new WsProvider(`wss://westend-asset-hub-rpc.polkadot.io`); -// // const provider = new WsProvider(`wss://wss.api.moonbeam.network`); -// // const provider = new WsProvider(`wss://sys.ibp.network/collectives-westend`); -// // 'wss://moonriver.api.onfinality.io/public-ws' -// const provider = new WsProvider( -// 'wss://rococo-asset-hub-rpc.polkadot.io', -// // `wss://westend-rpc.polkadot.io`, -// // `wss://moonriver.api.onfinality.io/public-ws` -// // `wss://bifrost-rpc.liebi.com/ws` -// // `wss://rpc.shiden.astar.network` -// ); - -// const api = await ApiPromise.create({ provider }); - -// await api.isReady; - -// const assetTransferApi = new AssetTransferApi(api, 'asset-hub-rococo', 4); - -// const payload = await assetTransferApi.createTransferTransaction( -// 'ethereum-sepolia', -// '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', -// // ['0xfff9976782d46cc05630d1f6ebab18b2324d6b14'], -// [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], -// ['1000000000000000000'], -// { -// format: 'payload', -// xcmVersion: 4, -// isLimited: true, -// sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', -// }, -// ); - -// console.log('payload', JSON.stringify(payload)); - -// const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); -// console.log('decodedPayload', decodedPayload); - -// const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { -// version: 4, -// }); - -// console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); -// const payloadJSON = payloadExtrinsic.method.toJSON(); -// console.log('payload json', payloadJSON); -// }; - -// main(); diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index f89082a9..1c0d39fe 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -228,6 +228,37 @@ describe('AssetTransferApi Integration Tests', () => { }); }); }); + describe('SystemToBridge', () => { + // const bridgeBaseSystemCreateTx = async ( + // ataAPI: AssetTransferApi, + // format: T, + // isLimited: boolean, + // xcmVersion: number, + // refTime?: string, + // proofSize?: string, + // ): Promise> => { + // return await ataAPI.createTransferTransaction( + // `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // Since this is not `0` we know this is to a parachain + // '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + // [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], + // ['1000000000'], + // { + // format, + // isLimited, + // weightLimit: { + // refTime, + // proofSize, + // }, + // xcmVersion, + // sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', + // }, + // ); + // }; + + describe('V4', () => { + // TODO + }); + }); describe('SystemToPara', () => { const foreignBaseSystemCreateTx = async ( ataAPI: AssetTransferApi, diff --git a/src/registry/Registry.ts b/src/registry/Registry.ts index 2184c2b3..9f16572e 100644 --- a/src/registry/Registry.ts +++ b/src/registry/Registry.ts @@ -242,10 +242,7 @@ export class Registry { */ public lookupParachainInfo(id: string): ExpandedChainInfoKeys[] { const chainIds = Object.keys(this.currentRelayRegistry); - console.log('CHAIN IDS', chainIds); - console.log('ID ARG', id); if (chainIds.includes(id)) { - console.log('ID IS IN FACT INCLUDED'); return [Object.assign({}, this.currentRelayRegistry[id], { chainId: id })]; } return []; diff --git a/src/registry/findRelayChain.spec.ts b/src/registry/findRelayChain.spec.ts index de804a0a..fca9bfc9 100644 --- a/src/registry/findRelayChain.spec.ts +++ b/src/registry/findRelayChain.spec.ts @@ -25,7 +25,6 @@ describe('findRelayChain', () => { const findWestend = findRelayChain('asset-hub-westend', registry); const findRococo = findRelayChain('asset-hub-rococo', registry, 'Rococo Asset Hub'); - expect(findPolkadot).toEqual('polkadot'); expect(findKusama).toEqual('kusama'); expect(findWestend).toEqual('westend'); diff --git a/src/registry/findRelayChain.ts b/src/registry/findRelayChain.ts index 275ec985..39ec6fb6 100644 --- a/src/registry/findRelayChain.ts +++ b/src/registry/findRelayChain.ts @@ -16,7 +16,11 @@ import type { ChainInfoKeys, ChainInfoRegistry, RelayChains } from './types'; * @param registry The registry to search * @param chainName optional chain name for cases where more than one chain share a specName */ -export const findRelayChain = (specName: string, registry: ChainInfoRegistry, chainName?: string): RelayChains => { +export const findRelayChain = ( + specName: string, + registry: ChainInfoRegistry, + chainName?: string, +): RelayChains => { const polkadotChains = Object.keys(registry.polkadot).map((val) => registry.polkadot[val].specName); if (polkadotChains.includes(specName.toLowerCase()) || POLKADOT_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase())) return 'polkadot'; @@ -24,9 +28,9 @@ export const findRelayChain = (specName: string, registry: ChainInfoRegistry registry.rococo[val].specName); if ( - rococoChains.includes(specName.toLowerCase()) || + rococoChains.includes(specName.toLowerCase()) || ROCOCO_ASSET_HUB_SPEC_NAME.includes(specName.toLowerCase()) || - specName.toLowerCase() === 'statemine' && chainName && chainName.toLowerCase().includes('rococo') + (specName.toLowerCase() === 'statemine' && chainName && chainName.toLowerCase().includes('rococo')) ) { return 'rococo'; } @@ -39,6 +43,5 @@ export const findRelayChain = (specName: string, registry: ChainInfoRegistry> => Promise.resolve().then(() => { const assets: Map = new Map(); - const assetsMutliLocation = JSON.stringify(asset); + const assetMultiLocation = JSON.stringify(asset); - const multiLocationStr = '{"parents":"1","interior":{"X2": [{"Parachain":"1103"}, {"GeneralIndex": "0"}]}}'; + const multiLocationStr = '{"parents":"1","interior":{"X2":[{"Parachain":"1103"},{"GeneralIndex":"0"}]}}'; const multiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); assets.set(multiLocationStr, multiLocationAsset); const bridgedRococoMultiLocation1Str = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}'; - const bridgedRococoMultiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); + const bridgedRococoMultiLocationAsset = mockSystemApi.registry.createType( + 'PalletAssetsAssetDetails', + multiLocationAssetInfo, + ); assets.set(bridgedRococoMultiLocation1Str, bridgedRococoMultiLocationAsset); const bridgedEthereumMultiLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; - const bridgedEthereumMultiLocationAsset = mockSystemApi.registry.createType('PalletAssetsAssetDetails', multiLocationAssetInfo); + const bridgedEthereumMultiLocationAsset = mockSystemApi.registry.createType( + 'PalletAssetsAssetDetails', + multiLocationAssetInfo, + ); assets.set(bridgedEthereumMultiLocationStr, bridgedEthereumMultiLocationAsset); - const maybeAsset = assets.has(assetsMutliLocation) ? assets.get(JSON.stringify(assetsMutliLocation)) : undefined; + const maybeAsset = assets.has(assetMultiLocation) ? assets.get(assetMultiLocation) : undefined; if (maybeAsset) { return new Option(createWestmintRegistry(1007000), 'PalletAssetsAssetDetails', maybeAsset); @@ -212,7 +218,7 @@ const foreignAsset = (asset: UnionXcmMultiLocation): Promise => Promise.resolve().then(() => { const metadata: Map = new Map(); - const assetIdMultiLocation = mockSystemApi.registry.createType('XcmV2MultiLocation', assetId); + const assetIdMultiLocation = JSON.stringify(assetId); const rawTnkrMultiLocationMetadata = { deposit: mockSystemApi.registry.createType('u128', 6693666633), @@ -227,15 +233,10 @@ const foreignAssetsMetadata = (assetId: UnionXcmMultiLocation): Promise Date: Thu, 14 Mar 2024 17:53:17 -0400 Subject: [PATCH 04/44] remove unused const --- src/consts.ts | 1 - src/registry/Registry.ts | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/consts.ts b/src/consts.ts index 5c0fbe3b..ede99132 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -37,7 +37,6 @@ export const POLKADOT_ASSET_HUB_SPEC_NAMES = ['statemint', 'asset-hub-polkadot'] export const KUSAMA_ASSET_HUB_SPEC_NAMES = ['statemine', 'asset-hub-kusama']; export const WESTEND_ASSET_HUB_SPEC_NAMES = ['westmint', 'asset-hub-westend']; export const ROCOCO_ASSET_HUB_SPEC_NAME = ['asset-hub-rococo']; -export const ETHEREUM_CHAIN_NAMES = ['sepolia', 'ethereum']; /** * The default xcm version to construct a xcm message. diff --git a/src/registry/Registry.ts b/src/registry/Registry.ts index 9f16572e..67b93cd4 100644 --- a/src/registry/Registry.ts +++ b/src/registry/Registry.ts @@ -4,7 +4,6 @@ import registry from '@substrate/asset-transfer-api-registry'; import { ASSET_HUB_CHAIN_ID, - ETHEREUM_CHAIN_NAMES, KUSAMA_ASSET_HUB_SPEC_NAMES, POLKADOT_ASSET_HUB_SPEC_NAMES, ROCOCO_ASSET_HUB_SPEC_NAME, @@ -258,10 +257,6 @@ export class Registry { return this.specNameToIdCache.get(specName) as string; } - if (ETHEREUM_CHAIN_NAMES.includes(specName.toLowerCase())) { - this.specNameToIdCache.set(specName, '1000'); - } - if ( POLKADOT_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase()) || KUSAMA_ASSET_HUB_SPEC_NAMES.includes(specName.toLowerCase()) || From b10f6bce104e5563290299a1c18ad54b8e93534a Mon Sep 17 00:00:00 2001 From: marshacb Date: Mon, 18 Mar 2024 22:52:07 -0400 Subject: [PATCH 05/44] update resolveMultilocation to account for XCM V4 X1 junction asset locations add SystemToBridge integration tests --- .../local/assetHubEQDForeignAssetsTransfer.ts | 3 +- .../reserve/assetHubTrapistTransferAssets.ts | 49 +++++ src/AssetTransferApi.ts | 1 - .../polkadotXcm/transferAssets.ts | 2 +- src/createXcmTypes/ParaToPara.ts | 3 +- src/createXcmTypes/ParaToSystem.ts | 3 +- src/createXcmTypes/SystemToBridge.spec.ts | 10 +- src/createXcmTypes/SystemToBridge.ts | 37 +--- src/createXcmTypes/types.ts | 6 +- .../util/foreignAssetsMultiLocationExists.ts | 3 - ...obalConsensusDestFromAssetLocation.spec.ts | 66 ------- ...getGlobalConsensusDestFromLocation.spec.ts | 66 +++++++ ... => getGlobalConsensusDestFromLocation.ts} | 13 +- src/errors/checkXcmTxInputs.ts | 1 - .../AssetsTransferApi.spec.ts | 169 +++++++++++++++--- .../adjustedMockSystemApiV1007000.ts | 7 + src/util/resolveMultiLocation.spec.ts | 6 + src/util/resolveMultiLocation.ts | 28 +-- 18 files changed, 310 insertions(+), 163 deletions(-) create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts delete mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts create mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts rename src/createXcmTypes/util/{getGlobalConsensusDestFromAssetLocation.ts => getGlobalConsensusDestFromLocation.ts} (69%) diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts index 4e07787c..87c847bd 100644 --- a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts +++ b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts @@ -21,7 +21,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - '1000', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer + '2004', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ '{"parents":"1","interior":{"X2":[{"Parachain":"2011"},{"GeneralKey":{"length":"3","data":"0x6571640000000000000000000000000000000000000000000000000000000000"}}]}}', @@ -29,6 +29,7 @@ const main = async () => { ['1000000000000'], { format: 'call', + xcmVersion: 3, }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts new file mode 100644 index 00000000..d9146169 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts @@ -0,0 +1,49 @@ +// [{"parents":"1","interior":{"X1":{"Parachain":"1,836"}}}] +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send HOP (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"1,836"}}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, the `isLimited` option is set to true and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * + * NOTE: When `isLimited` is true it will use the `limited` version of the either `reserveAssetTransfer`, or `teleportAssets`. + */ +const main = async () => { + const { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + '2004', // Note: Parachain ID 1836 (Equilibrium) is identical to the asset location's `Parachain` Id, making this a `teleportAssets` call + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + ['{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}'], + ['1000000000000'], + { + format: 'call', + isLimited: true, + xcmVersion: 4, + }, + ); + + 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/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 937ba632..76689e7e 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -883,7 +883,6 @@ export class AssetTransferApi { localTxChainType: LocalTxChainType, opts: LocalTxOpts, ) { - console.log('IM HERE', localTxChainType); const { api, specName } = this; let assetId = assetIds[0]; const amount = amounts[0]; diff --git a/src/createXcmCalls/polkadotXcm/transferAssets.ts b/src/createXcmCalls/polkadotXcm/transferAssets.ts index b3141dfc..c7faceca 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssets.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssets.ts @@ -25,7 +25,7 @@ export const transferAssets = async ( const ext = api.tx[pallet].transferAssets; const typeCreator = createXcmTypes[direction]; const beneficiary = typeCreator.createBeneficiary(destAddr, xcmVersion); - const dest = typeCreator.createDest(destChainId, xcmVersion, assetIds); + const dest = typeCreator.createDest(destChainId, xcmVersion); const assets = await typeCreator.createAssets(normalizeArrToStr(amounts), xcmVersion, specName, assetIds, { registry, isForeignAssetsTransfer, diff --git a/src/createXcmTypes/ParaToPara.ts b/src/createXcmTypes/ParaToPara.ts index da7f09e6..f46340d2 100644 --- a/src/createXcmTypes/ParaToPara.ts +++ b/src/createXcmTypes/ParaToPara.ts @@ -29,6 +29,7 @@ import type { UnionXcmMultiLocation, XcmDestBeneficiary, XcmDestBeneficiaryXcAssets, + XcmV2MultiLocation, XcmV3MultiLocation, XcmV4Location, XcmWeight, @@ -397,7 +398,7 @@ export const ParaToPara: ICreateXcmType = { return { V2: { id: { - Concrete: paysWithFeeMultiLocation, + Concrete: paysWithFeeMultiLocation as XcmV2MultiLocation, }, }, }; diff --git a/src/createXcmTypes/ParaToSystem.ts b/src/createXcmTypes/ParaToSystem.ts index db1afea7..112c78f5 100644 --- a/src/createXcmTypes/ParaToSystem.ts +++ b/src/createXcmTypes/ParaToSystem.ts @@ -28,6 +28,7 @@ import type { UnionXcmMultiLocation, XcmDestBeneficiary, XcmDestBeneficiaryXcAssets, + XcmV2MultiLocation, XcmV3MultiLocation, XcmV4Location, XcmWeight, @@ -384,7 +385,7 @@ export const ParaToSystem: ICreateXcmType = { return { V2: { id: { - Concrete: paysWithFeeMultiLocation, + Concrete: paysWithFeeMultiLocation as XcmV2MultiLocation, }, }, }; diff --git a/src/createXcmTypes/SystemToBridge.spec.ts b/src/createXcmTypes/SystemToBridge.spec.ts index 911eacae..fd8b8b9b 100644 --- a/src/createXcmTypes/SystemToBridge.spec.ts +++ b/src/createXcmTypes/SystemToBridge.spec.ts @@ -94,10 +94,8 @@ describe('SystemToBridge', () => { }); describe('Destination', () => { it('Should work for V3', () => { - const assetIds = [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - ]; - const destination = SystemToBridge.createDest('100', 3, assetIds); + const destId = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + const destination = SystemToBridge.createDest(destId, 3); const expectedRes = { V3: { @@ -117,9 +115,9 @@ describe('SystemToBridge', () => { expect(destination).toStrictEqual(expectedRes); }); it('Should work for V4', () => { - const assetIds = [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`]; + const destId = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; - const destination = SystemToBridge.createDest('100', 4, assetIds); + const destination = SystemToBridge.createDest(destId, 4); const expectedRes = { V4: { diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index 98a93142..a8117f5e 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -18,19 +18,14 @@ import { FungibleStrMultiAsset, ICreateXcmType, UnionXcmMultiAssets, - // UnionXcmMultiLocation, XcmDestBeneficiary, XcmV4JunctionDestBeneficiary, XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; import { getAssetId } from './util/getAssetId'; -// import { assetDestIsBridge } from './util/assetDestIsBridge'; -import { getGlobalConsensusDestFromAssetLocation } from './util/getGlobalConsensusDestFromAssetLocation'; +import { getGlobalConsensusDestFromLocation } from './util/getGlobalConsensusDestFromLocation'; import { isRelayNativeAsset } from './util/isRelayNativeAsset'; -// import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; -// import { getAssetId } from './util/getAssetId'; -// import { isRelayNativeAsset } from './util/isRelayNativeAsset'; import { isSystemChain } from './util/isSystemChain'; import { sortAssetsAscending } from './util/sortAssetsAscending'; @@ -76,12 +71,8 @@ export const SystemToBridge: ICreateXcmType = { * @param destId The chainId of the destination. * @param xcmVersion The accepted xcm version. */ - createDest: (_: string, xcmVersion: number, assetIds?: string[]): XcmDestBeneficiary => { - if (!assetIds) { - throw new BaseError(`assetId arg must provided for Bridge transactions`); - } - - const destination = getGlobalConsensusDestFromAssetLocation(assetIds[0], xcmVersion); + createDest: (destId: string, xcmVersion: number): XcmDestBeneficiary => { + const destination = getGlobalConsensusDestFromLocation(destId, xcmVersion); if (xcmVersion === 3) { /** @@ -135,7 +126,6 @@ export const SystemToBridge: ICreateXcmType = { registry, xcmVersion, isForeignAssetsTransfer, - // isLiquidTokenTransfer, ); if (xcmVersion === 3) { @@ -170,16 +160,7 @@ export const SystemToBridge: ICreateXcmType = { * @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, - // isLiquidTokenTransfer, - } = opts; + const { registry, paysWithFeeDest, specName, assetIds, amounts, xcmVersion, isForeignAssetsTransfer } = opts; if (xcmVersion && xcmVersion === 3 && specName && amounts && assetIds && paysWithFeeDest) { const multiAssets = await createSystemToBridgeAssets( api, @@ -189,7 +170,6 @@ export const SystemToBridge: ICreateXcmType = { registry, xcmVersion, isForeignAssetsTransfer, - // isLiquidTokenTransfer, ); const systemChainId = registry.lookupChainIdBySpecName(specName); @@ -228,7 +208,6 @@ export const SystemToBridge: ICreateXcmType = { * @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. - * @param isLiquidTokenTransfer Whether this transfer is a liquid pool assets transfer. */ export const createSystemToBridgeAssets = async ( api: ApiPromise, @@ -238,19 +217,11 @@ export const createSystemToBridgeAssets = async ( registry: Registry, xcmVersion: number, isForeignAssetsTransfer: boolean, - // isLiquidTokenTransfer: boolean, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType; const systemChainId = registry.lookupChainIdBySpecName(specName); - // if (!assetDestIsBridge(assets)) { - // throw new BaseError( - // `specName ${specName} did not match a valid Ethereum chain ID. Found ID ${bridgeChainId}`, - // BaseErrorsEnum.InternalError, - // ); - // } - for (let i = 0; i < assets.length; i++) { let assetId: string = assets[i]; const amount = amounts[i]; diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index 3d05165d..89616188 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -142,7 +142,7 @@ export type XcmV4Location = { export interface XcmV4Junctions { Here: '' | null; - X1: XcmV4Junction; + X1: [XcmV4Junction]; X2: [XcmV4Junction, XcmV4Junction]; X3: [XcmV4Junction, XcmV4Junction, XcmV4Junction]; X4: [XcmV4Junction, XcmV4Junction, XcmV4Junction, XcmV4Junction]; @@ -176,7 +176,7 @@ export type XcmV4JunctionBase = { GlobalConsensus: string | AnyJson; }; -export type UnionJunction = XcmV4Junction | XcmV3Junction | XcmV2Junction; +export type UnionJunction = XcmV2Junction | XcmV3Junction | XcmV4Junction; export type UnionXcmMultiLocation = XcmV4Location | XcmV3MultiLocation | XcmV2MultiLocation; @@ -419,7 +419,7 @@ export interface CreateWeightLimitOpts { export interface ICreateXcmType { createBeneficiary: (accountId: string, xcmVersion: number) => XcmDestBeneficiary; - createDest: (destId: string, xcmVersion: number, assetIds?: string[]) => XcmDestBeneficiary; + createDest: (destId: string, xcmVersion: number) => XcmDestBeneficiary; createAssets: ( amounts: string[], xcmVersion: number, diff --git a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts index 6eb828e1..d79fb6c0 100644 --- a/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts +++ b/src/createXcmTypes/util/foreignAssetsMultiLocationExists.ts @@ -19,13 +19,10 @@ export const foreignAssetsMultiLocationExists = async ( JSON.parse(multilocationStr) as UnionXcAssetsMultiLocation, ); - console.log('FOREIGN ASSET IS', JSON.stringify(foreignAsset)); - console.log('LENGTH', foreignAsset.toString().length > 0); // check if foreign asset exists if (foreignAsset.toString().length > 0) { const foreignAssetMetadata = (await assetHubApi.query.foreignAssets.metadata(rawMultiLocation)).toHuman(); - console.log('DOES METADATA EXIST', JSON.stringify(foreignAssetMetadata)); if (foreignAssetMetadata) { const metadata = foreignAssetMetadata as AssetMetadata; const assetSymbol = metadata.symbol; diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts deleted file mode 100644 index c386f600..00000000 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import { InteriorValue } from '../types'; -import { getGlobalConsensusDestFromAssetLocation } from './getGlobalConsensusDestFromAssetLocation'; - -describe('getGlobalConsensusDestFromAssetLocation', () => { - it('Should correctly retrieve the global consensus dest based on the asset location for Polkadot', () => { - const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; - const xcmVersion = 4; - - const expected: InteriorValue = { - GlobalConsensus: 'Polkadot', - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the asset location for Kusama', () => { - const assetLocationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; - const xcmVersion = 3; - const expected: InteriorValue = { - GlobalConsensus: 'Kusama', - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the asset location for Ethereum', () => { - const assetLocationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; - const xcmVersion = 4; - - const expected: InteriorValue = { - GlobalConsensus: { - Ethereum: { - chainId: '11155111', - }, - }, - }; - - const result = getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(result).toEqual(expected); - }); - it('Should correctly throw an error when an assetLocation is provided that does not contain a GlobalConsensus destination junction value', () => { - const assetLocationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; - const xcmVersion = 3; - - const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(err).toThrow( - `Bridge transaction asset location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`, - ); - }); - it('Should correctly throw an error when an assetLocation is provided that does not contain a valid GlobalConsensus at the 0 index', () => { - const assetLocationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; - const xcmVersion = 4; - - const err = () => getGlobalConsensusDestFromAssetLocation(assetLocationStr, xcmVersion); - - expect(err).toThrow( - `Bridge transaction asset location interior {"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`, - ); - }); -}); diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts new file mode 100644 index 00000000..ed2e6f79 --- /dev/null +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts @@ -0,0 +1,66 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { InteriorValue } from '../types'; +import { getGlobalConsensusDestFromLocation } from './getGlobalConsensusDestFromLocation'; + +describe('getGlobalConsensusDestFromLocation', () => { + it('Should correctly retrieve the global consensus dest based on the location for Polkadot', () => { + const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; + const xcmVersion = 4; + + const expected: InteriorValue = { + GlobalConsensus: 'Polkadot', + }; + + const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the location for Kusama', () => { + const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + const xcmVersion = 3; + const expected: InteriorValue = { + GlobalConsensus: 'Kusama', + }; + + const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly retrieve the global consensus dest based on the location for Ethereum', () => { + const locationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + const xcmVersion = 4; + + const expected: InteriorValue = { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }; + + const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + + expect(result).toEqual(expected); + }); + it('Should correctly throw an error when a location is provided that does not contain a GlobalConsensus destination junction value', () => { + const locationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; + const xcmVersion = 3; + + const err = () => getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + + expect(err).toThrow( + `Bridge transaction location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`, + ); + }); + it('Should correctly throw an error when a location is provided that does not contain a valid GlobalConsensus at the 0 index', () => { + const locationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; + const xcmVersion = 4; + + const err = () => getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + + expect(err).toThrow( + `Bridge transaction location interior {"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`, + ); + }); +}); diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts similarity index 69% rename from src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts rename to src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts index d42c4147..0597056a 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromAssetLocation.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts @@ -5,18 +5,15 @@ import type { AnyJson } from '@polkadot/types/types'; import { BaseError, BaseErrorsEnum } from '../../errors'; import { InteriorKey, InteriorValue, UnionXcmMultiLocation } from '../types'; -export const getGlobalConsensusDestFromAssetLocation = ( - assetLocationStr: string, - xcmVersion: number, -): InteriorValue => { - if (!assetLocationStr.toLowerCase().includes('globalconsensus')) { +export const getGlobalConsensusDestFromLocation = (locationStr: string, xcmVersion: number): InteriorValue => { + if (!locationStr.toLowerCase().includes('globalconsensus')) { throw new BaseError( - `Bridge transaction asset location ${assetLocationStr} does not contain a GlobalConsensus Junction`, + `Bridge transaction location ${locationStr} does not contain a GlobalConsensus Junction`, BaseErrorsEnum.InternalError, ); } - const assetLocation = JSON.parse(assetLocationStr) as UnionXcmMultiLocation; + const assetLocation = JSON.parse(locationStr) as UnionXcmMultiLocation; let globalConsensusDest: AnyJson | undefined; if (assetLocation.interior.X1) { @@ -27,7 +24,7 @@ export const getGlobalConsensusDestFromAssetLocation = ( if (!JSON.stringify(globalConsensusDest).toLowerCase().includes('globalconsensus')) { throw new BaseError( - `Bridge transaction asset location interior ${JSON.stringify( + `Bridge transaction location interior ${JSON.stringify( assetLocation.interior, )} does not contain a GlobalConsensus Junction in the first index`, BaseErrorsEnum.InternalError, diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index cd486c14..301754f0 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -1150,7 +1150,6 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); checkXcmVersionIsValidForSystemToBridge(xcmVersion); - // check asset is ... } if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 1c0d39fe..3c9f557f 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -229,34 +229,151 @@ describe('AssetTransferApi Integration Tests', () => { }); }); describe('SystemToBridge', () => { - // const bridgeBaseSystemCreateTx = async ( - // ataAPI: AssetTransferApi, - // format: T, - // isLimited: boolean, - // xcmVersion: number, - // refTime?: string, - // proofSize?: string, - // ): Promise> => { - // return await ataAPI.createTransferTransaction( - // `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // Since this is not `0` we know this is to a parachain - // '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - // [`{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`], - // ['1000000000'], - // { - // format, - // isLimited, - // weightLimit: { - // refTime, - // proofSize, - // }, - // xcmVersion, - // sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', - // }, - // ); - // }; + const bridgeBaseSystemCreateTx = async ( + ataAPI: AssetTransferApi, + destination: string, + assetIds: string[], + format: T, + isLimited: boolean, + xcmVersion: number, + refTime?: string, + proofSize?: string, + ): Promise> => { + return await ataAPI.createTransferTransaction( + destination, + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds, + ['1000000000'], + { + format, + isLimited, + weightLimit: { + refTime, + proofSize, + }, + xcmVersion, + sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', + }, + ); + }; + + describe('V3', () => { + it('Should correctly build a transferAssets call for V3', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ], + 'call', + true, + 3, + '1000', + '2000', + ); + expect(res).toEqual({ + dest: 'ethereum', + origin: 'westmint', + direction: 'SystemToBridge', + format: 'call', + method: 'transferAssets', + tx: '0x1f0b03020109079edaa8020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee0000000001a10f411f', + xcmVersion: 3, + }); + }); + + it('Should correctly build a payload for a transferAssets for V3', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], + 'payload', + true, + 3, + '1000', + '2000', + ); + expect(res).toEqual({ + dest: 'polkadot', + origin: 'westmint', + direction: 'SystemToBridge', + format: 'payload', + method: 'transferAssets', + tx: '0x05011f0b03020109020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + xcmVersion: 3, + }); + }); + it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + 'submittable', + true, + 3, + '1000', + '2000', + ); + expect(res.tx.toRawType()).toEqual('Extrinsic'); + }); + }); describe('V4', () => { - // TODO + it('Should correctly build a `transferAssets` call extrinsic for V4', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], + 'call', + true, + 4, + '1000', + '2000', + ); + expect(res).toEqual({ + dest: 'polkadot', + origin: 'westmint', + direction: 'SystemToBridge', + format: 'call', + method: 'transferAssets', + tx: '0x1f0b04020109020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', + xcmVersion: 4, + }); + }); + it('Should correctly build a `transferAssets` payload for V4', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + 'payload', + true, + 4, + '1000', + '2000', + ); + expect(res).toEqual({ + dest: 'rococo', + origin: 'westmint', + direction: 'SystemToBridge', + format: 'payload', + method: 'transferAssets', + tx: '0x01011f0b04020109050400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + xcmVersion: 4, + }); + }); + it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { + const res = await bridgeBaseSystemCreateTx( + systemAssetsApiV100700, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + 'submittable', + true, + 4, + '1000', + '2000', + ); + expect(res.tx.toRawType()).toEqual('Extrinsic'); + }); }); }); describe('SystemToPara', () => { diff --git a/src/testHelpers/adjustedMockSystemApiV1007000.ts b/src/testHelpers/adjustedMockSystemApiV1007000.ts index 7b439755..fba470a9 100644 --- a/src/testHelpers/adjustedMockSystemApiV1007000.ts +++ b/src/testHelpers/adjustedMockSystemApiV1007000.ts @@ -199,6 +199,13 @@ const foreignAsset = (asset: UnionXcmMultiLocation): Promise { expect(resolveMultiLocation(str, 2)).toStrictEqual(exp); }); + it('Should correctly return a resolved V4 X1 location object given a correct value', () => { + const str = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; + const exp = { parents: '2', interior: { X1: [{ GlobalConsensus: 'Polkadot' }] } }; + + expect(resolveMultiLocation(str, 4)).toStrictEqual(exp); + }); it('Should correctly error when xcmVersion is less than 3 and the asset location contains a GlobalConsensus junction', () => { const str = `{"parents":1,"interior":{"x1":{"GlobalConsensus":"Kusama"}}}`; const err = () => resolveMultiLocation(str, 2); diff --git a/src/util/resolveMultiLocation.ts b/src/util/resolveMultiLocation.ts index fc3aad33..82e67cce 100644 --- a/src/util/resolveMultiLocation.ts +++ b/src/util/resolveMultiLocation.ts @@ -3,7 +3,7 @@ import type { AnyJson } from '@polkadot/types/types'; import { SUPPORTED_XCM_VERSIONS } from '../consts'; -import type { UnionXcmMultiLocation } from '../createXcmTypes/types'; +import type { UnionXcmMultiLocation, XcmV4Junction } from '../createXcmTypes/types'; import { BaseError, BaseErrorsEnum } from '../errors/BaseError'; import { sanitizeKeys } from './sanitizeKeys'; @@ -16,7 +16,8 @@ import { sanitizeKeys } from './sanitizeKeys'; */ export const resolveMultiLocation = (multiLocation: AnyJson, xcmVersion: number): UnionXcmMultiLocation => { const multiLocationStr = typeof multiLocation === 'string' ? multiLocation : JSON.stringify(multiLocation); - // Ensure we check this first since the main difference between v2, and v3 is `globalConsensus` + + // Ensure we check this first since the main difference between v2, and later versions is the `globalConsensus` junction const hasGlobalConsensus = multiLocationStr.includes('globalConsensus') || multiLocationStr.includes('GlobalConsensus'); if (xcmVersion < 3 && hasGlobalConsensus) { @@ -26,21 +27,24 @@ export const resolveMultiLocation = (multiLocation: AnyJson, xcmVersion: number) ); } - // const hasGeneralKey = multiLocationStr.includes('generalKey') || multiLocationStr.includes('GeneralKey'); - // if (xcmVersion != 2 && hasGeneralKey) { - // throw new BaseError( - // 'XcmVersion must be version 2 for MultiLocations that contain a GeneralKey junction.', - // BaseErrorsEnum.InvalidXcmVersion, - // ); - // } - if (!SUPPORTED_XCM_VERSIONS.includes(xcmVersion)) { throw new BaseError(`Invalid XcmVersion for mulitLocation construction`, BaseErrorsEnum.InternalError); } + let result = JSON.parse(multiLocationStr) as UnionXcmMultiLocation; + + if (xcmVersion > 3 && multiLocationStr.toLowerCase().includes('x1')) { + result = { + parents: result.parents, + interior: { + X1: [result.interior.X1 as XcmV4Junction], + }, + }; + } + if (!hasGlobalConsensus) { - return sanitizeKeys(JSON.parse(multiLocationStr) as UnionXcmMultiLocation); + return sanitizeKeys(result); } else { - return JSON.parse(multiLocationStr) as UnionXcmMultiLocation; + return result; } }; From c288c8a52ddaae949433ffd4596204386eb9ab3d Mon Sep 17 00:00:00 2001 From: marshacb Date: Mon, 18 Mar 2024 22:53:27 -0400 Subject: [PATCH 06/44] revert polkadot local transfer example changes --- .../local/assetHubEQDForeignAssetsTransfer.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts index 87c847bd..4e07787c 100644 --- a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts +++ b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts @@ -21,7 +21,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - '2004', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer + '1000', // NOTE: The destination id is `1000` and matches the origin chain making this a local transfer '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ '{"parents":"1","interior":{"X2":[{"Parachain":"2011"},{"GeneralKey":{"length":"3","data":"0x6571640000000000000000000000000000000000000000000000000000000000"}}]}}', @@ -29,7 +29,6 @@ const main = async () => { ['1000000000000'], { format: 'call', - xcmVersion: 3, }, ); From 56d8495c6d1b9d0596f7f929549ac1f3fca67276 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 19 Mar 2024 00:07:24 -0400 Subject: [PATCH 07/44] update dest address in rococo bridge example updated getGlobalConsensusSystemName to check X1 junction rather than entire string for valid consensus name added consensus name check to xcm tx input checks for system to bridge direction --- .../bridge/assetHubSnowbridgeETHToBridgeHub.ts | 2 +- src/createXcmTypes/util/assetDestIsBridge.ts | 2 +- .../util/getGlobalConsensusDestFromLocation.spec.ts | 2 +- .../util/getGlobalConsensusDestFromLocation.ts | 2 +- src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts | 4 ++-- src/createXcmTypes/util/getGlobalConsensusSystemName.ts | 5 ++++- src/errors/checkXcmTxInputs.ts | 2 ++ 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts index c11a1aa2..9b15bbf0 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts @@ -27,7 +27,7 @@ const main = async () => { try { callInfo = await assetApi.createTransferTransaction( `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, - '0xc4db7bcb733e117c0b34ac96354b10d47e84a006b9e7e66a229d174e8ff2a063', + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', [ `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], diff --git a/src/createXcmTypes/util/assetDestIsBridge.ts b/src/createXcmTypes/util/assetDestIsBridge.ts index 14f6bbb3..7ae80fcc 100644 --- a/src/createXcmTypes/util/assetDestIsBridge.ts +++ b/src/createXcmTypes/util/assetDestIsBridge.ts @@ -6,7 +6,7 @@ * @returns boolean */ export const assetDestIsBridge = (assetIds: string[]): boolean => { - if (assetIds.length === 0 || assetIds.length > 1) { + if (assetIds.length === 0) { return false; } diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts index ed2e6f79..3682f6f9 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts @@ -50,7 +50,7 @@ describe('getGlobalConsensusDestFromLocation', () => { const err = () => getGlobalConsensusDestFromLocation(locationStr, xcmVersion); expect(err).toThrow( - `Bridge transaction location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} does not contain a GlobalConsensus Junction`, + `Bridge transaction location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} must contain a valid GlobalConsensus Junction`, ); }); it('Should correctly throw an error when a location is provided that does not contain a valid GlobalConsensus at the 0 index', () => { diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts index 0597056a..ed3c1c3a 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts @@ -8,7 +8,7 @@ import { InteriorKey, InteriorValue, UnionXcmMultiLocation } from '../types'; export const getGlobalConsensusDestFromLocation = (locationStr: string, xcmVersion: number): InteriorValue => { if (!locationStr.toLowerCase().includes('globalconsensus')) { throw new BaseError( - `Bridge transaction location ${locationStr} does not contain a GlobalConsensus Junction`, + `Bridge transaction location ${locationStr} must contain a valid GlobalConsensus Junction`, BaseErrorsEnum.InternalError, ); } diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts index 4cea308f..edf44c51 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts @@ -4,14 +4,14 @@ import { getGlobalConsensusSystemName } from './getGlobalConsensusSystemName'; describe('getGlobalConsensusSystemName', () => { it('Should correctly return the consensus system name for Polkadot', () => { - const destLocation = `{"parents":"2","interior":{"X1":"Polkadot"}}}`; + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; const result = getGlobalConsensusSystemName(destLocation); expect(result).toEqual('polkadot'); }); it('Should correctly return the consensus system name for Kusama', () => { - const destLocation = `{"parents":"2","interior":{"X1":"Kusama"}}}`; + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; const result = getGlobalConsensusSystemName(destLocation); diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts index bd17818d..d01cc414 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts @@ -2,10 +2,13 @@ import { KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES } from '../../consts'; import { BaseError, BaseErrorsEnum } from '../../errors'; +import { UnionXcmMultiLocation } from '../types'; export const getGlobalConsensusSystemName = (destLocation: string): string => { + const location = JSON.parse(destLocation) as UnionXcmMultiLocation; + for (const systemName of KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES) { - if (destLocation.toLowerCase().includes(systemName)) { + if (location.interior.X1 && JSON.stringify(location.interior.X1).toLowerCase().includes(systemName)) { return systemName; } } diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 301754f0..05805866 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -8,6 +8,7 @@ import { MAX_ASSETS_FOR_TRANSFER, RELAY_CHAIN_IDS } from '../consts'; import { XcmPalletName } from '../createXcmCalls/util/establishXcmPallet'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from '../createXcmTypes/util/foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from '../createXcmTypes/util/foreignAssetsMultiLocationExists'; +import { getGlobalConsensusSystemName } from '../createXcmTypes/util/getGlobalConsensusSystemName'; import { isParachainPrimaryNativeAsset } from '../createXcmTypes/util/isParachainPrimaryNativeAsset'; import { multiLocationAssetIsParachainsNativeAsset } from '../createXcmTypes/util/multiLocationAssetIsParachainsNativeAsset'; import { Registry } from '../registry'; @@ -1150,6 +1151,7 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); checkXcmVersionIsValidForSystemToBridge(xcmVersion); + getGlobalConsensusSystemName(destChainId); } if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { From eee0347612f82f45c05cbd623b0c4ffb7f478658 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 19 Mar 2024 00:16:24 -0400 Subject: [PATCH 08/44] lint --- src/AssetTransferApi.ts | 3 +-- src/createXcmTypes/SystemToBridge.ts | 4 ++-- src/createXcmTypes/util/assetDestIsBridge.spec.ts | 2 +- src/errors/checkXcmTxInputs.ts | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 76689e7e..b2ce06aa 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -79,7 +79,6 @@ import { } from './types'; import { callExistsInRuntime } from './util/callExistsInRuntime'; import { deepEqual } from './util/deepEqual'; -// import { resolveMultiLocation } from './util/resolveMultiLocation'; import { sanitizeKeys } from './util/sanitizeKeys'; import { validateNumber } from './validate'; @@ -206,7 +205,7 @@ export class AssetTransferApi { isDestRelayChain: destChainId === RELAY_CHAIN_IDS[0], isDestSystemParachain: isSystemChain(destChainId), isDestParachain: isParachain(destChainId), - isDestBridge: assetDestIsBridge(assetIds), // check the asset is going to another consensus system + isDestBridge: assetDestIsBridge(assetIds), }; /** diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index a8117f5e..6d01802f 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -76,8 +76,8 @@ export const SystemToBridge: ICreateXcmType = { if (xcmVersion === 3) { /** - * Ensure that the `parents` field is a `1` when sending a destination MultiLocation - * from a system parachain to a sovereign parachain. + * Ensure that the `parents` field is `2` when sending + * from a system parachain to a GlobalConsensus system. */ return { V3: { diff --git a/src/createXcmTypes/util/assetDestIsBridge.spec.ts b/src/createXcmTypes/util/assetDestIsBridge.spec.ts index a1acac1a..b91dcdb7 100644 --- a/src/createXcmTypes/util/assetDestIsBridge.spec.ts +++ b/src/createXcmTypes/util/assetDestIsBridge.spec.ts @@ -1,4 +1,4 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. +// Copyright 2024 Parity Technologies (UK) Ltd. import { assetDestIsBridge } from './assetDestIsBridge'; diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 05805866..126e8347 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -920,7 +920,7 @@ export const checkAssetIdsAreOfSameAssetIdType = (assetIds: string[]) => { }; /** - * Checks to ensure that the xcmVersion is at least 3 if paysWithFeeDest is provided + * Checks to ensure that the xcmVersion is at least 3 for a SystemToBridge transaction * * @param xcmDirection * @param xcmVersion From ca8136cb854ae48b9a8939ea19be1d13ef395258 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 19 Mar 2024 00:54:52 -0400 Subject: [PATCH 09/44] add error validation tests --- src/AssetTransferApi.ts | 3 +-- src/createXcmTypes/util/assetDestIsBridge.ts | 12 ++++++--- src/errors/checkXcmTxInputs.spec.ts | 26 ++++++++++++++++++++ src/errors/checkXcmTxInputs.ts | 12 +++++++++ 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index b2ce06aa..dd23caab 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -29,7 +29,6 @@ import { CreateXcmCallOpts } from './createXcmCalls/types'; import { establishXcmPallet, XcmPalletName } from './createXcmCalls/util/establishXcmPallet'; import { XTokensBaseArgs } from './createXcmCalls/xTokens/types'; import { UnionXcmMultiLocation } from './createXcmTypes/types'; -import { assetDestIsBridge } from './createXcmTypes/util/assetDestIsBridge'; import { assetIdsContainRelayAsset } from './createXcmTypes/util/assetIdsContainsRelayAsset'; import { chainDestIsBridge } from './createXcmTypes/util/chainDestIsBridge'; import { getAssetId } from './createXcmTypes/util/getAssetId'; @@ -205,7 +204,7 @@ export class AssetTransferApi { isDestRelayChain: destChainId === RELAY_CHAIN_IDS[0], isDestSystemParachain: isSystemChain(destChainId), isDestParachain: isParachain(destChainId), - isDestBridge: assetDestIsBridge(assetIds), + isDestBridge: chainDestIsBridge(destChainId), }; /** diff --git a/src/createXcmTypes/util/assetDestIsBridge.ts b/src/createXcmTypes/util/assetDestIsBridge.ts index 7ae80fcc..709ae417 100644 --- a/src/createXcmTypes/util/assetDestIsBridge.ts +++ b/src/createXcmTypes/util/assetDestIsBridge.ts @@ -1,8 +1,8 @@ // Copyright 2024 Parity Technologies (UK) Ltd. /** - * Determines if the dest chain is a Global Consensus origin based on the value of its assetId/location - * @param assetId + * Determines if assetId locations are valid bridge transaction asset locations + * @param assetIds * @returns boolean */ export const assetDestIsBridge = (assetIds: string[]): boolean => { @@ -10,5 +10,11 @@ export const assetDestIsBridge = (assetIds: string[]): boolean => { return false; } - return assetIds[0].toLowerCase().includes('globalconsensus'); + for (const assetId of assetIds) { + if (!assetId.toLowerCase().includes('globalconsensus')) { + return false; + } + } + + return true; }; diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index d568cee0..7e831d90 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -12,6 +12,7 @@ import { checkAssetIdsAreOfSameAssetIdType, checkAssetIdsHaveNoDuplicates, checkAssetIdsLengthIsValid, + checkAssetLocationsAreValidGlobalConsensusLocations, checkAssetsAmountMatch, checkIfNativeRelayChainAssetPresentInMultiAssetIdList, checkLiquidTokenTransferDirectionValidity, @@ -22,6 +23,7 @@ import { checkRelayAmountsLength, checkRelayAssetIdLength, checkXcmVersionIsValidForPaysWithFeeDest, + checkXcmVersionIsValidForSystemToBridge, CheckXTokensPalletOriginIsNonForeignAssetTx, } from './checkXcmTxInputs'; @@ -748,6 +750,30 @@ describe('checkLiquidTokenTransferDirectionValidity', () => { }); }); +describe('checkXcmVersionIsValidForSystemToBridge', () => { + it('Should correctly throw an error when the xcm version is less than 3 for SystemToBridge direction', () => { + const xcmVersion = 2; + const err = () => checkXcmVersionIsValidForSystemToBridge(xcmVersion); + + expect(err).toThrow('SystemToBridge transactions require XCM version 3 or greater'); + }); +}); + +describe('checkAssetLocationsAreValidGlobalConsensusLocations', () => { + it('Should correctly throw an error when asset locations are found without a global consens junction', () => { + const assetIds = [ + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`, + ]; + + const err = () => checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); + + expect(err).toThrow( + 'SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received {"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}},{"parents":"1","interior":{"X1":{"Parachain":"1836"}}', + ); + }); +}); + describe('checkParaAssets', () => { it('Should correctly resolve when a valid symbol assetId is provided', async () => { const assetId = 'xcUSDt'; diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 126e8347..599d406c 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -6,6 +6,7 @@ import { isEthereumAddress } from '@polkadot/util-crypto'; import { MAX_ASSETS_FOR_TRANSFER, RELAY_CHAIN_IDS } from '../consts'; import { XcmPalletName } from '../createXcmCalls/util/establishXcmPallet'; +import { assetDestIsBridge } from '../createXcmTypes/util/assetDestIsBridge'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from '../createXcmTypes/util/foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from '../createXcmTypes/util/foreignAssetsMultiLocationExists'; import { getGlobalConsensusSystemName } from '../createXcmTypes/util/getGlobalConsensusSystemName'; @@ -934,6 +935,16 @@ export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { } }; +export const checkAssetLocationsAreValidGlobalConsensusLocations = (assetIds: string[]) => { + if (!assetDestIsBridge(assetIds)) { + throw new BaseError( + `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${ + assetIds.toString()}`, + BaseErrorsEnum.InvalidAsset, + ); + } +}; + /** * Checks to ensure that the xcmVersion is at least 3 if paysWithFeeDest is provided * @@ -1152,6 +1163,7 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkAssetsAmountMatch(assetIds, amounts); checkXcmVersionIsValidForSystemToBridge(xcmVersion); getGlobalConsensusSystemName(destChainId); + checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); } if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { From e93abdde51ff7a5163d52a31fad74ec29aac9977 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 19 Mar 2024 00:56:45 -0400 Subject: [PATCH 10/44] lint --- src/errors/checkXcmTxInputs.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 599d406c..e0843dfa 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -938,8 +938,7 @@ export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { export const checkAssetLocationsAreValidGlobalConsensusLocations = (assetIds: string[]) => { if (!assetDestIsBridge(assetIds)) { throw new BaseError( - `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${ - assetIds.toString()}`, + `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${assetIds.toString()}`, BaseErrorsEnum.InvalidAsset, ); } From fd3429f03ebc443c92b2118c9077e5307604a0e6 Mon Sep 17 00:00:00 2001 From: marshacb Date: Mon, 1 Apr 2024 09:12:11 -0400 Subject: [PATCH 11/44] test teleports --- src/index.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/index.ts b/src/index.ts index 406c8285..5d2e42a0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,44 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; + + +import { ApiPromise, WsProvider } from '@polkadot/api'; + +import { AssetTransferApi } from './AssetTransferApi'; + +const main = async () => { + +const provider = new WsProvider(`wss://westend-rpc.polkadot.io`); +const api = await ApiPromise.create({ provider }); + await api.isReady; + const assetTransferApi = new AssetTransferApi(api, 'westend', 3); + + const payload = await assetTransferApi.createTransferTransaction( + '1000', + '5HBuLJz9LdkUNseUEL6DLeVkx2bqEi6pQr8Ea7fS4bzx7i7E', + ['wnd'], + ['20000000000000'], + { + format: 'payload', + xcmVersion: 3, + isLimited: true, + sendersAddr: '5G98qegMrs9jDqiopjondgMT2khFyUE46AjgULcxMr77Srbb', + }, + ); + + console.log('payload', JSON.stringify(payload)); + + const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); + console.log('decodedPayload', decodedPayload); + + const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { + version: 4, + }); + + console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); + const payloadJSON = payloadExtrinsic.method.toJSON(); + console.log('payload json', payloadJSON); +} + +main(); From d437df2f2b014b840274d697f67d01a3da4bc807 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 9 May 2024 23:01:09 -0400 Subject: [PATCH 12/44] add tests for transferAssetsUsingTypeAndThen add util function for constructing beneficiary add util to construct versioned xcm asset id add ability to explicitly construct transferAssetsUsingTypeAndThen by providing transferAssetsType --- README.md | 1 + ...etsTransfer.ts => assetHubTNKRTransfer.ts} | 0 ...sets.ts => assetHubMOVRToBifrostKusama.ts} | 2 +- ...rtAssets.ts => assetHubMOVRToMoonriver.ts} | 2 +- ...setsTransfer.ts => assetHubEQDTransfer.ts} | 0 ...setsTransfer.ts => assetHubKSMTransfer.ts} | 0 ...sferAssets.ts => assetHubKSMToMoonbeam.ts} | 0 ...rtAssets.ts => assetHubEQToEquilibrium.ts} | 0 .../bridgeTransfers/assetHubROCToWestend.ts | 54 +++++ .../assetHubWETHToEthereumSepolia.ts | 61 +++++ ...etsTransfer.ts => assetHubWETHTransfer.ts} | 8 +- ...ansferAssets.ts => assetHubMUSEToRhala.ts} | 18 +- .../assetHubWETHToRhala.ts} | 12 +- .../assetHubHOPToTrappist.ts} | 16 +- .../assetHubWETHToBridgeHub.ts} | 4 +- src/AssetTransferApi.spec.ts | 68 ++++-- src/AssetTransferApi.ts | 88 +++++--- .../transferAssetsUsingTypeAndThen.spec.ts | 211 +++++++++++++++++- .../transferAssetsUsingTypeAndThen.ts | 137 ++++-------- src/createXcmTypes/SystemToBridge.ts | 1 - src/createXcmTypes/types.ts | 16 ++ .../createDefaultXcmOnDestination.spec.ts | 65 ++++++ .../util/createDefaultXcmOnDestination.ts | 43 ++++ .../util/createXcmOnDestBeneficiary.spec.ts | 63 ++++++ .../util/createXcmOnDestBeneficiary.ts | 37 +++ .../util/createXcmVersionedAssetId.spec.ts | 74 ++++++ .../util/createXcmVersionedAssetId.ts | 28 +++ src/createXcmTypes/util/isRelayNativeAsset.ts | 4 + .../util/resolveAssetTransferType.spec.ts | 82 +++++++ .../util/resolveAssetTransferType.ts | 94 +++----- src/errors/checkXcmTxInputs.spec.ts | 32 +-- src/errors/checkXcmTxInputs.ts | 108 ++++++--- src/index.ts | 45 ---- .../AssetsTransferApi.spec.ts | 181 ++++++++++++--- .../adjustedMockSystemApiV1004000.ts | 115 +++++++++- .../adjustedMockSystemApiV1011000.ts | 157 ++++++++++++- .../metadata/assetHubWestendV1011000.ts | 3 +- src/types.ts | 22 +- src/util/getFeeAssetItemIndex.ts | 2 + src/util/resolveMultiLocation.ts | 21 +- 40 files changed, 1502 insertions(+), 373 deletions(-) rename examples/kusama/assetHub/foreignAssetTransfers/local/{assetHubTNKRForeignAssetsTransfer.ts => assetHubTNKRTransfer.ts} (100%) rename examples/kusama/assetHub/foreignAssetTransfers/reserve/{assetHubToBifrostLimitedReserveTransferAssets.ts => assetHubMOVRToBifrostKusama.ts} (89%) rename examples/kusama/assetHub/foreignAssetTransfers/teleport/{assetHubToMoonriverLimitedTeleportAssets.ts => assetHubMOVRToMoonriver.ts} (89%) rename examples/polkadot/assetHub/foreignAssetTransfers/local/{assetHubEQDForeignAssetsTransfer.ts => assetHubEQDTransfer.ts} (100%) rename examples/polkadot/assetHub/foreignAssetTransfers/local/{assetHubKSMForeignAssetsTransfer.ts => assetHubKSMTransfer.ts} (100%) rename examples/polkadot/assetHub/foreignAssetTransfers/reserve/{assetHubToMoonbeamLimitedReserveTransferAssets.ts => assetHubKSMToMoonbeam.ts} (100%) rename examples/polkadot/assetHub/foreignAssetTransfers/teleport/{assetHubToEquilibriumLimitedTeleportAssets.ts => assetHubEQToEquilibrium.ts} (100%) create mode 100644 examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts create mode 100644 examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts rename examples/rococo/assetHub/foreignAssetTransfers/local/{assetHubSnowbridgeETHForeignAssetsTransfer.ts => assetHubWETHTransfer.ts} (92%) rename examples/rococo/assetHub/foreignAssetTransfers/reserve/{assetHubTrapistTransferAssets.ts => assetHubMUSEToRhala.ts} (74%) rename examples/rococo/assetHub/foreignAssetTransfers/{bridge/assetHubSnowbridgeETHToBridgeHub.ts => reserve/assetHubWETHToRhala.ts} (84%) rename examples/rococo/assetHub/foreignAssetTransfers/{reserve/assetHubSnowbridgeETHToKhala.ts => teleport/assetHubHOPToTrappist.ts} (68%) rename examples/rococo/assetHub/foreignAssetTransfers/{local/assetHubSnowbridgeETHToContracts.ts => teleport/assetHubWETHToBridgeHub.ts} (96%) create mode 100644 src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts create mode 100644 src/createXcmTypes/util/createDefaultXcmOnDestination.ts create mode 100644 src/createXcmTypes/util/createXcmOnDestBeneficiary.spec.ts create mode 100644 src/createXcmTypes/util/createXcmOnDestBeneficiary.ts create mode 100644 src/createXcmTypes/util/createXcmVersionedAssetId.spec.ts create mode 100644 src/createXcmTypes/util/createXcmVersionedAssetId.ts create mode 100644 src/createXcmTypes/util/resolveAssetTransferType.spec.ts diff --git a/README.md b/README.md index f475cfe7..c3f46078 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ The below chart is focusing on what directions are supported for constructing as | Parachain to Relay | ✅ | ✅ | ✅ | | Parachain to System | ✅ | ✅ | ✅ | | System to System | ✅ | ✅ | ✅ | +| System to Bridge | ❌ | ✅ | ✅ | ## 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.). diff --git a/examples/kusama/assetHub/foreignAssetTransfers/local/assetHubTNKRForeignAssetsTransfer.ts b/examples/kusama/assetHub/foreignAssetTransfers/local/assetHubTNKRTransfer.ts similarity index 100% rename from examples/kusama/assetHub/foreignAssetTransfers/local/assetHubTNKRForeignAssetsTransfer.ts rename to examples/kusama/assetHub/foreignAssetTransfers/local/assetHubTNKRTransfer.ts diff --git a/examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubToBifrostLimitedReserveTransferAssets.ts b/examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubMOVRToBifrostKusama.ts similarity index 89% rename from examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubToBifrostLimitedReserveTransferAssets.ts rename to examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubMOVRToBifrostKusama.ts index 23f88d11..4314a3c4 100644 --- a/examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubToBifrostLimitedReserveTransferAssets.ts +++ b/examples/kusama/assetHub/foreignAssetTransfers/reserve/assetHubMOVRToBifrostKusama.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `limitedReserveTransferAssets` call to send MOVR (foreign asset with location `{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send MOVR (foreign asset with location `{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}`) * from a Kusama Asset Hub (System Parachain) account * to a Bifrost (ParaChain) account, where the `xcmVersion` is set to 3 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. diff --git a/examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubToMoonriverLimitedTeleportAssets.ts b/examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubMOVRToMoonriver.ts similarity index 89% rename from examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubToMoonriverLimitedTeleportAssets.ts rename to examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubMOVRToMoonriver.ts index 9d4ab1d2..acf5adba 100644 --- a/examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubToMoonriverLimitedTeleportAssets.ts +++ b/examples/kusama/assetHub/foreignAssetTransfers/teleport/assetHubMOVRToMoonriver.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `limitedTeleportAssets` call to send MOVR (foreign asset with location `{"parents":"1","interior":{"X2":[{"Parachain":"2023"},{"PalletInstance":"10"}]}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send MOVR (foreign asset with location `{"parents":"1","interior":{"X2":[{"Parachain":"2023"},{"PalletInstance":"10"}]}}`) * from a Kusama Asset Hub (System Parachain) account * to a Moonriver (ParaChain) account, where the `xcmVersion` is set to 3 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDTransfer.ts similarity index 100% rename from examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDForeignAssetsTransfer.ts rename to examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubEQDTransfer.ts diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubKSMForeignAssetsTransfer.ts b/examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubKSMTransfer.ts similarity index 100% rename from examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubKSMForeignAssetsTransfer.ts rename to examples/polkadot/assetHub/foreignAssetTransfers/local/assetHubKSMTransfer.ts diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/reserve/assetHubToMoonbeamLimitedReserveTransferAssets.ts b/examples/polkadot/assetHub/foreignAssetTransfers/reserve/assetHubKSMToMoonbeam.ts similarity index 100% rename from examples/polkadot/assetHub/foreignAssetTransfers/reserve/assetHubToMoonbeamLimitedReserveTransferAssets.ts rename to examples/polkadot/assetHub/foreignAssetTransfers/reserve/assetHubKSMToMoonbeam.ts diff --git a/examples/polkadot/assetHub/foreignAssetTransfers/teleport/assetHubToEquilibriumLimitedTeleportAssets.ts b/examples/polkadot/assetHub/foreignAssetTransfers/teleport/assetHubEQToEquilibrium.ts similarity index 100% rename from examples/polkadot/assetHub/foreignAssetTransfers/teleport/assetHubToEquilibriumLimitedTeleportAssets.ts rename to examples/polkadot/assetHub/foreignAssetTransfers/teleport/assetHubEQToEquilibrium.ts diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts new file mode 100644 index 00000000..062afeb1 --- /dev/null +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -0,0 +1,54 @@ +/** + * 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 `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (foreign asset with location `{"parents":"1","interior":{"Here":""}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that + * the tx will allow unlimited weight to be used for fees. + * + * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [`{"parents":"1","interior":{"Here":""}}`], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: + '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: + '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + 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/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts new file mode 100644 index 00000000..17056cb4 --- /dev/null +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts @@ -0,0 +1,61 @@ +/** + * 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 `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * from a Rococo Asset Hub (System Parachain) account + * to an Ethereum Sepolia an account, where the `xcmVersion` is set to 4, and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * + * 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 { api, specName, chainName, safeXcmVersion } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { + chainName, + }); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + paysWithFeeDest: + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: + '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: + '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + 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/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubWETHTransfer.ts similarity index 92% rename from examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts rename to examples/rococo/assetHub/foreignAssetTransfers/local/assetHubWETHTransfer.ts index bfe009e1..c1181f91 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHForeignAssetsTransfer.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubWETHTransfer.ts @@ -16,8 +16,12 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + const { api, specName, safeXcmVersion, chainName } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { + chainName, + }); let callInfo: TxResult<'call'>; try { diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts similarity index 74% rename from examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts rename to examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts index 31a5be37..01bb5813 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubTrapistTransferAssets.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts @@ -1,4 +1,3 @@ -// [{"parents":"1","interior":{"X1":{"Parachain":"1,836"}}}] /** * When importing from @substrate/asset-transfer-api it would look like the following * @@ -9,7 +8,7 @@ import { TxResult } from '../../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send HOP (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"1,836"}}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send MUSE (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`) * from a Rococo Asset Hub (System Parachain) account * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. @@ -17,19 +16,26 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + const { api, specName, safeXcmVersion, chainName } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { chainName }); let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - '2004', // Note: Parachain ID 1836 (Equilibrium) is identical to the asset location's `Parachain` Id, making this a `teleportAssets` call + '2004', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - ['{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}'], + [ + `{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`, + ], ['1000000000000'], { format: 'call', xcmVersion: 4, + paysWithFeeDest: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', + assetTransferType: 'LocalReserve', + feesTransferType: 'LocalReserve', }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts similarity index 84% rename from examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts rename to examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts index 7ece3637..113238fe 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/bridge/assetHubSnowbridgeETHToBridgeHub.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts @@ -10,24 +10,22 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; /** * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) * from a Rococo Asset Hub (System Parachain) account - * to a Rococo Bridge Hub (System ParaChain) account, where the `xcmVersion` is set to 4, and there is no + * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * * 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 { api, specName, chainName, safeXcmVersion } = await constructApiPromise( + const { api, specName, safeXcmVersion, chainName } = await constructApiPromise( 'wss://rococo-asset-hub-rpc.polkadot.io', ); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { - chainName, - }); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { chainName }); let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, - '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + '2004', + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, ], diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts similarity index 68% rename from examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts rename to examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts index 87453c55..ec1461e4 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubSnowbridgeETHToKhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts @@ -8,25 +8,25 @@ import { TxResult } from '../../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send ETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send HOP (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`) * from a Rococo Asset Hub (System Parachain) account - * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no + * to a Trappist Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://rococo-asset-hub-rpc.polkadot.io'); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + const { api, specName, safeXcmVersion, chainName } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { chainName }); let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - '2004', + '1836', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - ], + [`{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`], ['1000000000000'], { format: 'call', diff --git a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts similarity index 96% rename from examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts rename to examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts index c6b77f4c..5673e81b 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/local/assetHubSnowbridgeETHToContracts.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts @@ -10,7 +10,7 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; /** * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) * from a Rococo Asset Hub (System Parachain) account - * to a Rococo Contracts (System ParaChain) account, where the `xcmVersion` is set to 4, and there is no + * to a Rococo BridgeHub (System ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. @@ -26,7 +26,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - '1002', + '1013', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [ `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, diff --git a/src/AssetTransferApi.spec.ts b/src/AssetTransferApi.spec.ts index 28ed9dd3..030f90e7 100644 --- a/src/AssetTransferApi.spec.ts +++ b/src/AssetTransferApi.spec.ts @@ -264,7 +264,7 @@ describe('AssetTransferAPI', () => { relayAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); describe('SystemToRelay', () => { @@ -328,7 +328,7 @@ describe('AssetTransferAPI', () => { systemAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); describe('ParaToRelay', () => { @@ -344,7 +344,7 @@ describe('AssetTransferAPI', () => { moonriverAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); describe('ParaToSystem', () => { @@ -388,7 +388,7 @@ describe('AssetTransferAPI', () => { moonriverAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); describe('ParaToPara', () => { @@ -404,7 +404,7 @@ describe('AssetTransferAPI', () => { moonriverAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); describe('ParaToRelay', () => { @@ -420,7 +420,7 @@ describe('AssetTransferAPI', () => { moonriverAssetsApi.registry, ); - expect(assetCallType).toEqual('LocalReserve'); + expect(assetCallType).toEqual('Reserve'); }); }); }); @@ -898,7 +898,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'polkadotXcm' as XcmPalletName, Direction.SystemToPara, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -935,7 +935,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'polkadotXcm' as XcmPalletName, Direction.SystemToPara, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -976,7 +976,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'polkadotXcm' as XcmPalletName, Direction.SystemToPara, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -1103,7 +1103,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'xTokens' as XcmPalletName, Direction.ParaToSystem, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -1145,7 +1145,7 @@ describe('AssetTransferAPI', () => { ['ksm', 'usdt'], 'xTokens' as XcmPalletName, Direction.ParaToSystem, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -1190,7 +1190,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'xTokens' as XcmPalletName, Direction.ParaToSystem, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, paysWithFeeDest, @@ -1229,7 +1229,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'polkadotXcm' as XcmPalletName, Direction.ParaToSystem, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -1271,7 +1271,7 @@ describe('AssetTransferAPI', () => { ['usdt'], 'polkadotXcm' as XcmPalletName, Direction.ParaToSystem, - 'LocalReserve' as AssetCallType, + 'Reserve' as AssetCallType, mockBaseArgs, mockBaseOpts, ); @@ -1285,7 +1285,7 @@ describe('AssetTransferAPI', () => { const specName = 'bifrost'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xTokens; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToRelay; const assetIds = ['ksm']; const mockBaseArgs: XTokensBaseArgs = { @@ -1328,7 +1328,7 @@ describe('AssetTransferAPI', () => { const specName = 'moonriver'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.polkadotXcm; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToRelay; const assetIds = ['ksm']; @@ -1371,7 +1371,7 @@ describe('AssetTransferAPI', () => { const specName = 'moonriver'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.polkadotXcm; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToRelay; const assetIds = ['ksm']; @@ -1415,7 +1415,7 @@ describe('AssetTransferAPI', () => { const specName = 'moonriver'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xTokens; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToPara; const assetIds = ['movr']; @@ -1455,7 +1455,7 @@ describe('AssetTransferAPI', () => { const specName = 'moonriver'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xTokens; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToPara; const assetIds = ['vmovr', 'xcbnc']; @@ -1498,7 +1498,7 @@ describe('AssetTransferAPI', () => { const specName = 'moonriver'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xTokens; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.ParaToPara; const assetIds = ['vmovr', 'usdt']; const paysWithFeeDest = @@ -1590,7 +1590,7 @@ describe('AssetTransferAPI', () => { const specName = 'kusama'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xcmPallet; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.RelayToSystem; const assetIds = ['ksm']; @@ -1632,7 +1632,7 @@ describe('AssetTransferAPI', () => { const specName = 'kusama'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xcmPallet; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.RelayToSystem; const assetIds = ['ksm']; @@ -1679,7 +1679,7 @@ describe('AssetTransferAPI', () => { const specName = 'kusama'; const registry = new Registry(specName, {}); const xcmPallet = XcmPalletName.xcmPallet; - const assetCallType = AssetCallType.LocalReserve; + const assetCallType = AssetCallType.Reserve; const direction = Direction.RelayToSystem; const assetIds = ['ksm']; @@ -1744,4 +1744,26 @@ describe('AssetTransferAPI', () => { ]); }); }); + describe('checkContainsForeignAssets', () => { + it('Should correctly return true when assetIds contain valid foreignAssets', async () => { + const { api } = systemAssetsApi; + const assetIds = [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ]; + + const result = await systemAssetsApi['checkContainsForeignAssets'](api, assetIds); + + expect(result).toBe(true); + }); + it('Should correctly return false when assetIds does not contain valid foreignAssets', async () => { + const { api } = systemAssetsApi; + const assetIds = [ + `{"parents":"0","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ]; + + const result = await systemAssetsApi['checkContainsForeignAssets'](api, assetIds); + + expect(result).toBe(false); + }); + }); }); diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index fbb41772..e1880465 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -171,8 +171,20 @@ export class AssetTransferApi { amounts: string[], opts: TransferArgsOpts = {}, ): Promise> { - const { format, paysWithFeeDest, paysWithFeeOrigin, weightLimit, xcmVersion, transferLiquidToken, sendersAddr, assetTransferType, remoteReserveAssetTransferTypeLocation, feesTransferType, remoteReserveFeesTransferTypeLocation, customXcmOnDest } = - opts; + const { + format, + paysWithFeeDest, + paysWithFeeOrigin, + weightLimit, + xcmVersion, + transferLiquidToken, + sendersAddr, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + customXcmOnDest, + } = opts; if (!this.registryConfig.registryInitialized) { await this.initializeRegistry(); @@ -209,7 +221,7 @@ export class AssetTransferApi { const localTxChainType = this.establishLocalTxChainType(originChainId, destChainId, chainOriginDestInfo); const isLocalTx = localTxChainType !== LocalTxChainType.None; const xcmDirection = this.establishDirection(isLocalTx, chainOriginDestInfo); - const isForeignAssetsTransfer = this.checkContainsAssetLocations(assetIds); + const isForeignAssetsTransfer = await this.checkContainsForeignAssets(api, assetIds); const isPrimaryParachainNativeAsset = isParachainPrimaryNativeAsset(registry, specName, xcmDirection, assetIds[0]); const xcmPallet = establishXcmPallet(api, xcmDirection); const declaredXcmVersion = xcmVersion === undefined ? safeXcmVersion : xcmVersion; @@ -257,7 +269,7 @@ export class AssetTransferApi { remoteReserveAssetTransferTypeLocation, feesTransferType, remoteReserveFeesTransferTypeLocation, - customXcmOnDest + customXcmOnDest, }; await checkXcmTxInputs( @@ -634,7 +646,7 @@ export class AssetTransferApi { // relay to para -> reserve if (xcmDirection === Direction.RelayToPara) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } let originIsMultiLocationsNativeChain = false; @@ -667,7 +679,7 @@ export class AssetTransferApi { // system to para native asset -> reserve if (assetType === AssetType.Native && xcmDirection === Direction.SystemToPara) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } // system to para foreign asset (non native to destination) -> reserve @@ -676,7 +688,7 @@ export class AssetTransferApi { xcmDirection === Direction.SystemToPara && !destIsMultiLocationsNativeChain ) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } // system to para foreign asset (native to destination) -> teleport @@ -686,7 +698,7 @@ export class AssetTransferApi { // para to para -> reserve if (xcmDirection === Direction.ParaToPara) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } // para to system only when the assets are native to origin -> teleport @@ -704,19 +716,19 @@ export class AssetTransferApi { (xcmDirection === Direction.ParaToSystem && assetIdsContainRelayAsset(assetIds, registry)) || !originIsMultiLocationsNativeChain ) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } // para to relay -> reserve if (xcmDirection === Direction.ParaToRelay) { - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } // system to bridge -> remote reserve if (xcmDirection === Direction.SystemToBridge) { - return AssetCallType.RemoteReserve + return AssetCallType.Reserve; } - return AssetCallType.LocalReserve; + return AssetCallType.Reserve; } /** * returns an ExtrinsicPayload @@ -870,6 +882,37 @@ export class AssetTransferApi { return true; } + /** + * Checks if assetIds exclusively contain on-chain foreign asset values + * + * @param api ApiPromise + * @param assetIds string[] + * @returns boolean + */ + private checkContainsForeignAssets = async (api: ApiPromise, assetIds: string[]): Promise => { + if (!api.query.foreignAssets) { + return false; + } + + const foreignAssets: string[] = []; + for (const asset of await api.query.foreignAssets.asset.entries()) { + const storageKey = asset[0].toHuman(); + if (storageKey) { + foreignAssets.push(JSON.stringify(storageKey[0]).replace(/(\d),/g, '$1')); + } + } + + for (const assetId of assetIds) { + if (foreignAssets.includes(assetId)) { + continue; + } else { + return false; + } + } + + return true; + }; + /** * checks the chains state and determines whether an asset location is a part of a valid token liquidity pool pair * @@ -1099,27 +1142,22 @@ export class AssetTransferApi { } } else if (api.tx[xcmPallet]) { if ( - xcmDirection === Direction.SystemToBridge && - api.tx[xcmPallet].transferAssetsUsingTypeAndThen + api.tx[xcmPallet].transferAssetsUsingTypeAndThen && + xcmDirection === Direction.SystemToBridge || + baseOpts.assetTransferType ) { txMethod = 'transferAssetsUsingTypeAndThen'; - } else if ( - xcmDirection != Direction.SystemToBridge && - api.tx[xcmPallet].transferAssets - ) { + } else if (xcmDirection != Direction.SystemToBridge && api.tx[xcmPallet].transferAssets) { txMethod = 'transferAssets'; - } else if (assetCallType === AssetCallType.LocalReserve) { - txMethod = 'limitedReserveTransferAssets'; + } else if (assetCallType === AssetCallType.Reserve) { + txMethod = 'limitedReserveTransferAssets'; } else { - txMethod = 'limitedTeleportAssets'; + txMethod = 'limitedTeleportAssets'; } } if (!txMethod) { - throw new BaseError( - `Unable to resolve correct transfer call`, - BaseErrorsEnum.InternalError - ) + throw new BaseError(`Unable to resolve correct transfer call`, BaseErrorsEnum.InternalError); } if (!callExistsInRuntime(api, txMethod, xcmPallet)) { diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts index 763fd92a..ef8fc042 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts @@ -1,12 +1,215 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import type { ApiPromise } from '@polkadot/api'; - import { Registry } from '../../registry'; import { adjustedMockSystemApiV1011000 } from '../../testHelpers/adjustedMockSystemApiV1011000'; -import { adjustedMockWestendRelayApiV1007001 } from '../../testHelpers/adjustedMockWestendRelayApiV1007001'; import { Direction, XcmBaseArgs, XcmDirection } from '../../types'; import { transferAssetsUsingTypeAndThen } from './transferAssetsUsingTypeAndThen'; describe('transferAssetsUsingTypeAndThen', () => { -}); \ No newline at end of file + describe('SystemToBridge', () => { + describe('XCM V3', () => { + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia', async () => { + const registry = new Registry('asset-hub-rococo', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + assetIds: [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, + xcmVersion: 3, + specName: 'asset-hub-rococo', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; + const isForeignAssetsTransfer = true; + + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); + + expect(ext.toHex()).toBe( + '0x1502041f0d03020109079edaa802030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + ); + }); + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia containing multiple assets', async () => { + const registry = new Registry('asset-hub-rococo', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + assetIds: [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xc3d088842dcf02c13699f936bb83dfbbc6f721ab"}}]}}`, + ], + amounts: ['1000000000000', '2000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, + xcmVersion: 3, + specName: 'asset-hub-rococo', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; + const isForeignAssetsTransfer = true; + + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); + + expect(ext.toHex()).toBe( + '0xb102041f0d03020109079edaa802030800020209079edaa8020300c3d088842dcf02c13699f936bb83dfbbc6f721ab000b00204aa9d10100020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + ); + }); + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { + const registry = new Registry('asset-hub-westend', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds: [ + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + xcmVersion: 3, + specName: 'asset-hub-westend', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; + const isForeignAssetsTransfer = true; + + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); + + expect(ext.toHex()).toBe( + '0x6501041f0d03020109020304000201090200070010a5d4e80303010100a10f0300020109020303010100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + ); + }); + }); + + describe('XCM V4', () => { + describe('RemoteReserve', () => { + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia', async () => { + const registry = new Registry('asset-hub-rococo', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + assetIds: [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, + xcmVersion: 4, + specName: 'asset-hub-rococo', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; + const isForeignAssetsTransfer = true; + + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); + + expect(ext.toHex()).toBe( + '0x0d02041f0d04020109079edaa8020404020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80304010100a10f04020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140304010100a10f04040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + ); + }); + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { + const registry = new Registry('asset-hub-westend', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds: [ + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + xcmVersion: 4, + specName: 'asset-hub-westend', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; + const isForeignAssetsTransfer = true; + + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); + + expect(ext.toHex()).toBe( + '0x5d01041f0d040201090204040201090200070010a5d4e80304010100a10f04020109020304010100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + ); + }); + }); + }); + }); +}); diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index c1a27edc..0d149b22 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -5,14 +5,17 @@ import type { ISubmittableResult } from '@polkadot/types/types'; import type { AnyJson } from '@polkadot/types/types'; import { createXcmTypes } from '../../createXcmTypes'; +import { createDefaultXcmOnDestination } from '../../createXcmTypes/util/createDefaultXcmOnDestination'; +import { createXcmOnDestBeneficiary } from '../../createXcmTypes/util/createXcmOnDestBeneficiary'; +import { createXcmVersionedAssetId } from '../../createXcmTypes/util/createXcmVersionedAssetId'; +import { resolveAssetTransferType } from '../../createXcmTypes/util/resolveAssetTransferType'; +import { BaseError, BaseErrorsEnum } from '../../errors'; import { normalizeArrToStr } from '../../util/normalizeArrToStr'; import type { CreateXcmCallOpts } from '../types'; import { establishXcmPallet } from '../util/establishXcmPallet'; import type { PolkadotXcmBaseArgs } from './types'; -import { BaseError, BaseErrorsEnum } from '../../errors'; -import { resolveAssetTransferType } from '../../createXcmTypes/util/resolveAssetTransferType'; /** - * Build a Polkadot-js SubmittableExtrinsic for a `transferAssets` call. + * Build a Polkadot-js SubmittableExtrinsic for a `transferAssetsUsingTypeAndThen` call. * * @param baseArgs The base args needed to construct this call. * @param opts CreateXcmCallOpts @@ -22,40 +25,29 @@ export const transferAssetsUsingTypeAndThen = async ( opts: CreateXcmCallOpts, ): Promise> => { const { api, direction, destAddr, assetIds, amounts, destChainId, xcmVersion, specName, registry } = baseArgs; - const { - weightLimit, - paysWithFeeDest, - isForeignAssetsTransfer, - isLiquidTokenTransfer, - assetTransferType: assetTransferTypeStr, - remoteReserveAssetTransferTypeLocation, - feesTransferType: feesTransferTypeStr, - remoteReserveFeesTransferTypeLocation, - customXcmOnDest: customXcmOnDestStr, - } = opts; - - if (!paysWithFeeDest || !assetTransferTypeStr || !feesTransferTypeStr) { - throw new BaseError('Bridge inputs not found', BaseErrorsEnum.InvalidInput) - } + const { + weightLimit, + paysWithFeeDest, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + assetTransferType: assetTransferTypeStr, + remoteReserveAssetTransferTypeLocation, + feesTransferType: feesTransferTypeStr, + remoteReserveFeesTransferTypeLocation, + customXcmOnDest: customXcmOnDestStr, + } = opts; + + if (!paysWithFeeDest || !assetTransferTypeStr || !feesTransferTypeStr) { + throw new BaseError( + 'transferAssetsUsingTypeAndThen: required bridge inputs not found', + BaseErrorsEnum.InvalidInput, + ); + } const pallet = establishXcmPallet(api); const ext = api.tx[pallet].transferAssetsUsingTypeAndThen; const typeCreator = createXcmTypes[direction]; - const ben = typeCreator.createBeneficiary(destAddr, xcmVersion); - console.log('WHAT IS BEN', JSON.stringify(ben)); - const beneficiary = { - parents: 0, - interior: { - X1: [ - { - AccountId32: { - id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - }, - } - ] - } -} - + const beneficiary = createXcmOnDestBeneficiary(destAddr, xcmVersion); const dest = typeCreator.createDest(destChainId, xcmVersion); const assets = await typeCreator.createAssets(normalizeArrToStr(amounts), xcmVersion, specName, assetIds, { registry, @@ -67,73 +59,20 @@ export const transferAssetsUsingTypeAndThen = async ( const weightLimitValue = typeCreator.createWeightLimit({ weightLimit, }); + const assetTransferType = resolveAssetTransferType( + feesTransferTypeStr, + xcmVersion, + remoteReserveAssetTransferTypeLocation, + ); + const feeAssetTransferType = resolveAssetTransferType( + feesTransferTypeStr, + xcmVersion, + remoteReserveFeesTransferTypeLocation, + ); + const remoteFeesId = createXcmVersionedAssetId(paysWithFeeDest, xcmVersion); - console.log('REMOTE RESERVE ASSET TYPE LOCATION', remoteReserveAssetTransferTypeLocation); - const assetTransferType = resolveAssetTransferType(feesTransferTypeStr, xcmVersion, remoteReserveAssetTransferTypeLocation); - const feeAssetTransferType = resolveAssetTransferType(feesTransferTypeStr, xcmVersion, remoteReserveFeesTransferTypeLocation); - const remoteFeesId = { - V4: { - parents: 2, - interior: { - X2: [ - { - GlobalConsensus: { - Ethereum: { - chainId: 11155111 - } - } - }, - { - AccountKey20: { - network:null, - key: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14" - } - } - ] - } - } - } - // TODO: update remote fees id construction - // TODO: update beneficiary construction to be an object with no reference to XCM version - console.log(remoteFeesId); - - const defaultDestXcm: AnyJson = xcmVersion === 3 ? { - V3: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: 1 - } - }, - beneficiary - } - } - ] - } : { - V4: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: 1 - } - }, - beneficiary - } - } - ] - }; - - const customXcmOnDest = customXcmOnDestStr ? JSON.parse(customXcmOnDestStr) as AnyJson : defaultDestXcm; + const defaultDestXcm = createDefaultXcmOnDestination(beneficiary, xcmVersion); + const customXcmOnDest = customXcmOnDestStr ? (JSON.parse(customXcmOnDestStr) as AnyJson) : defaultDestXcm; return ext(dest, assets, assetTransferType, remoteFeesId, feeAssetTransferType, customXcmOnDest, weightLimitValue); }; - -// dest: Box, -// assets: Box, -// assets_transfer_type: Box, -// remote_fees_id: Box, -// fees_transfer_type: Box, -// custom_xcm_on_dest: Box>, -// weight_limit: WeightLimit, \ No newline at end of file diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index afd17436..7803b226 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -230,7 +230,6 @@ export const createSystemToBridgeAssets = async ( const isValidInt = validateNumber(assetId); const isRelayNative = isRelayNativeAsset(tokens, assetId); - if (!isRelayNative && !isValidInt) { assetId = await getAssetId(api, registry, assetId, specName, xcmVersion, isForeignAssetsTransfer); } diff --git a/src/createXcmTypes/types.ts b/src/createXcmTypes/types.ts index 9720fd34..9558db32 100644 --- a/src/createXcmTypes/types.ts +++ b/src/createXcmTypes/types.ts @@ -416,6 +416,22 @@ export interface CreateWeightLimitOpts { weightLimit?: { refTime?: string; proofSize?: string }; } +export type XcmVersionedAssetIdV2 = { + V2: { + Concrete: UnionXcmMultiLocation; + }; +}; +export type XcmVersionedAssetIdV3 = { + V3: { + Concrete: UnionXcmMultiLocation; + }; +}; +export type XcmVersionedAssetIdV4 = { + V4: UnionXcmMultiLocation; +}; + +export type XcmVersionedAssetId = XcmVersionedAssetIdV2 | XcmVersionedAssetIdV3 | XcmVersionedAssetIdV4; + export interface ICreateXcmType { createBeneficiary: (accountId: string, xcmVersion: number) => XcmDestBeneficiary; createDest: (destId: string, xcmVersion: number) => XcmDestBeneficiary; diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts new file mode 100644 index 00000000..c8852cb2 --- /dev/null +++ b/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts @@ -0,0 +1,65 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { UnionXcmMultiLocation } from '../types'; +import { createDefaultXcmOnDestination } from './createDefaultXcmOnDestination'; + +describe('createDefaultXcmOnDestination', () => { + it('Should correctly construct the default XCM message for V3', () => { + const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; + + const beneficiary = { + parents: 0, + interior: { + X1: { AccountId32: { id: accountId } }, + }, + } as UnionXcmMultiLocation; + + const xcmVersion = 3; + + const expected = { + V3: [ + { + depositAsset: { + assets: { + Wild: { + AllCounted: 1, + }, + }, + beneficiary, + }, + }, + ], + }; + + expect(createDefaultXcmOnDestination(beneficiary, xcmVersion)).toEqual(expected); + }); + it('Should correctly construct the default XCM message for V4', () => { + const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; + + const beneficiary = { + parents: 0, + interior: { + X1: { AccountId32: { id: accountId } }, + }, + } as UnionXcmMultiLocation; + + const xcmVersion = 4; + + const expected = { + V4: [ + { + depositAsset: { + assets: { + Wild: { + AllCounted: 1, + }, + }, + beneficiary, + }, + }, + ], + }; + + expect(createDefaultXcmOnDestination(beneficiary, xcmVersion)).toEqual(expected); + }); +}); diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts new file mode 100644 index 00000000..5ca0df74 --- /dev/null +++ b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts @@ -0,0 +1,43 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import type { AnyJson } from '@polkadot/types/types'; + +import { UnionXcmMultiLocation } from '../types'; + +export const createDefaultXcmOnDestination = (beneficiary: UnionXcmMultiLocation, xcmVersion: number): AnyJson => { + const defaultDestXcm: AnyJson = + xcmVersion === 3 + ? { + V3: [ + { + depositAsset: { + assets: { + Wild: { + AllCounted: 1, + }, + }, + beneficiary, + }, + }, + ], + } + : { + V4: [ + { + depositAsset: { + assets: { + Wild: { + AllCounted: 1, + }, + }, + beneficiary, + }, + }, + ], + }; + + return defaultDestXcm; +}; + +// TODO: do we need to include BuyExecution? +// BuyExecution { fees: remote_fees, weight_limit: t.args.weight_limit.clone() }, diff --git a/src/createXcmTypes/util/createXcmOnDestBeneficiary.spec.ts b/src/createXcmTypes/util/createXcmOnDestBeneficiary.spec.ts new file mode 100644 index 00000000..60871005 --- /dev/null +++ b/src/createXcmTypes/util/createXcmOnDestBeneficiary.spec.ts @@ -0,0 +1,63 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +// import { UnionXcmMultiLocation } from "../types"; +import { createXcmOnDestBeneficiary } from './createXcmOnDestBeneficiary'; + +describe('createXcmOnDestBeneficiary hello', () => { + it('Should correctly construct the beneficiary for XCM V3 using an Ethereum address', () => { + const xcmVersion = 3; + const accountId = '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B'; + + const expected = { + parents: 0, + interior: { + X1: { + AccountKey20: { key: accountId }, + }, + }, + }; + + expect(createXcmOnDestBeneficiary(accountId, xcmVersion)).toEqual(expected); + }); + it('Should correctly construct the beneficiary for XCM V3 using a Substrate address', () => { + const xcmVersion = 3; + const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; + + const expected = { + parents: 0, + interior: { + X1: { + AccountId32: { id: accountId }, + }, + }, + }; + + expect(createXcmOnDestBeneficiary(accountId, xcmVersion)).toEqual(expected); + }); + it('Should correctly construct the beneficiary for XCM V4 using an Ethereum address', () => { + const xcmVersion = 4; + const accountId = '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B'; + + const expected = { + parents: 0, + interior: { + X1: [{ AccountKey20: { key: accountId } }], + }, + }; + + expect(createXcmOnDestBeneficiary(accountId, xcmVersion)).toEqual(expected); + }); + it('Should correctly construct the beneficiary for XCM V4 using a Substrate address', () => { + const xcmVersion = 4; + const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; + + const expected = { + parents: 0, + interior: { + X1: [{ AccountId32: { id: accountId } }], + }, + }; + + expect(createXcmOnDestBeneficiary(accountId, xcmVersion)).toEqual(expected); + }); +}); diff --git a/src/createXcmTypes/util/createXcmOnDestBeneficiary.ts b/src/createXcmTypes/util/createXcmOnDestBeneficiary.ts new file mode 100644 index 00000000..47dfc0de --- /dev/null +++ b/src/createXcmTypes/util/createXcmOnDestBeneficiary.ts @@ -0,0 +1,37 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { isEthereumAddress } from '@polkadot/util-crypto'; + +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { UnionXcmMultiLocation } from '../types'; + +export const createXcmOnDestBeneficiary = (accountId: string, xcmVersion: number): UnionXcmMultiLocation => { + if (xcmVersion < 3) { + throw new BaseError( + 'createXcmOnDestBeneficiary: XcmVersion must be greater than 2', + BaseErrorsEnum.InvalidXcmVersion, + ); + } + + if (xcmVersion === 3) { + const X1 = isEthereumAddress(accountId) ? { AccountKey20: { key: accountId } } : { AccountId32: { id: accountId } }; + + return { + parents: 0, + interior: { + X1, + }, + } as UnionXcmMultiLocation; + } + + const X1 = isEthereumAddress(accountId) + ? [{ AccountKey20: { key: accountId } }] + : [{ AccountId32: { id: accountId } }]; + + return { + parents: 0, + interior: { + X1, + }, + } as UnionXcmMultiLocation; +}; diff --git a/src/createXcmTypes/util/createXcmVersionedAssetId.spec.ts b/src/createXcmTypes/util/createXcmVersionedAssetId.spec.ts new file mode 100644 index 00000000..a2a0b222 --- /dev/null +++ b/src/createXcmTypes/util/createXcmVersionedAssetId.spec.ts @@ -0,0 +1,74 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { createXcmVersionedAssetId } from './createXcmVersionedAssetId'; + +describe('createXcmVersionedAssetId', () => { + it('Should correctly construct an XcmVersionedAssetId for XCM V3', () => { + const xcmVersion = 3; + const destFeesAssetId = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + + const expected = { + V3: { + Concrete: { + parents: '2', + interior: { + X2: [ + { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }, + { + AccountKey20: { + network: null, + key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14', + }, + }, + ], + }, + }, + }, + }; + + expect(createXcmVersionedAssetId(destFeesAssetId, xcmVersion)).toEqual(expected); + }); + it('Should correctly construct an XcmVersionedAssetId for XCM V4', () => { + const xcmVersion = 4; + const destFeesAssetId = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + + const expected = { + V4: { + parents: '2', + interior: { + X2: [ + { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }, + { + AccountKey20: { + network: null, + key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14', + }, + }, + ], + }, + }, + }; + + expect(createXcmVersionedAssetId(destFeesAssetId, xcmVersion)).toEqual(expected); + }); + it('Should correctly error when given an XCM version less than 3', () => { + const xcmVersion = 2; + const destFeesAssetId = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + + const err = () => createXcmVersionedAssetId(destFeesAssetId, xcmVersion); + + expect(err).toThrow('XcmVersion must be greater than 2'); + }); +}); diff --git a/src/createXcmTypes/util/createXcmVersionedAssetId.ts b/src/createXcmTypes/util/createXcmVersionedAssetId.ts new file mode 100644 index 00000000..cd8c25c3 --- /dev/null +++ b/src/createXcmTypes/util/createXcmVersionedAssetId.ts @@ -0,0 +1,28 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { resolveMultiLocation } from '../../util/resolveMultiLocation'; +import { UnionXcmMultiLocation, XcmVersionedAssetId } from '../types'; + +export const createXcmVersionedAssetId = (destFeesAssetId: string, xcmVersion: number): XcmVersionedAssetId => { + if (xcmVersion < 3) { + throw new BaseError('XcmVersion must be greater than 2', BaseErrorsEnum.InvalidXcmVersion); + } + + let remoteFeesId: XcmVersionedAssetId; + const location = JSON.parse(destFeesAssetId) as UnionXcmMultiLocation; + + if (xcmVersion === 3) { + remoteFeesId = { + V3: { + Concrete: location, + }, + }; + } else { + remoteFeesId = { + V4: resolveMultiLocation(location, 4), + }; + } + + return remoteFeesId; +}; diff --git a/src/createXcmTypes/util/isRelayNativeAsset.ts b/src/createXcmTypes/util/isRelayNativeAsset.ts index 6134e453..49e56492 100644 --- a/src/createXcmTypes/util/isRelayNativeAsset.ts +++ b/src/createXcmTypes/util/isRelayNativeAsset.ts @@ -6,6 +6,10 @@ export const isRelayNativeAsset = (tokens: string[], assetId: string): boolean = return true; } + if (assetId === `{"parents":"0","interior":{"Here":""}}` || assetId === `{"parents":"1","interior":{"Here":""}}`) { + return true; + } + for (const token of tokens) { if (token.toLowerCase() === assetId.toLowerCase()) { return true; diff --git a/src/createXcmTypes/util/resolveAssetTransferType.spec.ts b/src/createXcmTypes/util/resolveAssetTransferType.spec.ts new file mode 100644 index 00000000..d907e995 --- /dev/null +++ b/src/createXcmTypes/util/resolveAssetTransferType.spec.ts @@ -0,0 +1,82 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { resolveAssetTransferType } from './resolveAssetTransferType'; + +describe('resolveAssetTransferType', () => { + describe('RemoteReserve', () => { + it('Should correctly resolve the asset transfer RemoteReserve type for XCM V3', () => { + const assetTransferType = 'RemoteReserve'; + const xcmVersion = 3; + const remoteTransferLocationStr = '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}'; + + const expected = { + RemoteReserve: { + V3: { + Parents: '1', + Interior: { + X1: { + Parachain: '1000', + }, + }, + }, + }, + }; + + expect(resolveAssetTransferType(assetTransferType, xcmVersion, remoteTransferLocationStr)).toEqual(expected); + }); + it('Should correctly resolve the asset transfer RemoteReserve type for XCM V4', () => { + const assetTransferType = 'RemoteReserve'; + const xcmVersion = 4; + const remoteTransferLocationStr = '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}'; + + const expected = { + RemoteReserve: { + V4: { + Parents: '1', + Interior: { + X1: [{ Parachain: '1000' }], + }, + }, + }, + }; + + expect(resolveAssetTransferType(assetTransferType, xcmVersion, remoteTransferLocationStr)).toEqual(expected); + }); + }); + describe('LocalReserve', () => { + it('Should correctly resolve the asset transfer LocalReserve type', () => { + const assetTransferType = 'LocalReserve'; + const xcmVersion = 4; + + const expected = { + LocalReserve: 'null', + }; + + expect(resolveAssetTransferType(assetTransferType, xcmVersion)).toEqual(expected); + }); + }); + describe('DestinationReserve', () => { + it('Should correctly resolve the asset transfer DestinationReserve type', () => { + const assetTransferType = 'DestinationReserve'; + const xcmVersion = 4; + + const expected = { + DestinationReserve: 'null', + }; + + expect(resolveAssetTransferType(assetTransferType, xcmVersion)).toEqual(expected); + }); + }); + describe('Teleport', () => { + it('Should correctly resolve the asset transfer Teleport type', () => { + const assetTransferType = 'Teleport'; + const xcmVersion = 4; + + const expected = { + Teleport: 'null', + }; + + expect(resolveAssetTransferType(assetTransferType, xcmVersion)).toEqual(expected); + }); + }); +}); diff --git a/src/createXcmTypes/util/resolveAssetTransferType.ts b/src/createXcmTypes/util/resolveAssetTransferType.ts index d86fa7d0..fc2504cc 100644 --- a/src/createXcmTypes/util/resolveAssetTransferType.ts +++ b/src/createXcmTypes/util/resolveAssetTransferType.ts @@ -1,63 +1,41 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import { BaseError, BaseErrorsEnum } from "../../errors"; -import { AssetTransferType } from "../../types"; +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { AssetTransferType } from '../../types'; +import { resolveMultiLocation } from '../../util/resolveMultiLocation'; +import { UnionXcmMultiLocation } from '../types'; -export const resolveAssetTransferType = (assetTransferType: string, xcmVersion: number, remoteTransferLocation?: string): AssetTransferType => { - console.log(remoteTransferLocation); +export const resolveAssetTransferType = ( + assetTransferType: string, + xcmVersion: number, + remoteTransferLocationStr?: string, +): AssetTransferType => { + if (xcmVersion < 3) { + throw new BaseError('Bridge txs require XCM version 3 or higher', BaseErrorsEnum.InvalidXcmVersion); + } - if (xcmVersion < 3) { - throw new BaseError('Bridge txs require XCM version 3 or higher', BaseErrorsEnum.InvalidXcmVersion); - } + let transferType: AssetTransferType; + let remoteTransferLocation: UnionXcmMultiLocation; + if (remoteTransferLocationStr && assetTransferType === 'RemoteReserve') { + remoteTransferLocation = resolveMultiLocation(remoteTransferLocationStr, xcmVersion); + transferType = + xcmVersion === 3 + ? { RemoteReserve: { V3: remoteTransferLocation } } + : { RemoteReserve: { V4: remoteTransferLocation } }; + } else { + transferType = + assetTransferType === 'LocalReserve' + ? { + LocalReserve: 'null', + } + : assetTransferType === 'DestinationReserve' + ? { + DestinationReserve: 'null', + } + : { + Teleport: 'null', + }; + } - let transferType: AssetTransferType; - - if (xcmVersion === 3) { - transferType = assetTransferType === 'RemoteReserve' ? - { - RemoteReserve: { - V3: { - parents: 1, - interior: { - X1: { - Parachain: 1000 - } - } - } - } - } : assetTransferType === 'LocalReserve' ? - { - LocalReserve: 'null' - } : assetTransferType === 'DestinationReserve' ? - { - DestinationReserve: 'null' - } : { - Teleport: 'null' - } - } else { - transferType = assetTransferType === 'RemoteReserve' ? { - RemoteReserve: { - V4: { - parents: 1, - interior: { - X1: [ - { - Parachain: 1000 - } - ] - } - } - } - } : assetTransferType === 'LocalReserve' ? - { - LocalReserve: 'null' - } : assetTransferType === 'DestinationReserve' ? - { - DestinationReserve: 'null' - } : { - Teleport: 'null' - } - } - - return transferType; -} \ No newline at end of file + return transferType; +}; diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index 7e831d90..a18c0aa9 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -12,7 +12,7 @@ import { checkAssetIdsAreOfSameAssetIdType, checkAssetIdsHaveNoDuplicates, checkAssetIdsLengthIsValid, - checkAssetLocationsAreValidGlobalConsensusLocations, + // checkAssetLocationsAreValidGlobalConsensusLocations, checkAssetsAmountMatch, checkIfNativeRelayChainAssetPresentInMultiAssetIdList, checkLiquidTokenTransferDirectionValidity, @@ -700,7 +700,7 @@ describe('checkXcmVersionIsValidForPaysWithFeeDest', () => { const err = () => checkXcmVersionIsValidForPaysWithFeeDest(Direction.SystemToPara, xcmVersion, paysWithFeeDest); - expect(err).toThrow('paysWithFeeDest requires XCM version 3'); + expect(err).toThrow('paysWithFeeDest requires XCM version 3 or greater'); }); it('Should correctly not throw an error if paysWithFeeDest is provided and xcmVersion is at least 3', () => { const xcmVersion = 3; @@ -708,7 +708,7 @@ describe('checkXcmVersionIsValidForPaysWithFeeDest', () => { const err = () => checkXcmVersionIsValidForPaysWithFeeDest(Direction.SystemToPara, xcmVersion, paysWithFeeDest); - expect(err).not.toThrow('paysWithFeeDest requires XCM version 3'); + expect(err).not.toThrow('paysWithFeeDest requires XCM version 3 or greater'); }); it('Should correctly not throw an error if xcmDirection is ParaToSystem or ParaToPara', () => { @@ -717,7 +717,7 @@ describe('checkXcmVersionIsValidForPaysWithFeeDest', () => { const err = () => checkXcmVersionIsValidForPaysWithFeeDest(Direction.ParaToSystem, xcmVersion, paysWithFeeDest); - expect(err).not.toThrow('paysWithFeeDest requires XCM version 3'); + expect(err).not.toThrow('paysWithFeeDest requires XCM version 3 or greater'); }); }); @@ -759,20 +759,20 @@ describe('checkXcmVersionIsValidForSystemToBridge', () => { }); }); -describe('checkAssetLocationsAreValidGlobalConsensusLocations', () => { - it('Should correctly throw an error when asset locations are found without a global consens junction', () => { - const assetIds = [ - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, - `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`, - ]; +// describe('checkAssetLocationsAreValidGlobalConsensusLocations', () => { +// it('Should correctly throw an error when asset locations are found without a global consens junction', () => { +// const assetIds = [ +// `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, +// `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`, +// ]; - const err = () => checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); +// const err = () => checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); - expect(err).toThrow( - 'SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received {"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}},{"parents":"1","interior":{"X1":{"Parachain":"1836"}}', - ); - }); -}); +// expect(err).toThrow( +// 'SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received {"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}},{"parents":"1","interior":{"X1":{"Parachain":"1836"}}', +// ); +// }); +// }); describe('checkParaAssets', () => { it('Should correctly resolve when a valid symbol assetId is provided', async () => { diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index f2f4e057..5f13bb8b 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -6,7 +6,7 @@ import { isEthereumAddress } from '@polkadot/util-crypto'; import { MAX_ASSETS_FOR_TRANSFER, RELAY_CHAIN_IDS } from '../consts'; import { XcmPalletName } from '../createXcmCalls/util/establishXcmPallet'; -import { assetDestIsBridge } from '../createXcmTypes/util/assetDestIsBridge'; +// import { assetDestIsBridge } from '../createXcmTypes/util/assetDestIsBridge'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from '../createXcmTypes/util/foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from '../createXcmTypes/util/foreignAssetsMultiLocationExists'; import { getGlobalConsensusSystemName } from '../createXcmTypes/util/getGlobalConsensusSystemName'; @@ -933,32 +933,72 @@ export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { } }; -export const checkAssetLocationsAreValidGlobalConsensusLocations = (assetIds: string[]) => { - if (!assetDestIsBridge(assetIds)) { +/** + * Checks to ensure that all assets are locations for SystemToBridge transactions + * + * @param assetIds + */ +// export const checkAssetLocationsAreValidGlobalConsensusLocations = (assetIds: string[]) => { +// if (!assetDestIsBridge(assetIds)) { +// throw new BaseError( +// `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${assetIds.toString()}`, +// BaseErrorsEnum.InvalidAsset, +// ); +// } +// }; +/** + * Checks to ensure that required inputs are provided for SystemToBridge transactions + * + * @param paysWithFeeDest + * @param assetTransferType + * @param remoteReserveAssetTransferTypeLocation + * @param feesTransferType + * @param remoteReserveFeesTransferTypeLocation + */ +export const checkSystemToBridgeInputs = ( + paysWithFeeDest: string | undefined, + assetTransferType: string | undefined, + remoteReserveAssetTransferTypeLocation: string | undefined, + feesTransferType: string | undefined, + remoteReserveFeesTransferTypeLocation: string | undefined, +) => { + if (!paysWithFeeDest) { + throw new BaseError('paysWithFeeDest input is required for bridge transactions', BaseErrorsEnum.InvalidInput); + } + if (!assetTransferType) { + throw new BaseError('assetTransferType input is required for bridge transactions', BaseErrorsEnum.InvalidInput); + } + if (assetTransferType === 'RemoteReserve' && !remoteReserveAssetTransferTypeLocation) { throw new BaseError( - `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${assetIds.toString()}`, - BaseErrorsEnum.InvalidAsset, + 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', + BaseErrorsEnum.InvalidInput, + ); + } + if (!feesTransferType) { + throw new BaseError( + 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions', + BaseErrorsEnum.InvalidInput, + ); + } + if (feesTransferType === 'RemoteReserve' && !remoteReserveFeesTransferTypeLocation) { + throw new BaseError( + 'remoteReserveFeeAssetTransferTypeLocation input is required for bridge transactions when fee asset transfer type is RemoteReserve', + BaseErrorsEnum.InvalidInput, ); } }; -export const checkSystemToBridgeInputs = (paysWithFeeDest: string | undefined, assetTransferType: string | undefined, remoteReserveAssetTransferTypeLocation: string | undefined, feesTransferType: string | undefined, remoteReserveFeesTransferTypeLocation: string | undefined) => { +export const checkPaysWithFeeDestAssetIdIsInAssets = (assetIds: string[], paysWithFeeDest: string | undefined) => { if (!paysWithFeeDest) { - throw new BaseError('paysWithFeeDest input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - } - if (!assetTransferType) { - throw new BaseError('assetTransferType input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - } - if (assetTransferType === 'RemoteReserve' && !remoteReserveAssetTransferTypeLocation) { - throw new BaseError('remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', BaseErrorsEnum.InvalidInput); - } - if (!feesTransferType) { - throw new BaseError('remoteReserveAssetTransferTypeLocation input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - } - if (feesTransferType === 'RemoteReserve' && !remoteReserveFeesTransferTypeLocation) { - throw new BaseError('remoteReserveFeeAssetTransferTypeLocation input is required for bridge transactions when fee asset transfer type is RemoteReserve', BaseErrorsEnum.InvalidInput); - } -} + return; + } + + if (!assetIds.includes(paysWithFeeDest)) { + throw new BaseError( + `paysWithFeeDest asset must be present in assets to be transferred. Did not find ${paysWithFeeDest} in ${assetIds.toString()}`, + ); + } +}; /** * Checks to ensure that the xcmVersion is at least 3 if paysWithFeeDest is provided @@ -978,7 +1018,7 @@ export const checkXcmVersionIsValidForPaysWithFeeDest = ( xcmVersion && xcmVersion < 3 ) { - throw new BaseError('paysWithFeeDest requires XCM version 3', BaseErrorsEnum.InvalidXcmVersion); + throw new BaseError('paysWithFeeDest requires XCM version 3 or greater', BaseErrorsEnum.InvalidXcmVersion); } }; @@ -1085,7 +1125,16 @@ export const checkAssetIdInput = async ( */ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: CheckXcmTxInputsOpts) => { const { api, direction, assetIds, amounts, destChainId, xcmVersion, specName, registry, xcmPallet } = baseArgs; - const { paysWithFeeDest, isForeignAssetsTransfer, isLiquidTokenTransfer, isPrimaryParachainNativeAsset, assetTransferType, remoteReserveAssetTransferTypeLocation, feesTransferType, remoteReserveFeesTransferTypeLocation } = opts; + const { + paysWithFeeDest, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + isPrimaryParachainNativeAsset, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + } = opts; const relayChainInfo = registry.currentRelayRegistry; if (isPrimaryParachainNativeAsset) { @@ -1176,10 +1225,17 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationIdLength(assetIds); checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); - checkXcmVersionIsValidForSystemToBridge(xcmVersion); getGlobalConsensusSystemName(destChainId); - checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); - checkSystemToBridgeInputs(paysWithFeeDest, assetTransferType, remoteReserveAssetTransferTypeLocation, feesTransferType, remoteReserveFeesTransferTypeLocation); + // checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); + checkSystemToBridgeInputs( + paysWithFeeDest, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + ); + checkPaysWithFeeDestAssetIdIsInAssets(assetIds, paysWithFeeDest); + checkXcmVersionIsValidForSystemToBridge(xcmVersion); } if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { diff --git a/src/index.ts b/src/index.ts index 661774e3..270fc9e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,48 +3,3 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; - -import { ApiPromise, WsProvider } from '@polkadot/api'; - -import { AssetTransferApi } from './AssetTransferApi'; - -const main = async () => { - const provider = new WsProvider(`wss://rococo-asset-hub-rpc.polkadot.io`); - const api = await ApiPromise.create({ provider }); - await api.isReady; - const assetTransferApi = new AssetTransferApi(api, 'asset-hub-rococo', 4); - - const payload = await assetTransferApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId - '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', // destAddress - [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location - ], - ['1000000000000'], - { - sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', - format: 'payload', - xcmVersion: 4, - paysWithFeeDest: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"RemoteReserve":{"V4":{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"RemoteReserve":{"V4":{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}}}` - } - ); - - console.log('payload', JSON.stringify(payload)); - - const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx.toString(), 'payload'); - console.log('decodedPayload', decodedPayload); - - const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { - version: 4, - }); - - console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); - const payloadJSON = payloadExtrinsic.method.toJSON(); - console.log('payload json', payloadJSON); -}; - -main(); diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 22753d48..09d911de 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -147,7 +147,7 @@ describe('AssetTransferApi Integration Tests', () => { const res = await systemAssetsApi.createTransferTransaction( '1000', '5EnxxUmEbw8DkENKiYuZ1DwQuMoB2UWEQJZZXrTsxoz7SpgG', - ['{"parents":"1","interior":{"X2": [{"Parachain":"2125"}, {"GeneralIndex": "0"}]}}'], + ['{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}'], ['100'], { format: 'call', @@ -167,7 +167,7 @@ describe('AssetTransferApi Integration Tests', () => { const res = await systemAssetsApi.createTransferTransaction( '1000', '5EnxxUmEbw8DkENKiYuZ1DwQuMoB2UWEQJZZXrTsxoz7SpgG', - ['{"parents":"1","interior":{"X2": [{"Parachain":"2125"}, {"GeneralIndex": "0"}]}}'], + ['{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}'], ['100'], { format: 'call', @@ -235,8 +235,7 @@ describe('AssetTransferApi Integration Tests', () => { assetIds: string[], format: T, xcmVersion: number, - refTime?: string, - proofSize?: string, + opts: CreateXcmCallOpts, ): Promise> => { return await ataAPI.createTransferTransaction( destination, @@ -245,12 +244,15 @@ describe('AssetTransferApi Integration Tests', () => { ['1000000000'], { format, - weightLimit: { - refTime, - proofSize, - }, + weightLimit: opts.weightLimit, xcmVersion, sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', + paysWithFeeDest: opts.paysWithFeeDest, + assetTransferType: opts.assetTransferType, + remoteReserveAssetTransferTypeLocation: opts.remoteReserveAssetTransferTypeLocation, + feesTransferType: opts.remoteReserveFeesTransferTypeLocation, + remoteReserveFeesTransferTypeLocation: opts.remoteReserveFeesTransferTypeLocation, + customXcmOnDest: opts.customXcmOnDest, }, ); }; @@ -265,10 +267,24 @@ describe('AssetTransferApi Integration Tests', () => { ], 'call', 3, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, + ); + expect(res.tx).toEqual( + '0x1f0d03020109079edaa802030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee000300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140003040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); - expect(res.tx).toEqual('0x1f0b03020109079edaa8020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee0000000001a10f411f'); }); it('Should correctly build a payload for a transferAssets for V3', async () => { @@ -278,10 +294,23 @@ describe('AssetTransferApi Integration Tests', () => { [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], 'payload', 3, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, + ); + expect(res.tx.toHex()).toEqual( + '0x29011f0d0302010902030400020109020002286bee000300020109020003040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); - expect(res.tx.toHex()).toEqual('0x05011f0b03020109020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503'); }); it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { const res = await bridgeBaseSystemCreateTx( @@ -290,8 +319,19 @@ describe('AssetTransferApi Integration Tests', () => { [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], 'submittable', 3, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, ); expect(res.tx.toRawType()).toEqual('Extrinsic'); }); @@ -305,10 +345,23 @@ describe('AssetTransferApi Integration Tests', () => { [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], 'call', 4, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, + ); + expect(res.tx).toEqual( + '0x1f0d04020109020404020109020002286bee0004020109020004040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); - expect(res.tx).toEqual('0x1f0b04020109020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f'); }); it('Should correctly build a `transferAssets` payload for V4', async () => { const res = await bridgeBaseSystemCreateTx( @@ -317,10 +370,23 @@ describe('AssetTransferApi Integration Tests', () => { [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], 'payload', 4, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, + ); + expect(res.tx.toHex()).toEqual( + '0x21011f0d04020109050404020109050002286bee0004020109050004040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); - expect(res.tx.toHex()).toEqual('0x01011f0b04020109050400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503'); }); it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { const res = await bridgeBaseSystemCreateTx( @@ -329,12 +395,73 @@ describe('AssetTransferApi Integration Tests', () => { [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], 'submittable', 4, - '1000', - '2000', + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, ); expect(res.tx.toRawType()).toEqual('Extrinsic'); }); }); + it('Should correctly error when provided an XCM version less than 3', async () => { + await expect(async () => { + await bridgeBaseSystemCreateTx( + systemAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + 'submittable', + 2, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }, + ); + }).rejects.toThrow('paysWithFeeDest requires XCM version 3 or greater'); + }); + it('Should correctly error when a paysWithFeeDest is provided that does not exist in provided assetIds', async () => { + await expect(async () => { + await bridgeBaseSystemCreateTx( + systemAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], + 'submittable', + 4, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + paysWithFeeDest: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}`, + }, + ); + }).rejects.toThrow( + 'paysWithFeeDest asset must be present in assets to be transferred. Did not find {"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}} in {"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', + ); + }); }); describe('SystemToPara', () => { const foreignBaseSystemCreateTx = async ( @@ -428,7 +555,7 @@ describe('AssetTransferApi Integration Tests', () => { return await ataAPI.createTransferTransaction( '2023', // Since this is not `0` we know this is to a parachain '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - ['{"parents":"1","interior":{"X2": [{"Parachain":"2125"}, {"GeneralIndex": "0"}]}}'], + ['{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}'], ['100'], { format, @@ -448,7 +575,7 @@ describe('AssetTransferApi Integration Tests', () => { return await ataAPI.createTransferTransaction( '2125', // Since this is not `0` we know this is to a parachain '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - [`{"parents":"1","interior":{"X2": [{"Parachain":"2125"}, {"GeneralIndex": "0"}]}}`], + [`{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}`], ['100'], { @@ -1030,7 +1157,7 @@ describe('AssetTransferApi Integration Tests', () => { }; const statemineNativeAssetIdArr = ['KSM']; const statemineForeignAssetIdArr = [ - `{"parents":"1","interior":{"X2": [{"Parachain":"2125"}, {"GeneralIndex": "0"}]}}`, + `{"parents":"1","interior":{"X2":[{"Parachain":"2125"},{"GeneralIndex":"0"}]}}`, ]; describe('V2', () => { diff --git a/src/testHelpers/adjustedMockSystemApiV1004000.ts b/src/testHelpers/adjustedMockSystemApiV1004000.ts index fb24ca5f..75767b01 100644 --- a/src/testHelpers/adjustedMockSystemApiV1004000.ts +++ b/src/testHelpers/adjustedMockSystemApiV1004000.ts @@ -315,7 +315,120 @@ export const adjustedMockSystemApi = { metadata: assetsMetadata, }, foreignAssets: { - asset: foreignAsset, + asset: Object.assign(foreignAsset, { + entries: () => { + const storageKeyData = [ + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e1afcbaa957381128fa2f32d7b2871124020209079edaa8020300c9f05326311bc2a55426761bec20057685fb80f7', + { + toHuman: () => { + return [{ parents: '1', interior: { X2: [{ Parachain: '2125' }, { GeneralIndex: '0' }] } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e40829062ff2f47b747a4ffd8da5b653f020209079edaa8020300b34a6924a02100ba6ef12af1c798285e8f7a16ee', + { + toHuman: () => { + return [{ parents: '2', interior: { X1: { GlobalConsensus: 'Rococo' } } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e8e98a2f8b983529ae6515f403f4b5bd5020209079edaa8020300c3d088842dcf02c13699f936bb83dfbbc6f721ab', + { + toHuman: () => { + return [{ parents: '2', interior: { X1: { GlobalConsensus: 'Polkadot' } } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2eb3a5911d7874cd9283dcfd1fe247aa0d010100b11c', + { + toHuman: () => { + return [ + { + parents: '2', + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: '11155111' } } }, + { AccountKey20: { network: null, key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14' } }, + ], + }, + }, + ]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + ]; + + return storageKeyData; + }, + }), metadata: foreignAssetsMetadata, }, poolAssets: { diff --git a/src/testHelpers/adjustedMockSystemApiV1011000.ts b/src/testHelpers/adjustedMockSystemApiV1011000.ts index dabb6a28..6c9ae840 100644 --- a/src/testHelpers/adjustedMockSystemApiV1011000.ts +++ b/src/testHelpers/adjustedMockSystemApiV1011000.ts @@ -213,6 +213,13 @@ const foreignAsset = (asset: UnionXcmMultiLocation): Promise { + const storageKeyData = [ + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e1afcbaa957381128fa2f32d7b2871124020209079edaa8020300c9f05326311bc2a55426761bec20057685fb80f7', + { + toHuman: () => { + return [{ parents: '1', interior: { X2: [{ Parachain: '2125' }, { GeneralIndex: '0' }] } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e40829062ff2f47b747a4ffd8da5b653f020209079edaa8020300b34a6924a02100ba6ef12af1c798285e8f7a16ee', + { + toHuman: () => { + return [{ parents: '2', interior: { X1: { GlobalConsensus: 'Rococo' } } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2e8e98a2f8b983529ae6515f403f4b5bd5020209079edaa8020300c3d088842dcf02c13699f936bb83dfbbc6f721ab', + { + toHuman: () => { + return [{ parents: '2', interior: { X1: { GlobalConsensus: 'Polkadot' } } }]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2eb3a5911d7874cd9283dcfd1fe247aa0d010100b11c', + { + toHuman: () => { + return [ + { + parents: '2', + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: '11155111' } } }, + { AccountKey20: { network: null, key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14' } }, + ], + }, + }, + ]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + [ + Object.assign( + '0x30e64a56026f4b5e3c2d196283a9a17dd34371a193a751eea5883e9553457b2eba06e8d16807b79060f24185ad2a4ede02010904', + { + toHuman: () => { + return [ + { + parents: '2', + interior: { + X2: [ + { GlobalConsensus: { Ethereum: { chainId: '11155111' } } }, + { AccountKey20: { network: null, key: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14' } }, + ], + }, + }, + , + ]; + }, + }, + ), + { + owner: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + issuer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + admin: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + freezer: '5GjRnmh5o3usSYzVmsxBWzHEpvJyHK4tKNPhjpUR3ASrruBy', + supply: '0x00000000000000001bc16d674ec80000', + deposit: 100000000000, + minBalance: 1, + isSufficient: false, + accounts: 1, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + ]; + + return storageKeyData; + }, + }), metadata: foreignAssetsMetadata, }, poolAssets: { diff --git a/src/testHelpers/metadata/assetHubWestendV1011000.ts b/src/testHelpers/metadata/assetHubWestendV1011000.ts index caf8121e..ff1806e0 100644 --- a/src/testHelpers/metadata/assetHubWestendV1011000.ts +++ b/src/testHelpers/metadata/assetHubWestendV1011000.ts @@ -1,3 +1,4 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -export const assetHubWestendV1011000 = '0x6d6574610e4907000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173656502011450686173650001146576656e7454010445000118746f70696373690201185665633c543e000054086461737365745f6875625f77657374656e645f72756e74696d653052756e74696d654576656e740001581853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04007c01bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040084017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000a00485472616e73616374696f6e5061796d656e7404008c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000b0038417373657454785061796d656e7404009001c870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e743a3a4576656e743c52756e74696d653e000d0044436f6c6c61746f7253656c656374696f6e0400bc01a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0015001c53657373696f6e0400c4015470616c6c65745f73657373696f6e3a3a4576656e740016002458636d7051756575650400c801a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e001e002c506f6c6b61646f7458636d0400cc016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e001f002843756d756c757358636d0400d101018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e002000304d65737361676551756575650400d501019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e0023001c5574696c6974790400e501015470616c6c65745f7574696c6974793a3a4576656e74002800204d756c74697369670400f101017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0029001450726f78790400f901017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002a00184173736574730400050201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365313e0032001c556e697175657304000902017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e003300104e66747304002502016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e00340034466f726569676e4173736574730400410201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365323e003500504e66744672616374696f6e616c697a6174696f6e0400450201b070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e3a3a4576656e743c52756e74696d653e00360028506f6f6c4173736574730400490201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365333e0037003c4173736574436f6e76657273696f6e04004d02019c70616c6c65745f61737365745f636f6e76657273696f6e3a3a4576656e743c52756e74696d653e003800604173736574436f6e76657273696f6e4d6967726174696f6e0400610201ac70616c6c65745f61737365745f636f6e76657273696f6e5f6f70733a3a4576656e743c52756e74696d653e00c80000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320003040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616434014472656c61795f636861696e3a3a48617368000404e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f6861736880013c4f7074696f6e3c58636d486173683e000504b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000840c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100008c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c8870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e741870616c6c6574144576656e7404045400010838417373657454784665655061696410010c77686f000130543a3a4163636f756e74496400012861637475616c5f666565180144417373657442616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e00012061737365745f6964940148436861726765417373657449644f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652cb8686173206265656e2070616964206279206077686f6020696e20616e206173736574206061737365745f6964602e444173736574526566756e644661696c65640401486e61746976655f616d6f756e745f6b65707418013042616c616e63654f663c543e000104f4412073776170206f662074686520726566756e6420696e206e61746976652063757272656e6379206261636b20746f206173736574206661696c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657494102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f729801244a756e6374696f6e73000098100c78636d087633246a756e6374696f6e73244a756e6374696f6e73000124104865726500000008583104009c01204a756e6374696f6e00010008583208009c01204a756e6374696f6e00009c01204a756e6374696f6e0002000858330c009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00030008583410009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00040008583514009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00050008583618009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e0006000858371c009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00070008583820009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e000800009c100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e00010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964b40118426f6479496400011070617274b80120426f6479506172740008003c476c6f62616c436f6e73656e7375730400a801244e6574776f726b496400090000a00000061000a404184f7074696f6e04045401a80108104e6f6e6500000010536f6d650400a80000010000a8100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000ac000003140000000800b00000061800b4100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e6465780400a0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000b8100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74a0010c753332000100204672616374696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c75333200040000bc0c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000128404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c6573c001445665633c543a3a4163636f756e7449643e0000046c4e657720496e76756c6e657261626c65732077657265207365742e44496e76756c6e657261626c6541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640001047441206e657720496e76756c6e657261626c65207761732061646465642e4c496e76756c6e657261626c6552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400020470416e20496e76756c6e657261626c65207761732072656d6f7665642e504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000304a4546865206e756d626572206f6620646573697265642063616e6469646174657320776173207365742e404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0004046c5468652063616e64696461637920626f6e6420776173207365742e3843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0005045c41206e65772063616e646964617465206a6f696e65642e5043616e646964617465426f6e64557064617465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00060470426f6e64206f6620612063616e64696461746520757064617465642e4043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400070460412063616e646964617465207761732072656d6f7665642e4443616e6469646174655265706c616365640c010c6f6c64000130543a3a4163636f756e74496400010c6e6577000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804f4416e206163636f756e7420776173207265706c6163656420696e207468652063616e646964617465206c69737420627920616e6f74686572206f6e652e68496e76616c6964496e76756c6e657261626c65536b69707065640401286163636f756e745f6964000130543a3a4163636f756e7449640009085501416e206163636f756e742077617320756e61626c6520746f20626520616464656420746f2074686520496e76756c6e657261626c65732062656361757365207468657920646964206e6f742068617665206b657973c8726567697374657265642e204f7468657220496e76756c6e657261626c6573206d61792068617665206265656e207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00000020000c40c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001043c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000004c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d65d0015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ed801204c6f636174696f6e00012c64657374696e6174696f6ed801204c6f636174696f6e00011c6d6573736167650d01011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e736539010120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6e5d0101404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696ed801204c6f636174696f6e0001186173736574737d01013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ed801204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ed801204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ed801204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f72d4012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6ecd01014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f71756572696572d801204c6f636174696f6e0001506d617962655f61637475616c5f717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e67d801204c6f636174696f6e0001106665657319010118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696ed801204c6f636174696f6e0001186173736574737d01013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d0102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72d401144572726f72000100144572726f720401146572726f72d401144572726f7200020000d4100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000d8102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72dc01244a756e6374696f6e730000dc102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400e001484172633c5b4a756e6374696f6e3b20315d3e0001000858320400f001484172633c5b4a756e6374696f6e3b20325d3e0002000858330400f401484172633c5b4a756e6374696f6e3b20335d3e0003000858340400f801484172633c5b4a756e6374696f6e3b20345d3e0004000858350400fc01484172633c5b4a756e6374696f6e3b20355d3e0005000858360400010101484172633c5b4a756e6374696f6e3b20365d3e0006000858370400050101484172633c5b4a756e6374696f6e3b20375d3e0007000858380400090101484172633c5b4a756e6374696f6e3b20385d3e00080000e000000301000000e400e4102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e00010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964b40118426f6479496400011070617274b80120426f6479506172740008003c476c6f62616c436f6e73656e7375730400ec01244e6574776f726b496400090000e804184f7074696f6e04045401ec0108104e6f6e6500000010536f6d650400ec0000010000ec102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000f000000302000000e400f400000303000000e400f800000304000000e400fc00000305000000e400010100000306000000e400050100000307000000e400090100000308000000e4000d010c2c73746167696e675f78636d0876340c58636d041043616c6c00000400110101585665633c496e737472756374696f6e3c43616c6c3e3e0000110100000215010015010c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040019010118417373657473000000545265736572766541737365744465706f7369746564040019010118417373657473000100585265636569766554656c65706f727465644173736574040019010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736539010120526573706f6e73650001286d61785f77656967687428011857656967687400011c717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731901011841737365747300012c62656e6566696369617279d801204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731901011841737365747300011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6501014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400dc0140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400690101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d01012c417373657446696c74657200012c62656e6566696369617279d801204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d01012c417373657446696c74657200011077616e741901011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d01012c417373657446696c74657200011c72657365727665d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0001186173736574736d01012c417373657446696c74657200120030427579457865637574696f6e080110666565732101011441737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d01012458636d3c43616c6c3e0015002c536574417070656e64697804000d01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473190101184173736574730001187469636b6574d801204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040019010118417373657473001c002c4578706563744173736574040019010118417373657473001d00304578706563744f726967696e04005d0101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400690101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400e401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bec01244e6574776f726b496400012c64657374696e6174696f6edc0140496e746572696f724c6f636174696f6e00010c78636d0d01011c58636d3c28293e002600244c6f636b41737365740801146173736574210101144173736574000120756e6c6f636b6572d801204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574210101144173736574000118746172676574d801204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365742101011441737365740001146f776e6572d801204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365742101011441737365740001186c6f636b6572d801204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d801204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696e5d0101404f7074696f6e3c4c6f636174696f6e3e002f00001901102c73746167696e675f78636d08763414617373657418417373657473000004001d0101285665633c41737365743e00001d010000022101002101102c73746167696e675f78636d087634146173736574144173736574000008010869642501011c4173736574496400010c66756e2901012c46756e676962696c69747900002501102c73746167696e675f78636d0876341461737365741c4173736574496400000400d801204c6f636174696f6e00002901102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c6504002d0101344173736574496e7374616e6365000100002d01102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d000500003101000003080000000800350100000310000000080039010c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400190101184173736574730001003c457865637574696f6e526573756c7404003d0101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040045010198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400550101384d617962654572726f72436f6465000500003d0104184f7074696f6e0404540141010108104e6f6e6500000010536f6d6504004101000001000041010000040810d40045010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014901045300000400510101185665633c543e000049010c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e646578a0010c7533320001106e616d654d010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d654d010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72a0010c7533320001146d696e6f72a0010c7533320001147061746368a0010c75333200004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000510100000249010055010c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005901018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005901018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d0104184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000061010c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000065010c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000069010c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ed801204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006d01102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400190101184173736574730000001057696c6404007101012457696c644173736574000100007101102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f6608010869642501011c4173736574496400010c66756e7501013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400a0010c75333200020030416c6c4f66436f756e7465640c010869642501011c4173736574496400010c66756e7501013c57696c6446756e676962696c697479000114636f756e74a0010c753332000300007501102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000079010c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100007d01080c78636d3c56657273696f6e656441737365747300010c08563204008101013c76323a3a4d756c74694173736574730001000856330400b501013c76333a3a4d756c746941737365747300030008563404001901012876343a3a417373657473000400008101100c78636d087632286d756c746961737365742c4d756c7469417373657473000004008501013c5665633c4d756c746941737365743e000085010000028901008901100c78636d087632286d756c74696173736574284d756c74694173736574000008010869648d01011c4173736574496400010c66756ead01012c46756e676962696c69747900008d01100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400910101344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e000100009101100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72950101244a756e6374696f6e7300009501100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400990101204a756e6374696f6e0001000858320800990101204a756e6374696f6e0000990101204a756e6374696f6e0002000858330c00990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0003000858341000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0004000858351400990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0005000858361800990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0006000858371c00990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0007000858382000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e000800009901100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726b9d0101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b9d0101244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b9d0101244e6574776f726b496400010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964a5010118426f6479496400011070617274a9010120426f647950617274000800009d010c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000a1010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e0000a5010c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400a0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000a9010c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74a0010c753332000100204672616374696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c75333200040000ad01100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c650400b10101344173736574496e7374616e636500010000b101100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e00060000b501100c78636d087633286d756c746961737365742c4d756c746941737365747300000400b901013c5665633c4d756c746941737365743e0000b901000002bd0100bd01100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964c101011c4173736574496400010c66756ec501012c46756e676962696c6974790000c101100c78636d087633286d756c746961737365741c4173736574496400010820436f6e637265746504009401344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000c501100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c650400c90101344173736574496e7374616e636500010000c901100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000cd01080c78636d4456657273696f6e65644c6f636174696f6e00010c08563204009101014476323a3a4d756c74694c6f636174696f6e000100085633040094014476333a3a4d756c74694c6f636174696f6e0003000856340400d8013076343a3a4c6f636174696f6e00040000d1010c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000d0011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5010c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f72e101014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696ed90101484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d901085c63756d756c75735f7072696d6974697665735f636f7265584167677265676174654d6573736167654f726967696e00010c104865726500000018506172656e740001001c5369626c696e670400dd01011850617261496400020000dd010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000e10110346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c6400040000e5010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74e90101384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e9010418526573756c7408045401ed01044501680108084f6b0400ed01000000000c4572720400680000010000ed010000040000f1010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74e90101384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f501083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000f9010c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74e90101384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465780102010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd01086461737365745f6875625f77657374656e645f72756e74696d652450726f78795479706500011c0c416e790000002c4e6f6e5472616e736665720001002c43616e63656c50726f7879000200184173736574730003002841737365744f776e65720004003041737365744d616e6167657200050020436f6c6c61746f72000600000102000005040005020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964100128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964100128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964100128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964100128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964100128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964100128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964100128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964100128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964100128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964100128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964100128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964100128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964100128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964100128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c3870616c6c65745f756e69717565731870616c6c6574144576656e7408045400044900016c1c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73110201385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c75651d020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572210201504f7074696f6e3c543a3a4163636f756e7449643e0018048c546865207072696365207761732073657420666f722074686520696e7374616e63652e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019049c54686520707269636520666f722074686520696e7374616e6365207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001a044c416e206974656d2077617320626f756768742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000011020000021000150204184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000019020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00001d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000210204184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000025020c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572210201504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696e210201504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a6572210201504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e65150201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73110201385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f69641502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572210201504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e0022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d150201444f7074696f6e3c543a3a4974656d49643e0001246174747269627574653d02018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e047c54686520604576656e746020656e756d206f6620746869732070616c6c657429020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00002d020c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6e390201385072696365446972656374696f6e000039020c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c52656365697665000100003d020c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001082c55736564546f436c61696d0400100130436f6c6c656374696f6e4964000000405472616e7366657244697361626c65640001000041020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964940128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964940128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964940128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964940128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964940128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964940128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964940128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964940128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964940128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964940128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964940128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964940128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964940128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964940128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657445020c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c6574144576656e74040454000108444e66744672616374696f6e616c697a65641401386e66745f636f6c6c656374696f6e100148543a3a4e6674436f6c6c656374696f6e496400010c6e6674100120543a3a4e667449640001246672616374696f6e73180144417373657442616c616e63654f663c543e0001146173736574100130417373657449644f663c543e00012c62656e6566696369617279000130543a3a4163636f756e7449640000049c416e204e465420776173207375636365737366756c6c79206672616374696f6e616c697a65642e284e6674556e69666965641001386e66745f636f6c6c656374696f6e100148543a3a4e6674436f6c6c656374696f6e496400010c6e6674100120543a3a4e667449640001146173736574100130417373657449644f663c543e00012c62656e6566696369617279000130543a3a4163636f756e74496400010498416e204e465420776173207375636365737366756c6c792072657475726e6564206261636b2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964100128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964100128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964100128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964100128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964100128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964100128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964100128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964100128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964100128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964100128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964100128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964100128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964100128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964100128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744d020c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c6574144576656e740404540001182c506f6f6c4372656174656410011c63726561746f72000130543a3a4163636f756e7449640488546865206163636f756e74207468617420637265617465642074686520706f6f6c2e011c706f6f6c5f696451020124543a3a506f6f6c496408490154686520706f6f6c206964206173736f63696174656420776974682074686520706f6f6c2e204e6f7465207468617420746865206f72646572206f662074686520617373657473206d6179206e6f74206265f47468652073616d6520617320746865206f726465722073706563696669656420696e207468652063726561746520706f6f6c2065787472696e7369632e0130706f6f6c5f6163636f756e74000130543a3a4163636f756e744964046c546865206163636f756e74204944206f662074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964084101546865206964206f6620746865206c697175696469747920746f6b656e7320746861742077696c6c206265206d696e746564207768656e206173736574732061726520616464656420746f207468697314706f6f6c2e00041d0141207375636365737366756c2063616c6c206f66207468652060437265617465506f6f6c602065787472696e7369632077696c6c206372656174652074686973206576656e742e384c697175696469747941646465641c010c77686f000130543a3a4163636f756e74496404b8546865206163636f756e74207468617420746865206c6971756964697479207761732074616b656e2066726f6d2e011c6d696e745f746f000130543a3a4163636f756e74496404d4546865206163636f756e74207468617420746865206c697175696469747920746f6b656e732077657265206d696e74656420746f2e011c706f6f6c5f696451020124543a3a506f6f6c496404e054686520706f6f6c206964206f662074686520706f6f6c207468617420746865206c69717569646974792077617320616464656420746f2e0140616d6f756e74315f70726f7669646564180128543a3a42616c616e636504e454686520616d6f756e74206f662074686520666972737420617373657420746861742077617320616464656420746f2074686520706f6f6c2e0140616d6f756e74325f70726f7669646564180128543a3a42616c616e636504e854686520616d6f756e74206f6620746865207365636f6e6420617373657420746861742077617320616464656420746f2074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964049c546865206964206f6620746865206c7020746f6b656e207468617420776173206d696e7465642e013c6c705f746f6b656e5f6d696e746564180128543a3a42616c616e636504d054686520616d6f756e74206f66206c7020746f6b656e7320746861742077657265206d696e746564206f6620746861742069642e0104250141207375636365737366756c2063616c6c206f662074686520604164644c6971756964697479602065787472696e7369632077696c6c206372656174652074686973206576656e742e404c697175696469747952656d6f76656420010c77686f000130543a3a4163636f756e74496404dc546865206163636f756e74207468617420746865206c697175696469747920746f6b656e732077657265206275726e65642066726f6d2e012c77697468647261775f746f000130543a3a4163636f756e74496404c0546865206163636f756e74207468617420746865206173736574732077657265207472616e7366657272656420746f2e011c706f6f6c5f696451020124543a3a506f6f6c496404c054686520706f6f6c206964207468617420746865206c6971756964697479207761732072656d6f7665642066726f6d2e011c616d6f756e7431180128543a3a42616c616e636504f454686520616d6f756e74206f66207468652066697273742061737365742074686174207761732072656d6f7665642066726f6d2074686520706f6f6c2e011c616d6f756e7432180128543a3a42616c616e636504f854686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656d6f7665642066726f6d2074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964049c546865206964206f6620746865206c7020746f6b656e207468617420776173206275726e65642e013c6c705f746f6b656e5f6275726e6564180128543a3a42616c616e636504d054686520616d6f756e74206f66206c7020746f6b656e7320746861742077657265206275726e6564206f6620746861742069642e01387769746864726177616c5f6665655502011c5065726d696c6c04744c6971756964697479207769746864726177616c20666565202825292e0204310141207375636365737366756c2063616c6c206f6620746865206052656d6f76654c6971756964697479602065787472696e7369632077696c6c206372656174652074686973206576656e742e3053776170457865637574656414010c77686f000130543a3a4163636f756e74496404b45768696368206163636f756e74207761732074686520696e7374696761746f72206f662074686520737761702e011c73656e645f746f000130543a3a4163636f756e74496404c0546865206163636f756e74207468617420746865206173736574732077657265207472616e7366657272656420746f2e0124616d6f756e745f696e180128543a3a42616c616e636504bc54686520616d6f756e74206f662074686520666972737420617373657420746861742077617320737761707065642e0128616d6f756e745f6f7574180128543a3a42616c616e636504c454686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656365697665642e0110706174685902013842616c616e6365506174683c543e08fc54686520726f757465206f6620617373657420494473207769746820616d6f756e747320746861742074686520737761702077656e74207468726f7567682eec452e672e2028412c20616d6f756e745f696e29202d3e2028446f742c20616d6f756e745f6f757429202d3e2028422c20616d6f756e745f6f757429030835014173736574732068617665206265656e20636f6e7665727465642066726f6d206f6e6520746f20616e6f746865722e20426f74682060537761704578616374546f6b656e466f72546f6b656e60d8616e64206053776170546f6b656e466f724578616374546f6b656e602077696c6c2067656e65726174652074686973206576656e742e485377617043726564697445786563757465640c0124616d6f756e745f696e180128543a3a42616c616e636504bc54686520616d6f756e74206f662074686520666972737420617373657420746861742077617320737761707065642e0128616d6f756e745f6f7574180128543a3a42616c616e636504c454686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656365697665642e0110706174685902013842616c616e6365506174683c543e08fc54686520726f757465206f6620617373657420494473207769746820616d6f756e747320746861742074686520737761702077656e74207468726f7567682eec452e672e2028412c20616d6f756e745f696e29202d3e2028446f742c20616d6f756e745f6f757429202d3e2028422c20616d6f756e745f6f7574290404bc4173736574732068617665206265656e20636f6e7665727465642066726f6d206f6e6520746f20616e6f746865722e1c546f756368656408011c706f6f6c5f696451020124543a3a506f6f6c4964044c546865204944206f662074686520706f6f6c2e010c77686f000130543a3a4163636f756e7449640484546865206163636f756e7420696e6974696174696e672074686520746f7563682e05040d01506f6f6c20686173206265656e20746f756368656420696e206f7264657220746f2066756c66696c6c206f7065726174696f6e616c20726571756972656d656e74732e047c54686520604576656e746020656e756d206f6620746869732070616c6c657451020000040894940055020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c753332000059020000025d02005d020000040894180061020c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c6574144576656e74040454000104504d69677261746564546f4e65774163636f756e740c011c706f6f6c5f696451020124543a3a506f6f6c49640428506f6f6c27732049442e01347072696f725f6163636f756e74000130543a3a4163636f756e7449640460506f6f6c2773207072696f72206163636f756e742049442e012c6e65775f6163636f756e74000130543a3a4163636f756e7449640458506f6f6c2773206e6577206163636f756e742049442e0004f8496e646963617465732074686174206120706f6f6c20686173206265656e206d6967726174656420746f20746865206e6577206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574650208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000690200000234006d02000002710200710200000408101000750208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ea0014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d657902016473705f72756e74696d653a3a52756e74696d65537472696e670000790200000502007d0208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c000081020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73850201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b6579738d0201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85020000028902008902000004083838008d02000002380091020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373950201845065724469737061746368436c6173733c57656967687473506572436c6173733e000095020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454019902000c01186e6f726d616c990201045400012c6f7065726174696f6e616c99020104540001246d616e6461746f72799902010454000099020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e7369639d0201384f7074696f6e3c5765696768743e0001246d61785f746f74616c9d0201384f7074696f6e3c5765696768743e00012072657365727665649d0201384f7074696f6e3c5765696768743e00009d0204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000a1020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178a50201545065724469737061746368436c6173733c7533323e0000a5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000a902082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c7536340000ad02082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d657902013452756e74696d65537472696e67000124696d706c5f6e616d657902013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973b102011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000b102040c436f7704045401b502000400b502000000b502000002b90200b9020000040831011000bd020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574c102000002c50200c5020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480134000c0138757365645f62616e647769647468c90201345573656442616e647769647468000138706172615f686561645f68617368dd0201244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616ce102018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000c9020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e67cd02018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e0000cd02042042547265654d617008044b01dd01045601d102000400d502000000d1020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c7533320000d502000002d90200d90200000408dd01d10200dd0204184f7074696f6e04045401340108104e6f6e6500000010536f6d650400340000010000e10204184f7074696f6e04045401e5020108104e6f6e6500000010536f6d650400e5020000010000e5020c4c706f6c6b61646f745f7072696d6974697665730876373855706772616465476f41686561640001081441626f72740000001c476f416865616400010000e9020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480134000c0138757365645f62616e647769647468c90201345573656442616e64776964746800013868726d705f77617465726d61726b150201804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616ce102018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000ed020c4c706f6c6b61646f745f7072696d6974697665730876375c50657273697374656456616c69646174696f6e446174610804480134044e01100010012c706172656e745f68656164f1020120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74340104480001306d61785f706f765f73697a6510010c7533320000f1020c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e0000f50204184f7074696f6e04045401f9020108104e6f6e6500000010536f6d650400f9020000010000f9020c4c706f6c6b61646f745f7072696d69746976657308763748557067726164655265737472696374696f6e0001041c50726573656e7400000000fd020c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465730103014442547265655365743c5665633c75383e3e000001030420425472656553657404045401380004008d0200000005030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616434014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974790903018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c730d0301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c730d0301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000009030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c75333200000d03000002110300110300000408dd0115030015030c4c706f6c6b61646f745f7072696d6974697665730876374c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164dd0201304f7074696f6e3c486173683e000019030c4c706f6c6b61646f745f7072696d697469766573087637644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d731d0301484173796e634261636b696e67506172616d7300001d03104c706f6c6b61646f745f7072696d697469766573087637346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c75333200002103089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040034012452656c61794861736800002503042042547265654d617008044b01dd010456012103000400290300000029030000022d03002d0300000408dd01210300310300000235030035030860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401dd0100080124726563697069656e74dd01010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e000039030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800003d030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174614103015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653801345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4103089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461ed02015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465fd02015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765734503016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d657373616765734d0301a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000450300000249030049030860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d65737361676500004d03042042547265654d617008044b01dd0104560151030004005903000000510300000255030055030860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e000059030000025d03005d0300000408dd0151030061030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e65030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e69030c5873746167696e675f70617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454017103045300000400790301185665633c543e000071030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964310101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e737503011c526561736f6e73000075030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000079030000027103007d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018103045300000400850301185665633c543e000081030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720131011c42616c616e6365011800080108696431010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000850300000281030089030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d03045300000400990301185665633c543e00008d030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640191031c42616c616e63650118000801086964910301084964000118616d6f756e7418011c42616c616e636500009103086461737365745f6875625f77657374656e645f72756e74696d654452756e74696d65486f6c64526561736f6e000104504e66744672616374696f6e616c697a6174696f6e0400950301a070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e3a3a486f6c64526561736f6e0036000095030c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c657428486f6c64526561736f6e000104384672616374696f6e616c697a65640000000099030000028d03009d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400a50301185665633c543e0000a1030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401ed011c42616c616e63650118000801086964ed0101084964000118616d6f756e7418011c42616c616e63650000a503000002a10300a9030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fc001445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565b00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6eb503014c41646a7573746d656e74446972656374696f6e00011464656c7461b00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ed01011408496404000001244163636f756e74496400000014496e6465780400b10301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400ac01205b75383b2032305d00040000b103000006ed0100b5030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e63726561736500000020446563726561736500010000b9030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000c1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c001185665633c543e0000c5030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c903045300000400cd0301185665633c543e0000c9030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000cd03000002c90300d1030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000124447365745f696e76756c6e657261626c657304010c6e6577c001445665633c543a3a4163636f756e7449643e000034310153657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e20546865736520636f6c6c61746f7273206d75737420646f20736f6d65d07072657061726174696f6e2c206e616d656c7920746f206861766520726567697374657265642073657373696f6e206b6579732e0059015468652063616c6c2077696c6c2072656d6f766520616e79206163636f756e747320746861742068617665206e6f742072656769737465726564206b6579732066726f6d20746865207365742e20546861742069732c5d016974206973206e6f6e2d61746f6d69633b207468652063616c6c6572206163636570747320616c6c20604163636f756e74496460732070617373656420696e20606e657760205f696e646976696475616c6c795f206173310161636365707461626c6520496e76756c6e657261626c65732c20616e64206973206e6f742070726f706f73696e672061205f7365745f206f66206e657720496e76756c6e657261626c65732e005901546869732063616c6c20646f6573206e6f74206d61696e7461696e206d757475616c206578636c75736976697479206f662060496e76756c6e657261626c65736020616e64206043616e64696461746573602e20497461016973207265636f6d6d656e64656420746f207573652061206261746368206f6620606164645f696e76756c6e657261626c656020616e64206072656d6f76655f696e76756c6e657261626c656020696e73746561642e204151016062617463685f616c6c602063616e20616c736f206265207573656420746f20656e666f7263652061746f6d69636974792e20496620616e792063616e646964617465732061726520696e636c7564656420696e4d01606e6577602c20746865792073686f756c642062652072656d6f7665642077697468206072656d6f76655f696e76756c6e657261626c655f63616e6469646174656020616674657220657865637574696f6e2e00944d7573742062652063616c6c65642062792074686520605570646174654f726967696e602e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200011455015365742074686520696465616c206e756d626572206f66206e6f6e2d696e76756c6e657261626c6520636f6c6c61746f72732e204966206c6f776572696e672074686973206e756d6265722c207468656e2074686561016e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e2041736964652066726f6d2074686174206564676520636173652c350174686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f72652063616e64696461746573207468616e207468652064657369726564206e756d6265722e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00021c78536574207468652063616e64696461637920626f6e6420616d6f756e742e0051014966207468652063616e64696461637920626f6e6420697320696e6372656173656420627920746869732063616c6c2c20616c6c2063757272656e742063616e64696461746573207768696368206861766520614d016465706f736974206c6f776572207468616e20746865206e657720626f6e642077696c6c206265206b69636b65642066726f6d20746865206c69737420616e6420676574207468656972206465706f73697473146261636b2e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041455014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e001901546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f775c604d696e456c696769626c65436f6c6c61746f7273602e406164645f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400051045014164642061206e6577206163636f756e74206077686f6020746f20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e206077686f60206d75737420686176651d01726567697374657265642073657373696f6e206b6579732e204966206077686f6020697320612063616e6469646174652c20746865792077696c6c2062652072656d6f7665642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e744964000610610152656d6f766520616e206163636f756e74206077686f602066726f6d20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e2060496e76756c6e657261626c657360206d75737428626520736f727465642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e2c7570646174655f626f6e6404012c6e65775f6465706f73697418013042616c616e63654f663c543e00071c5d01557064617465207468652063616e64696461637920626f6e64206f6620636f6c6c61746f722063616e64696461746520606f726967696e6020746f2061206e657720616d6f756e7420606e65775f6465706f736974602e00410153657474696e67206120606e65775f6465706f736974602074686174206973206c6f776572207468616e207468652063757272656e74206465706f736974207768696c6520606f726967696e60206973e06f6363757079696e67206120746f702d604465736972656443616e646964617465736020736c6f74206973206e6f7420616c6c6f7765642e005901546869732063616c6c2077696c6c206661696c20696620606f726967696e60206973206e6f74206120636f6c6c61746f722063616e6469646174652c20746865207570646174656420626f6e64206973206c6f77657219017468616e20746865206d696e696d756d2063616e64696461637920626f6e642c20616e642f6f722074686520616d6f756e742063616e6e6f742062652072657365727665642e4c74616b655f63616e6469646174655f736c6f7408011c6465706f73697418013042616c616e63654f663c543e000118746172676574000130543a3a4163636f756e74496400081c4d015468652063616c6c657220606f726967696e60207265706c6163657320612063616e64696461746520607461726765746020696e2074686520636f6c6c61746f722063616e646964617465206c6973742062795501726573657276696e6720606465706f736974602e2054686520616d6f756e7420606465706f73697460207265736572766564206279207468652063616c6c6572206d7573742062652067726561746572207468616ee0746865206578697374696e6720626f6e64206f66207468652074617267657420697420697320747279696e6720746f207265706c6163652e005901546869732063616c6c2077696c6c206661696c206966207468652063616c6c657220697320616c7265616479206120636f6c6c61746f722063616e646964617465206f7220696e76756c6e657261626c652c20746865550163616c6c657220646f6573206e6f74206861766520726567697374657265642073657373696f6e206b6579732c2074686520746172676574206973206e6f74206120636f6c6c61746f722063616e6469646174652cbc616e642f6f722074686520606465706f7369746020616d6f756e742063616e6e6f742062652072657365727665642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400014444546f6f4d616e7943616e646964617465730000048c5468652070616c6c65742068617320746f6f206d616e792063616e646964617465732e5c546f6f466577456c696769626c65436f6c6c61746f7273000104ac4c656176696e6720776f756c6420726573756c7420696e20746f6f206665772063616e646964617465732e40416c726561647943616e6469646174650002047c4163636f756e7420697320616c726561647920612063616e6469646174652e304e6f7443616e6469646174650003046c4163636f756e74206973206e6f7420612063616e6469646174652e50546f6f4d616e79496e76756c6e657261626c65730004048454686572652061726520746f6f206d616e7920496e76756c6e657261626c65732e4c416c7265616479496e76756c6e657261626c650005048c4163636f756e7420697320616c726561647920616e20496e76756c6e657261626c652e3c4e6f74496e76756c6e657261626c650006047c4163636f756e74206973206e6f7420616e20496e76756c6e657261626c652e5c4e6f4173736f63696174656456616c696461746f7249640007049c4163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049442e5856616c696461746f724e6f74526567697374657265640008048c56616c696461746f72204944206973206e6f742079657420726567697374657265642e6c496e73657274546f43616e6469646174654c6973744661696c65640009049c436f756c64206e6f7420696e7365727420696e207468652063616e646964617465206c6973742e7452656d6f766546726f6d43616e6469646174654c6973744661696c6564000a04a4436f756c64206e6f742072656d6f76652066726f6d207468652063616e646964617465206c6973742e344465706f736974546f6f4c6f77000b04f44e6577206465706f73697420616d6f756e7420776f756c642062652062656c6f7720746865206d696e696d756d2063616e64696461637920626f6e642e6455706461746543616e6469646174654c6973744661696c6564000c0490436f756c64206e6f7420757064617465207468652063616e646964617465206c6973742e40496e73756666696369656e74426f6e64000d0429014465706f73697420616d6f756e7420697320746f6f206c6f7720746f2074616b652074686520746172676574277320736c6f7420696e207468652063616e646964617465206c6973742e5054617267657449734e6f7443616e646964617465000e042d0154686520746172676574206163636f756e7420746f206265207265706c6163656420696e207468652063616e646964617465206c697374206973206e6f7420612063616e6469646174652e404964656e746963616c4465706f736974000f040d015468652075706461746564206465706f73697420616d6f756e7420697320657175616c20746f2074686520616d6f756e7420616c72656164792072657365727665642e40496e76616c6964556e726573657276650010043d0143616e6e6f74206c6f7765722063616e64696461637920626f6e64207768696c65206f6363757079696e6720612066757475726520636f6c6c61746f7220736c6f7420696e20746865206c6973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed903000002dd0300dd030000040800e10300e103086461737365745f6875625f77657374656e645f72756e74696d652c53657373696f6e4b657973000004011061757261e50301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000e503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c69630000040004013c737232353531393a3a5075626c69630000e90300000408ed033800ed030c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d0000f1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973e103011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ef9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e503045300000400fd0301185665633c543e0000fd03000002e503000104084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c75363400000504000004080104100009040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401dd010453000004000d04012c42547265655365743c543e00000d040420425472656553657404045401dd0100040011040000001104000002dd010015040000021904001904086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74dd01011850617261496400011473746174651d0401344f7574626f756e6453746174650001347369676e616c735f6578697374200110626f6f6c00012c66697273745f696e6465780102010c7531360001286c6173745f696e6465780102010c75313600001d04086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000210400000408dd010102002504086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e6669674461746100000c014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c753332000029040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c0404540001145473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031449014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626578746f6c6420746f2073757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041445014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e798866757274686572206d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c7533320005144d014f76657277726974657320746865206e756d626572206f6620706167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c73010174686174206d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c6460040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f7204045400010c384261645175657565436f6e666967000004110153657474696e672074686520717565756520636f6e666967206661696c65642073696e6365206f6e65206f66206974732076616c7565732077617320696e76616c69642e40416c726561647953757370656e6465640001048c54686520657865637574696f6e20697320616c72656164792073757370656e6465642e38416c7265616479526573756d65640002048454686520657865637574696f6e20697320616c726561647920726573756d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31040c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572cd01014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572350401644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f74696679390401404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696ecd01014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e73654104014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000350404184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000390404184f7074696f6e040454013d040108104e6f6e6500000010536f6d6504003d0400000100003d04000004080808004104080c78636d4456657273696f6e6564526573706f6e736500010c08563204004504013076323a3a526573706f6e736500020008563304005504013076333a3a526573706f6e736500030008563404003901013076343a3a526573706f6e73650004000045040c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304008101012c4d756c74694173736574730001003c457865637574696f6e526573756c740400490401504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000490404184f7074696f6e040454014d040108104e6f6e6500000010536f6d6504004d0400000100004d0400000408105104005104100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c650019000055040c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400b501012c4d756c74694173736574730001003c457865637574696f6e526573756c7404003d0101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040059040198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400550101384d617962654572726f72436f64650005000059040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d04045300000400650401185665633c543e00005d040c0c78636d0876332850616c6c6574496e666f0000180114696e646578a0010c7533320001106e616d6561040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6561040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72a0010c7533320001146d696e6f72a0010c7533320001147061746368a0010c753332000061040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000065040000025d040069040000040810cd01006d040000040c3028100071040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017504045300000400790401185665633c543e0000750400000408cd01100079040000027504007d040c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e745461726765747304008104013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000810404184f7074696f6e04045401380108104e6f6e6500000010536f6d65040038000001000085040000040c10008904008904080c78636d4056657273696f6e6564417373657449640001080856330400c101012c76333a3a4173736574496400030008563404002501012c76343a3a41737365744964000400008d040c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e74696669657201ed01304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572cd01014456657273696f6e65644c6f636174696f6e0001186c6f636b6572cd01014456657273696f6e65644c6f636174696f6e000124636f6e73756d657273910401d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000091040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019504045300000400990401185665633c543e0000950400000408ed01180099040000029504009d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a104045300000400a50401185665633c543e0000a1040000040818cd0100a504000002a10400a9040c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001381073656e6408011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d657373616765ad040154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765ed0401b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ed80134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e150201484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ecd010158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ecd010158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f6173736574730801186173736574737d010150426f783c56657273696f6e65644173736574733e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e8c7472616e736665725f6173736574735f7573696e675f747970655f616e645f7468656e1c011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001506173736574735f7472616e736665725f7479706519050144426f783c5472616e73666572547970653e00013872656d6f74655f666565735f696489040154426f783c56657273696f6e6564417373657449643e000148666565735f7472616e736665725f7479706519050144426f783c5472616e73666572547970653e000148637573746f6d5f78636d5f6f6e5f64657374ad040154426f783c56657273696f6e656458636d3c28293e3e0001307765696768745f6c696d69747901012c5765696768744c696d6974000dc055015472616e73666572206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207573696e67206578706c69636974207472616e7366657268747970657320666f722061737365747320616e6420666565732e0059016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206d61792062652074656c65706f727461626c6520746f206064657374602e2043616c6c6572206d757374ec70726f766964652074686520606173736574735f7472616e736665725f747970656020746f206265207573656420666f722060617373657473603a5101202d20605472616e73666572547970653a3a4c6f63616c52657365727665603a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a44657374696e6174696f6e52657365727665603a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a52656d6f746552657365727665287265736572766529603a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f206072657365727665606101202020636861696e20746f206d6f76652072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f74686572550120202058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e205479706963616c6c79942020207468652072656d6f746520607265736572766560206973204173736574204875622e4501202d20605472616e73666572547970653a3a54656c65706f7274603a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746fe82020206d696e742f74656c65706f72742061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0055014f6e207468652064657374696e6174696f6e20636861696e2c2061732077656c6c20617320616e7920696e7465726d65646961727920686f70732c2060427579457865637574696f6e60206973207573656420746f210162757920657865637574696f6e207573696e67207472616e73666572726564206061737365747360206964656e746966696564206279206072656d6f74655f666565735f6964602e59014d616b65207375726520656e6f756768206f662074686520737065636966696564206072656d6f74655f666565735f69646020617373657420697320696e636c7564656420696e2074686520676976656e206c69737461016f662060617373657473602e206072656d6f74655f666565735f6964602073686f756c6420626520656e6f75676820746f2070617920666f7220607765696768745f6c696d6974602e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0045016072656d6f74655f666565735f696460206d61792075736520646966666572656e74207472616e736665722074797065207468616e2072657374206f6620606173736574736020616e642063616e2062659c737065636966696564207468726f7567682060666565735f7472616e736665725f74797065602e0061015468652063616c6c6572206e6565647320746f207370656369667920776861742073686f756c642068617070656e20746f20746865207472616e7366657272656420617373657473206f6e6365207468657920726561636841017468652060646573746020636861696e2e205468697320697320646f6e65207468726f756768207468652060637573746f6d5f78636d5f6f6e5f646573746020706172616d657465722c207768696368fc636f6e7461696e732074686520696e737472756374696f6e7320746f2065786563757465206f6e2060646573746020617320612066696e616c20737465702e7c20205468697320697320757375616c6c792061732073696d706c652061733a510120206058636d28766563215b4465706f7369744173736574207b206173736574733a2057696c6428416c6c436f756e746564286173736574732e6c656e282929292c2062656e6566696369617279207d5d29602c3101202062757420636f756c6420626520736f6d657468696e67206d6f72652065786f746963206c696b652073656e64696e6720746865206061737365747360206576656e20667572746865722e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d3d01202072656c617920746f2070617261636861696e2c206f72206028706172656e74733a20322c2028476c6f62616c436f6e73656e737573282e2e292c202e2e29296020746f2073656e642066726f6df4202070617261636861696e206163726f737320612062726964676520746f20616e6f746865722065636f73797374656d2064657374696e6174696f6e2e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e3d012d20606173736574735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e73666572207468652060617373657473602e2d012d206072656d6f74655f666565735f6964603a204f6e65206f662074686520696e636c7564656420606173736574736020746f206265206265207573656420746f2070617920666565732e49012d2060666565735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e736665722074686520606665657360206173736574732e59012d2060637573746f6d5f78636d5f6f6e5f64657374603a205468652058434d20746f206265206578656375746564206f6e2060646573746020636861696e20617320746865206c6173742073746570206f6620746865590120207472616e736665722c20776869636820616c736f2064657465726d696e657320776861742068617070656e7320746f2074686520617373657473206f6e207468652064657374696e6174696f6e20636861696e2e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead04080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400b104015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400cd04015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000d01015076343a3a58636d3c52756e74696d6543616c6c3e00040000b1040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400b50401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000b504000002b90400b9040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008101012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008101012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008101012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736545040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738101012c4d756c746941737365747300012c62656e6566696369617279910101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738101012c4d756c746941737365747300011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c65010168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040095010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200012c62656e6566696369617279910101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000e003445786368616e6765417373657408011067697665bd0401404d756c7469417373657446696c74657200011c726563656976658101012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473bd0401404d756c7469417373657446696c74657200011c72657365727665910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473bd0401404d756c7469417373657446696c74657200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e000118617373657473bd0401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573890101284d756c746941737365740001307765696768745f6c696d6974c904012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400b104014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400b104014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738101012c4d756c74694173736574730001187469636b6574910101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000bd04100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504008101012c4d756c74694173736574730000001057696c640400c104013857696c644d756c7469417373657400010000c104100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869648d01011c4173736574496400010c66756ec504013c57696c6446756e676962696c69747900010000c504100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000c9040c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000cd040c0c78636d0876330c58636d041043616c6c00000400d10401585665633c496e737472756374696f6e3c43616c6c3e3e0000d104000002d50400d5040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400b501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400b501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400b501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736555040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473b501012c4d756c746941737365747300012c62656e65666963696172799401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473b501012c4d756c7469417373657473000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6501014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400980154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400dd0401445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473e10401404d756c7469417373657446696c74657200012c62656e65666963696172799401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000e003445786368616e676541737365740c011067697665e10401404d756c7469417373657446696c74657200011077616e74b501012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473e10401404d756c7469417373657446696c74657200011c726573657276659401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f000118617373657473e10401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573bd0101284d756c746941737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400cd04012458636d3c43616c6c3e0015002c536574417070656e6469780400cd04012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473b501012c4d756c74694173736574730001187469636b65749401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400b501012c4d756c7469417373657473001c002c45787065637441737365740400b501012c4d756c7469417373657473001d00304578706563744f726967696e0400d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400dd0401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e04009c01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726ba801244e6574776f726b496400012c64657374696e6174696f6e980154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e002600244c6f636b41737365740801146173736574bd0101284d756c74694173736574000120756e6c6f636b65729401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574bd0101284d756c746941737365740001187461726765749401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574bd0101284d756c746941737365740001146f776e65729401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574bd0101284d756c746941737365740001186c6f636b65729401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04009401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696ed90401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000d90404184f7074696f6e04045401940108104e6f6e6500000010536f6d650400940000010000dd040c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6e9401344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f7765696768742801185765696768740000e104100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400b501012c4d756c74694173736574730000001057696c640400e504013857696c644d756c7469417373657400010000e504100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964c101011c4173736574496400010c66756ee904013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400a0010c75333200020030416c6c4f66436f756e7465640c01086964c101011c4173736574496400010c66756ee904013c57696c6446756e676962696c697479000114636f756e74a0010c75333200030000e904100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000ed04080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400f104015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304000105015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000d05015076343a3a58636d3c52756e74696d6543616c6c3e00040000f1040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400f50401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000f504000002f90400f9040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008101012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008101012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008101012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736545040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738101012c4d756c746941737365747300012c62656e6566696369617279910101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738101012c4d756c746941737365747300011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6cfd040168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040095010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200012c62656e6566696369617279910101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000e003445786368616e6765417373657408011067697665bd0401404d756c7469417373657446696c74657200011c726563656976658101012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473bd0401404d756c7469417373657446696c74657200011c72657365727665910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473bd0401404d756c7469417373657446696c74657200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e000118617373657473bd0401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573890101284d756c746941737365740001307765696768745f6c696d6974c904012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400f104014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400f104014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738101012c4d756c74694173736574730001187469636b6574910101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000fd040c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000001050c0c78636d0876330c58636d041043616c6c00000400050501585665633c496e737472756374696f6e3c43616c6c3e3e0000050500000209050009050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400b501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400b501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400b501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736555040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473b501012c4d756c746941737365747300012c62656e65666963696172799401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473b501012c4d756c7469417373657473000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cfd04014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400980154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400dd0401445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473e10401404d756c7469417373657446696c74657200012c62656e65666963696172799401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000e003445786368616e676541737365740c011067697665e10401404d756c7469417373657446696c74657200011077616e74b501012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473e10401404d756c7469417373657446696c74657200011c726573657276659401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f000118617373657473e10401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573bd0101284d756c746941737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000105012458636d3c43616c6c3e0015002c536574417070656e64697804000105012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473b501012c4d756c74694173736574730001187469636b65749401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400b501012c4d756c7469417373657473001c002c45787065637441737365740400b501012c4d756c7469417373657473001d00304578706563744f726967696e0400d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400dd0401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e04009c01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726ba801244e6574776f726b496400012c64657374696e6174696f6e980154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e002600244c6f636b41737365740801146173736574bd0101284d756c74694173736574000120756e6c6f636b65729401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574bd0101284d756c746941737365740001187461726765749401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574bd0101284d756c746941737365740001146f776e65729401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574bd0101284d756c746941737365740001186c6f636b65729401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04009401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696ed90401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00000d050c2c73746167696e675f78636d0876340c58636d041043616c6c00000400110501585665633c496e737472756374696f6e3c43616c6c3e3e0000110500000215050015050c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040019010118417373657473000000545265736572766541737365744465706f7369746564040019010118417373657473000100585265636569766554656c65706f727465644173736574040019010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736539010120526573706f6e73650001286d61785f77656967687428011857656967687400011c717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731901011841737365747300012c62656e6566696369617279d801204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731901011841737365747300011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cfd04014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400dc0140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400690101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d01012c417373657446696c74657200012c62656e6566696369617279d801204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d01012c417373657446696c74657200011077616e741901011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d01012c417373657446696c74657200011c72657365727665d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0001186173736574736d01012c417373657446696c74657200120030427579457865637574696f6e080110666565732101011441737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d05012458636d3c43616c6c3e0015002c536574417070656e64697804000d05012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473190101184173736574730001187469636b6574d801204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040019010118417373657473001c002c4578706563744173736574040019010118417373657473001d00304578706563744f726967696e04005d0101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400690101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400e401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bec01244e6574776f726b496400012c64657374696e6174696f6edc0140496e746572696f724c6f636174696f6e00010c78636d0d01011c58636d3c28293e002600244c6f636b41737365740801146173736574210101144173736574000120756e6c6f636b6572d801204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574210101144173736574000118746172676574d801204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365742101011441737365740001146f776e6572d801204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365742101011441737365740001186c6f636b6572d801204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d801204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696e5d0101404f7074696f6e3c4c6f636174696f6e3e002f00001905105073746167696e675f78636d5f6578656375746f72187472616974733861737365745f7472616e73666572305472616e73666572547970650001102054656c65706f7274000000304c6f63616c526573657276650001004844657374696e6174696f6e526573657276650002003452656d6f7465526573657276650400cd01014456657273696f6e65644c6f636174696f6e000300001d050c2870616c6c65745f78636d1870616c6c6574144572726f720404540001602c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21050c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2505086062705f78636d5f6272696467655f6875625f726f757465722c4272696467655374617465000008014c64656c69766572795f6665655f666163746f723903012446697865645531323800013069735f636f6e676573746564200110626f6f6c000029050c7070616c6c65745f78636d5f6272696467655f6875625f726f757465721870616c6c65741043616c6c080454000449000104507265706f72745f6272696467655f7374617475730801246272696467655f69643401104832353600013069735f636f6e676573746564200110626f6f6c000004a84e6f74696669636174696f6e2061626f757420636f6e676573746564206272696467652071756575652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d05085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e01d90100180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f757273310501844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c7536340000310504184f7074696f6e0404540135050108104e6f6e6500000010536f6d650400350500000100003505085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e01d9010008011070726576d90101344d6573736167654f726967696e0001106e657874d90101344d6573736167654f726967696e0000390500000408d90110003d05085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561704105019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e000041050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000045050c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696ed90101484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696ed90101484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49050c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d050c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465780102010c75313600011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ee9050154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050000025505005505086461737365745f6875625f77657374656e645f72756e74696d652c52756e74696d6543616c6c00015c1853797374656d0400810201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d04003d0301d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400650301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003003450617261636861696e496e666f0400690301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0004002042616c616e6365730400a90301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000a0044436f6c6c61746f7253656c656374696f6e0400d10301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e0015001c53657373696f6e0400f10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016002458636d7051756575650400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e001e002c506f6c6b61646f7458636d0400a90401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e001f002843756d756c757358636d0400210501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e00200044546f526f636f636f58636d526f757465720400290501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f526f636f636f58636d526f757465722c2052756e74696d653e002200304d65737361676551756575650400450501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e0023001c5574696c69747904004d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e002800204d756c74697369670400590501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0029001450726f78790400610501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002a00184173736574730400690501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574732c2052756e74696d653e0032001c556e697175657304006d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e003300104e66747304007d0501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e00340034466f726569676e4173736574730400d10501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f726569676e4173736574732c2052756e74696d653e003500504e66744672616374696f6e616c697a6174696f6e0400d50501e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e66744672616374696f6e616c697a6174696f6e2c2052756e74696d653e00360028506f6f6c4173736574730400d90501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6f6c4173736574732c2052756e74696d653e0037003c4173736574436f6e76657273696f6e0400dd0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574436f6e76657273696f6e2c2052756e74696d653e003800604173736574436f6e76657273696f6e4d6967726174696f6e0400e50501f50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574436f6e76657273696f6e4d6967726174696f6e2c2052756e74696d653e00c8000059050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e745d0501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e745d0501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0504184f7074696f6e04045401f5010108104e6f6e6500000010536f6d650400f501000001000061050c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065650501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465780102010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f787954797065000114696e6465780102010c753136000118686569676874a00144426c6f636b4e756d626572466f723c543e0001246578745f696e646578a0010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0001107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065650501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e650504184f7074696f6e04045401fd010108104e6f6e6500000010536f6d650400fd01000001000069050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c01086964a0014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174651001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f790401086964a0014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e74730401086964a0014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c730401086964a0014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f790401086964a0014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c01086964a0014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c01086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c01086964a0014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c01086964a0014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e736665721001086964a0014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a650801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296010746861770801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f61737365740401086964a0014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f61737365740401086964a0014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e6572736869700801086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d1001086964a0014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d657461646174611001086964a0014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d657461646174610401086964a0014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d657461646174611401086964a0014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d657461646174610401086964a0014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f7374617475732001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c01086964a0014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0801086964a0014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c01086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f7665641001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f7563680401086964a0014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e640801086964a0014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e63650801086964a0014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f746865720801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f746865720801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b0801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d050c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016818637265617465080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573737105013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012c636865636b5f6f776e6572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00043c5844657374726f7920612073696e676c65206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000544c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00b454686973207265736574732074686520617070726f766564206163636f756e74206f6620746865206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73110201385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000d381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e004d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265f865697468657220746865206f776e6572206f662074686520606974656d60206f72207468652061646d696e206f662074686520636f6c6c656374696f6e2e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e001901496d706f7274616e74204e4f54453a205468652060617070726f76656460206163636f756e7420676574732072657365742061667465722065616368207472616e736665722e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c00012469735f66726f7a656e200110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c75651d020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011470726963657905015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00182c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520617373657420606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e001924a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71050c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73a0010c7533320001386974656d5f6d6574616461746173a0010c75333200012861747472696275746573a0010c7533320000750504184f7074696f6e04045401ad030108104e6f6e6500000010536f6d650400ad030000010000790504184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100007d050c2c70616c6c65745f6e6674731870616c6c65741043616c6c08045400044900019c1863726561746508011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e00003c090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650801146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e00013c190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0039012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c20737570657275736572590120207065726d697373696f6e73206f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e67982020607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573739d05013844657374726f795769746e6573730002449c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e00dc4e4f54453a2054686520636f6c6c656374696f6e206d75737420686176652030206974656d7320746f2062652064657374726f7965642e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00745765696768743a20604f286d202b2063202b206129602077686572653a782d20606d203d207769746e6573732e6974656d5f6d657461646174617360702d206063203d207769746e6573732e6974656d5f636f6e6669677360682d206061203d207769746e6573732e6174747269627574657360106d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fad0301504163636f756e7449644c6f6f6b75704f663c543e0001307769746e6573735f64617461a10501d84f7074696f6e3c4d696e745769746e6573733c543a3a4974656d49642c204465706f73697442616c616e63654f663c542c20493e3e3e000340a04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e45012d20607769746e6573735f64617461603a205768656e20746865206d696e7420747970652069732060486f6c6465724f6628636f6c6c656374696f6e5f696429602c207468656e20746865206f776e6564590120206974656d5f69642066726f6d207468617420636f6c6c656374696f6e206e6565647320746f2062652070726f76696465642077697468696e20746865207769746e6573732064617461206f626a6563742e20496661012020746865206d696e74207072696365206973207365742c207468656e2069742073686f756c64206265206164646974696f6e616c6c7920636f6e6669726d656420696e2074686520607769746e6573735f64617461602e0051014e6f74653a20746865206465706f7369742077696c6c2062652074616b656e2066726f6d2074686520606f726967696e6020616e64206e6f742074686520606f776e657260206f662074686520606974656d602e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296028666f7263655f6d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6974656d5f636f6e666967a90501284974656d436f6e66696700043405014d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2066726f6d20612070726976696c65676564206f726967696e2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265207468656c497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642ea82d20606974656d5f636f6e666967603a204120636f6e666967206f6620746865206e6577206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400052c5844657374726f7920612073696e676c65206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d7573746c626520746865206f776e6572206f662074686520606974656d602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000638c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642e942d20606974656d603a20546865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73110201385665633c543a3a4974656d49643e0007449c52652d6576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d7320746f2062652072656576616c75617465642e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f7220746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e28292960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000928a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129603c6c6f636b5f636f6c6c656374696f6e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346c6f636b5f73657474696e677385050148436f6c6c656374696f6e53657474696e6773000a30d8446973616c6c6f7773207370656369666965642073657474696e677320666f72207468652077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265206c6f636b65642eb42d20606c6f636b5f73657474696e6773603a205468652073657474696e677320746f206265206c6f636b65642e001d014e6f74653a206974277320706f737369626c6520746f206f6e6c79206c6f636b2873657429207468652073657474696e672c20627574206e6f7420746f20756e7365742069742e0064456d6974732060436f6c6c656374696f6e4c6f636b6564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000c40d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296058666f7263655f636f6c6c656374696f6e5f6f776e6572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000d28844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb02d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f283129605c666f7263655f636f6c6c656374696f6e5f636f6e666967080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e000e28884368616e67652074686520636f6e666967206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb82d2060636f6e666967603a20546865206e657720636f6e666967206f66207468697320636f6c6c656374696f6e2e0080456d6974732060436f6c6c656374696f6e436f6e6669674368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0001386d617962655f646561646c696e65150201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000f381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722ee42d20606974656d603a20546865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e49012d20606d617962655f646561646c696e65603a204f7074696f6e616c20646561646c696e6520666f722074686520617070726f76616c2e205370656369666965642062792070726f766964696e6720746865d8096e756d626572206f6620626c6f636b732061667465722077686963682074686520617070726f76616c2077696c6c206578706972650090456d69747320605472616e73666572417070726f76656460206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001038e443616e63656c206f6e65206f6620746865207472616e7366657220617070726f76616c7320666f722061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e25012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e01012d206064656c6567617465603a20546865206163636f756e74207468617420697320676f696e6720746f206c6f6f736520746865697220617070726f76616c2e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296070636c6561725f616c6c5f7472616e736665725f617070726f76616c73080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001134b043616e63656c20616c6c2074686520617070726f76616c73206f662061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a39012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e21012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e00a4456d6974732060416c6c417070726f76616c7343616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960506c6f636b5f6974656d5f70726f70657274696573100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c001244e8446973616c6c6f7773206368616e67696e6720746865206d65746164617461206f722061747472696275746573206f6620746865206974656d2e0041014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e506f66207468652060636f6c6c656374696f6e602e00b42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2069662074686520606974656d602e7c2d20606974656d603a20416e206974656d20746f206265206c6f636b65642e0d012d20606c6f636b5f6d65746164617461603a20537065636966696573207768657468657220746865206d657461646174612073686f756c64206265206c6f636b65642e61012d20606c6f636b5f61747472696275746573603a20537065636966696573207768657468657220746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d6573706163654c202073686f756c64206265206c6f636b65642e005d014e6f74653a20606c6f636b5f6174747269627574657360206166666563747320746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d657370616365206f6e6c792e45015768656e20746865206d65746164617461206f72206174747269627574657320617265206c6f636b65642c20697420776f6e277420626520706f737369626c652074686520756e6c6f636b207468656d2e0074456d69747320604974656d50726f706572746965734c6f636b6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001358a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129604c666f7263655f7365745f6174747269627574651801187365745f6173210201504f7074696f6e3c543a3a4163636f756e7449643e000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001444c0466f7263652d73657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e0039014966207468652061747472696275746520616c72656164792065786973747320616e64206974207761732073657420627920616e6f74686572206163636f756e742c20746865206465706f7369749c77696c6c2062652072657475726e656420746f207468652070726576696f7573206f776e65722e00bc2d20607365745f6173603a20416e206f7074696f6e616c206f776e6572206f6620746865206174747269627574652e39012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00153cb0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f283129605c617070726f76655f6974656d5f617474726962757465730c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0016242d01417070726f7665206974656d2773206174747269627574657320746f206265206368616e67656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00a42d2060636f6c6c656374696f6e603a204120636f6c6c656374696f6e206f6620746865206974656d2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732e49012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f206368616e67652061747472696275746573206f6620746865206974656d2e00bc456d69747320604974656d41747472696275746573417070726f76616c416464656460206f6e20737563636573732e7c63616e63656c5f6974656d5f617474726962757465735f617070726f76616c100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00011c7769746e657373ad05017c43616e63656c41747472696275746573417070726f76616c5769746e657373001728110143616e63656c207468652070726576696f75736c792070726f766964656420617070726f76616c20746f206368616e6765206974656d277320617474726962757465732e1101416c6c207468652070726576696f75736c7920736574206174747269627574657320627920746865206064656c6567617465602077696c6c2062652072656d6f7665642e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00f42d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e207468617420746865206974656d20697320636f6e7461696e65642077697468696e2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732ee02d206064656c6567617465603a205468652070726576696f75736c7920617070726f766564206163636f756e7420746f2072656d6f76652e00c4456d69747320604974656d41747472696275746573417070726f76616c52656d6f76656460206f6e20737563636573732e307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0018407453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001a3c8853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b3090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c28110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001d24e053657420746865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e507570646174655f6d696e745f73657474696e6773080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346d696e745f73657474696e67738d050105014d696e7453657474696e67733c42616c616e63654f663c542c20493e2c20426c6f636b4e756d626572466f723c543e2c20543a3a436f6c6c656374696f6e49643e001e2454557064617465206d696e742073657474696e67732e004d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c642062652074686520497373756572506f66207468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652ea42d20606d696e745f73657474696e6773603a20546865206e6577206d696e742073657474696e67732e00f0456d6974732060436f6c6c656374696f6e4d696e7453657474696e67735570646174656460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011470726963657905015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e001f2c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e002024a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e207061795f7469707304011074697073b105019c426f756e6465645665633c4974656d5469704f663c542c20493e2c20543a3a4d6178546970733e00211c5c416c6c6f777320746f207061792074686520746970732e00584f726967696e206d757374206265205369676e65642e00542d206074697073603a20546970732061727261792e0098456d697473206054697053656e7460206f6e20657665727920746970207472616e736665722e2c6372656174655f737761701801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001486d617962655f646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e00012c6d617962655f7072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e0001206475726174696f6e100144426c6f636b4e756d626572466f723c543e002240510152656769737465722061206e65772061746f6d696320737761702c206465636c6172696e6720616e20696e74656e74696f6e20746f2073656e6420616e20606974656d6020696e2065786368616e676520666f72fc60646573697265645f6974656d602066726f6d206f726967696e20746f20746172676574206f6e207468652063757272656e7420626c6f636b636861696e2e4d01546865207461726765742063616e206578656375746520746865207377617020647572696e67207468652073706563696669656420606475726174696f6e60206f6620626c6f636b732028696620736574292ef04164646974696f6e616c6c792c2074686520707269636520636f756c642062652073657420666f7220746865206465736972656420606974656d602e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652eec2d2060646573697265645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f66207468652064657369726564206974656d2ef42d2060646573697265645f6974656d603a205468652064657369726564206974656d20616e206f776e65722077616e747320746f20726563656976652e61012d20606d617962655f7072696365603a2054686520707269636520616e206f776e65722069732077696c6c696e6720746f20706179206f72207265636569766520666f7220746865206465736972656420606974656d602e49012d20606475726174696f6e603a204120646561646c696e6520666f722074686520737761702e205370656369666965642062792070726f766964696e6720746865206e756d626572206f6620626c6f636b73880961667465722077686963682074686520737761702077696c6c206578706972652e007c456d6974732060537761704372656174656460206f6e20737563636573732e2c63616e63656c5f737761700801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d49640023245843616e63656c20616e2061746f6d696320737761702e00584f726967696e206d757374206265205369676e65642e15014f726967696e206d75737420626520616e206f776e6572206f662074686520606974656d602069662074686520646561646c696e65206861736e277420657870697265642e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652e0084456d69747320605377617043616e63656c6c656460206f6e20737563636573732e28636c61696d5f7377617014013c73656e645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e645f6974656d100124543a3a4974656d4964000148726563656976655f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130726563656976655f6974656d100124543a3a4974656d49640001347769746e6573735f7072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e00243054436c61696d20616e2061746f6d696320737761702e390154686973206d6574686f6420657865637574657320612070656e64696e6720737761702c2074686174207761732063726561746564206279206120636f756e74657270617274206265666f72652e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ec2d206073656e645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652073656e742e8c2d206073656e645f6974656d603a20546865206974656d20746f2062652073656e742e09012d2060726563656976655f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652072656365697665642ea82d2060726563656976655f6974656d603a20546865206974656d20746f2062652072656365697665642ee42d20607769746e6573735f7072696365603a20412070726963652074686174207761732070726576696f75736c7920616772656564206f6e2e007c456d697473206053776170436c61696d656460206f6e20737563636573732e3c6d696e745f7072655f7369676e65640c01246d696e745f64617461bd050168426f783c5072655369676e65644d696e744f663c542c20493e3e0001247369676e6174757265c1050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e744964002534c84d696e7420616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00584f726967696e206d757374206265205369676e65642e005d012d20606d696e745f64617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2c51012020697473206d657461646174612c20617474726962757465732c2077686f2063616e206d696e742069742028604e6f6e656020666f7220616e796f6e652920616e6420756e74696c207768617420626c6f636b2420206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e39012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e20497373756572206f662074686520636f6c6c656374696f6e2e0068456d697473206049737375656460206f6e20737563636573732ed4456d69747320604174747269627574655365746020696620746865206174747269627574657320776572652070726f76696465642ed8456d69747320604974656d4d657461646174615365746020696620746865206d6574616461746120776173206e6f7420656d7074792e647365745f617474726962757465735f7072655f7369676e65640c011064617461cd05016c5072655369676e6564417474726962757465734f663c542c20493e0001247369676e6174757265c1050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e7449640026340101536574206174747269627574657320666f7220616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00f84f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f66207468652060646174612e6974656d602e0049012d206064617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2ccc20206174747269627574657320746f2075706461746520616e6420756e74696c207768617420626c6f636b206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e51012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e2041646d696e206f662074686520636f6c6c656374696f6e20666f722074686578202060436f6c6c656374696f6e4f776e657260206e616d6573706163652e00c4456d69747320604174747269627574655365746020666f7220656163682070726f7669646564206174747269627574652e1901456d69747320604974656d41747472696275746573417070726f76616c4164646564602069662074686520617070726f76616c207761736e277420736574206265666f72652ea8456d69747320605072655369676e65644174747269627574657353657460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81050c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e677385050148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c791502012c4f7074696f6e3c7533323e0001346d696e745f73657474696e67738d0501b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e000085050c2c70616c6c65745f6e66747314747970657320426974466c616773040454018905000400300144436f6c6c656374696f6e53657474696e67000089050c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f7369745265717569726564001000008d050c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065910501584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365790501344f7074696f6e3c50726963653e00012c73746172745f626c6f636b1502014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636b1502014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e6773950501304974656d53657474696e6773000091050c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e49640002000095050c2c70616c6c65745f6e66747314747970657320426974466c61677304045401990500040030012c4974656d53657474696e67000099050c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b656441747472696275746573000400009d050c2c70616c6c65745f6e6674731474797065733844657374726f795769746e65737300000c01386974656d5f6d6574616461746173a0010c7533320001306974656d5f636f6e66696773a0010c75333200012861747472696275746573a0010c7533320000a10504184f7074696f6e04045401a5050108104e6f6e6500000010536f6d650400a5050000010000a5050c2c70616c6c65745f6e6674731474797065732c4d696e745769746e65737308184974656d496401101c42616c616e63650118000801286f776e65645f6974656d150201384f7074696f6e3c4974656d49643e0001286d696e745f70726963657905013c4f7074696f6e3c42616c616e63653e0000a9050c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e6773950501304974656d53657474696e67730000ad050c2c70616c6c65745f6e6674731474797065737c43616e63656c41747472696275746573417070726f76616c5769746e65737300000401486163636f756e745f6174747269627574657310010c7533320000b1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b505045300000400b90501185665633c543e0000b5050c2c70616c6c65745f6e6674731474797065731c4974656d5469701030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010018416d6f756e74011800100128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012072656365697665720001244163636f756e744964000118616d6f756e74180118416d6f756e740000b905000002b50500bd050c2c70616c6c65745f6e667473147479706573345072655369676e65644d696e741430436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e6501101c42616c616e63650118001c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000128617474726962757465738502015c5665633c285665633c75383e2c205665633c75383e293e0001206d6574616461746138011c5665633c75383e0001306f6e6c795f6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000120646561646c696e65100120446561646c696e650001286d696e745f70726963657905013c4f7074696f6e3c42616c616e63653e0000c105082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400c5050148656432353531393a3a5369676e61747572650000001c537232353531390400c5050148737232353531393a3a5369676e61747572650001001445636473610400c905014065636473613a3a5369676e617475726500020000c505000003400000000800c905000003410000000800cd050c2c70616c6c65745f6e6674731474797065734c5072655369676e6564417474726962757465731030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e65011000140128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000128617474726962757465738502015c5665633c285665633c75383e2c205665633c75383e293e0001246e616d6573706163652d0201744174747269627574654e616d6573706163653c4163636f756e7449643e000120646561646c696e65100120446561646c696e650000d1050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c0108696494014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f637265617465100108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f79040108696494014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e7473040108696494014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c73040108696494014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f79040108696494014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c0108696494014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c0108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c0108696494014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c0108696494014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e73666572100108696494014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a65080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f6173736574040108696494014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f6173736574040108696494014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100108696494014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d65746164617461100108696494014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461040108696494014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d65746164617461140108696494014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d65746164617461040108696494014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f737461747573200108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0108696494014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c080108696494014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c0108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f766564100108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f756368040108696494014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e64080108696494014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e6365080108696494014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f74686572080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f74686572080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5050c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c65741043616c6c040454000108346672616374696f6e616c697a651401446e66745f636f6c6c656374696f6e5f6964100148543a3a4e6674436f6c6c656374696f6e49640001186e66745f6964100120543a3a4e6674496400012061737365745f6964100130417373657449644f663c543e00012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e0001246672616374696f6e73180144417373657442616c616e63654f663c543e000044ac4c6f636b20746865204e465420616e64206d696e742061206e65772066756e6769626c652061737365742e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0101546865206f726967696e206d75737420626520746865206f776e6572206f6620746865204e465420746865792061726520747279696e6720746f206c6f636b2e009c604465706f736974602066756e6473206f662073656e646572206172652072657365727665642e0025012d20606e66745f636f6c6c656374696f6e5f6964603a20546865204944207573656420746f206964656e746966792074686520636f6c6c656374696f6e206f6620746865204e46542eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e21012d20606e66745f6964603a20546865204944207573656420746f206964656e7469667920746865204e46542077697468696e2074686520676976656e20636f6c6c656374696f6e2eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602ee42d206061737365745f6964603a20546865204944206f6620746865206e65772061737365742e204974206d757374206e6f742065786973742eb8497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f617373657473602e1d012d206062656e6566696369617279603a20546865206163636f756e7420746861742077696c6c207265636569766520746865206e65776c7920637265617465642061737365742e0d012d20606672616374696f6e73603a2054686520746f74616c2069737375616e6365206f6620746865206e65776c79206372656174656420617373657420636c6173732e00c0456d69747320604e66744672616374696f6e616c697a656460206576656e74207768656e207375636365737366756c2e14756e6966791001446e66745f636f6c6c656374696f6e5f6964100148543a3a4e6674436f6c6c656374696f6e49640001186e66745f6964100120543a3a4e6674496400012061737365745f6964100130417373657449644f663c543e00012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e00014045014275726e2074686520746f74616c2069737375616e6365206f66207468652066756e6769626c6520617373657420616e642072657475726e2028756e6c6f636b2920746865206c6f636b6564204e46542e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e00d0604465706f736974602066756e64732077696c6c2062652072657475726e656420746f206061737365745f63726561746f72602e0025012d20606e66745f636f6c6c656374696f6e5f6964603a20546865204944207573656420746f206964656e746966792074686520636f6c6c656374696f6e206f6620746865204e46542eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e21012d20606e66745f6964603a20546865204944207573656420746f206964656e7469667920746865204e46542077697468696e2074686520676976656e20636f6c6c656374696f6e2eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e29012d206061737365745f6964603a20546865204944206f6620746865206173736574206265696e672072657475726e656420616e642064657374726f7965642e204d757374206d61746368fc746865206f726967696e616c204944206f662074686520637265617465642061737365742c20636f72726573706f6e64696e6720746f20746865204e46542eb8497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f617373657473602efc2d206062656e6566696369617279603a20546865206163636f756e7420746861742077696c6c20726563656976652074686520756e6966696564204e46542e00a4456d69747320604e6674556e696669656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed9050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c0108696410014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f637265617465100108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f79040108696410014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e7473040108696410014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c73040108696410014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f79040108696410014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c0108696410014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c0108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c0108696410014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c0108696410014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e73666572100108696410014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a65080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f6173736574040108696410014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f6173736574040108696410014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100108696410014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d65746164617461100108696410014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461040108696410014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d65746164617461140108696410014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d65746164617461040108696410014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f737461747573200108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0108696410014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c080108696410014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c0108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f766564100108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f756368040108696410014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e64080108696410014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e6365080108696410014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f74686572080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f74686572080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd050c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c65741043616c6c0404540001182c6372656174655f706f6f6c080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00001019014372656174657320616e20656d707479206c697175696469747920706f6f6c20616e6420616e206173736f636961746564206e657720606c705f746f6b656e60206173736574010128746865206964206f662077686963682069732072657475726e656420696e2074686520604576656e743a3a506f6f6c4372656174656460206576656e74292e0011014f6e6365206120706f6f6c20697320637265617465642c20736f6d656f6e65206d6179205b6050616c6c65743a3a6164645f6c6971756964697479605d20746f2069742e346164645f6c69717569646974791c0118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00013c616d6f756e74315f64657369726564180128543a3a42616c616e636500013c616d6f756e74325f64657369726564180128543a3a42616c616e636500012c616d6f756e74315f6d696e180128543a3a42616c616e636500012c616d6f756e74325f6d696e180128543a3a42616c616e636500011c6d696e745f746f000130543a3a4163636f756e744964000138e450726f76696465206c697175696469747920696e746f2074686520706f6f6c206f6620606173736574316020616e642060617373657432602e0d014e4f54453a20616e206f7074696d616c20616d6f756e74206f662061737365743120616e64206173736574322077696c6c2062652063616c63756c6174656420616e6421016d6967687420626520646966666572656e74207468616e207468652070726f76696465642060616d6f756e74315f64657369726564602f60616d6f756e74325f6465736972656460fc7468757320796f752073686f756c642070726f7669646520746865206d696e20616d6f756e7420796f7527726520686170707920746f2070726f766964652ec8506172616d732060616d6f756e74315f6d696e602f60616d6f756e74325f6d696e6020726570726573656e7420746861742e4901606d696e745f746f602077696c6c2062652073656e7420746865206c697175696469747920746f6b656e73207468617420726570726573656e742074686973207368617265206f662074686520706f6f6c2e005d014e4f54453a207768656e20656e636f756e746572696e6720616e20696e636f72726563742065786368616e6765207261746520616e64206e6f6e2d776974686472617761626c6520706f6f6c206c69717569646974792cdc626174636820616e2061746f6d69632063616c6c2077697468205b6050616c6c65743a3a6164645f6c6971756964697479605d20616e6451015b6050616c6c65743a3a737761705f65786163745f746f6b656e735f666f725f746f6b656e73605d206f72205b6050616c6c65743a3a737761705f746f6b656e735f666f725f65786163745f746f6b656e73605d250163616c6c7320746f2072656e64657220746865206c697175696469747920776974686472617761626c6520616e642072656374696679207468652065786368616e676520726174652e00d84f6e6365206c69717569646974792069732061646465642c20736f6d656f6e65206d6179207375636365737366756c6c792063616c6cd85b6050616c6c65743a3a737761705f65786163745f746f6b656e735f666f725f746f6b656e73605d207375636365737366756c6c792e4072656d6f76655f6c6971756964697479180118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e0001346c705f746f6b656e5f6275726e180128543a3a42616c616e636500014c616d6f756e74315f6d696e5f72656365697665180128543a3a42616c616e636500014c616d6f756e74325f6d696e5f72656365697665180128543a3a42616c616e636500012c77697468647261775f746f000130543a3a4163636f756e74496400020c4d01416c6c6f777320796f7520746f2072656d6f7665206c69717569646974792062792070726f766964696e672074686520606c705f746f6b656e5f6275726e6020746f6b656e7320746861742077696c6c20626551016275726e656420696e207468652070726f636573732e205769746820746865207573616765206f662060616d6f756e74315f6d696e5f72656365697665602f60616d6f756e74325f6d696e5f726563656976656035016974277320706f737369626c6520746f20636f6e74726f6c20746865206d696e20616d6f756e74206f662072657475726e656420746f6b656e7320796f7527726520686170707920776974682e70737761705f65786163745f746f6b656e735f666f725f746f6b656e7314011070617468e10501585665633c426f783c543a3a41737365744b696e643e3e000124616d6f756e745f696e180128543a3a42616c616e6365000138616d6f756e745f6f75745f6d696e180128543a3a42616c616e636500011c73656e645f746f000130543a3a4163636f756e7449640001286b6565705f616c697665200110626f6f6c000318c0537761702074686520657861637420616d6f756e74206f6620606173736574316020696e746f2060617373657432602e2d0160616d6f756e745f6f75745f6d696e6020706172616d20616c6c6f777320796f7520746f207370656369667920746865206d696e20616d6f756e74206f662074686520606173736574326060796f7527726520686170707920746f20726563656976652e0059015b604173736574436f6e76657273696f6e4170693a3a71756f74655f70726963655f65786163745f746f6b656e735f666f725f746f6b656e73605d2072756e74696d652063616c6c2063616e2062652063616c6c656430666f7220612071756f74652e70737761705f746f6b656e735f666f725f65786163745f746f6b656e7314011070617468e10501585665633c426f783c543a3a41737365744b696e643e3e000128616d6f756e745f6f7574180128543a3a42616c616e6365000134616d6f756e745f696e5f6d6178180128543a3a42616c616e636500011c73656e645f746f000130543a3a4163636f756e7449640001286b6565705f616c697665200110626f6f6c00041801015377617020616e7920616d6f756e74206f6620606173736574316020746f206765742074686520657861637420616d6f756e74206f662060617373657432602e190160616d6f756e745f696e5f6d61786020706172616d20616c6c6f777320746f207370656369667920746865206d617820616d6f756e74206f662074686520606173736574316060796f7527726520686170707920746f2070726f766964652e0059015b604173736574436f6e76657273696f6e4170693a3a71756f74655f70726963655f746f6b656e735f666f725f65786163745f746f6b656e73605d2072756e74696d652063616c6c2063616e2062652063616c6c656430666f7220612071756f74652e14746f756368080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00052c4d01546f75636820616e206578697374696e6720706f6f6c20746f2066756c66696c6c2070726572657175697369746573206265666f72652070726f766964696e67206c69717569646974792c20737563682061734901656e737572696e6720746861742074686520706f6f6c2773206163636f756e74732061726520696e20706c6163652e204974206973207479706963616c6c792075736566756c207768656e206120706f6f6c550163726561746f722072656d6f7665732074686520706f6f6c2773206163636f756e747320616e6420646f6573206e6f742070726f766964652061206c69717569646974792e205468697320616374696f6e206d61795501696e766f6c766520686f6c64696e67206173736574732066726f6d207468652063616c6c65722061732061206465706f73697420666f72206372656174696e672074686520706f6f6c2773206163636f756e74732e0068546865206f726967696e206d757374206265205369676e65642e0029012d2060617373657431603a20546865206173736574204944206f6620616e206578697374696e6720706f6f6c20776974682061207061697220286173736574312c20617373657432292e29012d2060617373657432603a20546865206173736574204944206f6620616e206578697374696e6720706f6f6c20776974682061207061697220286173736574312c20617373657432292e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e047050616c6c657427732063616c6c61626c652066756e6374696f6e732ee1050000029400e5050c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c65741043616c6c040454000104586d6967726174655f746f5f6e65775f6163636f756e74080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e0000105d014d6967726174657320616e206578697374696e6720706f6f6c20746f2061206e6577206163636f756e742049442064657269766174696f6e206d6574686f6420666f72206120676976656e20617373657420706169722e3101496620746865206d6967726174696f6e206973207375636365737366756c2c207472616e73616374696f6e20666565732061726520726566756e64656420746f207468652063616c6c65722e003c4d757374206265207369676e65642e047050616c6c657427732063616c6c61626c652066756e6374696f6e732ee905086461737365745f6875625f77657374656e645f72756e74696d65304f726967696e43616c6c65720001101873797374656d0400ed0501746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000002c506f6c6b61646f7458636d0400f105014870616c6c65745f78636d3a3a4f726967696e001f002843756d756c757358636d0400f505016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00200010566f69640400f90501410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f696400030000ed050c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000f1050c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400d801204c6f636174696f6e00000020526573706f6e73650400d801204c6f636174696f6e00010000f5050c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400dd01011850617261496400010000f905081c73705f636f726510566f696400010000fd050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0106000004080004000506083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef501015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730906018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000009060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c001185665633c543e00000d060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1106000004081506180015060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119060453000004001d0601185665633c543e00001906083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501fd012c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065fd01012450726f78795479706500011464656c617910012c426c6f636b4e756d62657200001d060000021906002106000004082506180025060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540129060453000004002d0601185665633c543e00002906083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d62657200002d0600000229060031060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35060c3470616c6c65745f61737365747314747970657330417373657444657461696c730c1c42616c616e63650118244163636f756e7449640100384465706f73697442616c616e63650118003001146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000118737570706c7918011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e636500012c6d696e5f62616c616e636518011c42616c616e636500013469735f73756666696369656e74200110626f6f6c0001206163636f756e747310010c75333200012c73756666696369656e747310010c753332000124617070726f76616c7310010c7533320001187374617475733906012c4173736574537461747573000039060c3470616c6c65745f6173736574731474797065732c417373657453746174757300010c104c6976650000001846726f7a656e0001002844657374726f79696e67000200003d060000040810000041060c3470616c6c65745f6173736574731474797065733041737365744163636f756e74101c42616c616e63650118384465706f73697442616c616e6365011814457874726101ed01244163636f756e74496401000010011c62616c616e636518011c42616c616e6365000118737461747573450601344163636f756e74537461747573000118726561736f6e490601a84578697374656e6365526561736f6e3c4465706f73697442616c616e63652c204163636f756e7449643e0001146578747261ed0101144578747261000045060c3470616c6c65745f617373657473147479706573344163636f756e7453746174757300010c184c69717569640000001846726f7a656e0001001c426c6f636b65640002000049060c3470616c6c65745f6173736574731474797065733c4578697374656e6365526561736f6e081c42616c616e63650118244163636f756e7449640100011420436f6e73756d65720000002853756666696369656e740001002c4465706f73697448656c64040018011c42616c616e63650002003c4465706f736974526566756e6465640003002c4465706f73697446726f6d08000001244163636f756e744964000018011c42616c616e6365000400004d060000040c1000000051060c3470616c6c65745f61737365747314747970657320417070726f76616c081c42616c616e63650118384465706f73697442616c616e6365011800080118616d6f756e7418011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e6365000055060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e670159060014011c6465706f7369741801384465706f73697442616c616e63650001106e616d6559060134426f756e646564537472696e6700011873796d626f6c59060134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d060c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e61060c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67200110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656e200110626f6f6c000065060000040c001010006906000004080010006d060c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f766564210201444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656e200110626f6f6c00011c6465706f7369741801384465706f73697442616c616e6365000071060c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e6365000110646174610d02016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000075060c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e6365000110646174610d02016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000079060000040c1015021902007d06000004081d0218008106000004081821020085060c3870616c6c65745f756e69717565731870616c6c6574144572726f72080454000449000148304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d000f047454686520676976656e206974656d20494420697320756e6b6e6f776e2e284e6f74466f7253616c65001004544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001104705468652070726f76696465642062696420697320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e89060c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c75333200008d060c2c70616c6c65745f6e66747314747970657320426974466c616773040454019106000400080138436f6c6c656374696f6e526f6c65000091060c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e0004000095060c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f73697401990624417070726f76616c73019d06000c01146f776e65720001244163636f756e744964000124617070726f76616c739d060124417070726f76616c7300011c6465706f7369749906011c4465706f736974000099060c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e636500009d060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01000456011502045300000400a106013842547265654d61703c4b2c20563e0000a106042042547265654d617008044b01000456011502000400a506000000a506000002a90600a9060000040800150200ad060c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f736974000110646174612902016c426f756e6465645665633c75382c20537472696e674c696d69743e0000b1060c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f73697401b5062c537472696e674c696d6974000008011c6465706f736974b506011c4465706f736974000110646174612902016c426f756e6465645665633c75382c20537472696e674c696d69743e0000b5060c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000b906000004101015022d021d0200bd06000004082902c10600c1060c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000c5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540100045300000400c906012c42547265655365743c543e0000c906042042547265655365740404540100000400c0000000cd060c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01350220446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656d150201384f7074696f6e3c4974656d49643e0001147072696365310201784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e650000d1060c2c70616c6c65745f6e66747314747970657320426974466c61677304045401d50600040030013450616c6c6574466561747572650000d5060c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c7300040014537761707300080000d9060c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b4304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e3c5769746e6573735265717569726564002c0490546865207769746e65737320646174612073686f756c642062652070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd0600000408940000e1060000040c94000000e5060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e6701e9060014011c6465706f7369741801384465706f73697442616c616e63650001106e616d65e9060134426f756e646564537472696e6700011873796d626f6ce9060134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000ed060c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef1060c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1474797065731c44657461696c73101c417373657449640110244672616374696f6e7301181c4465706f7369740118244163636f756e744964010000100114617373657410011c417373657449640001246672616374696f6e731801244672616374696f6e7300011c6465706f73697418011c4465706f73697400013461737365745f63726561746f720001244163636f756e7449640000f50608346672616d655f737570706f72742050616c6c65744964000004003101011c5b75383b20385d0000f9060c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c6574144572726f7204045400011040496e636f727265637441737365744964000004ac417373657420494420646f6573206e6f7420636f72726573706f6e6420746f206c6f636b6564204e46542e304e6f5065726d697373696f6e000104e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e2c4e66744e6f74466f756e64000204484e465420646f65736e27742065786973742e504e66744e6f744672616374696f6e616c697a6564000304904e465420686173206e6f7420796574206265656e206672616374696f6e616c697365642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e670101070014011c6465706f7369741801384465706f73697442616c616e63650001106e616d6501070134426f756e646564537472696e6700011873796d626f6c01070134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000005070c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09070c5c70616c6c65745f61737365745f636f6e76657273696f6e14747970657320506f6f6c496e666f042c506f6f6c417373657449640110000401206c705f746f6b656e10012c506f6f6c4173736574496400000d070c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c6574144572726f7204045400015c40496e76616c6964417373657450616972000004b850726f76696465642061737365742070616972206973206e6f7420737570706f7274656420666f7220706f6f6c2e28506f6f6c45786973747300010450506f6f6c20616c7265616479206578697374732e4857726f6e6744657369726564416d6f756e74000204744465736972656420616d6f756e742063616e2774206265207a65726f2e60416d6f756e744f6e654c6573735468616e4d696e696d616c000308490150726f766964656420616d6f756e742073686f756c642062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e60416d6f756e7454776f4c6573735468616e4d696e696d616c000408490150726f766964656420616d6f756e742073686f756c642062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e68526573657276654c6566744c6573735468616e4d696e696d616c0005084d0152657365727665206e6565647320746f20616c776179732062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e40416d6f756e744f7574546f6f48696768000604c84465736972656420616d6f756e742063616e277420626520657175616c20746f2074686520706f6f6c20726573657276652e30506f6f6c4e6f74466f756e640007045c54686520706f6f6c20646f65736e27742065786973742e204f766572666c6f7700080454416e206f766572666c6f772068617070656e65642e8041737365744f6e654465706f7369744469644e6f744d6565744d696e696d756d0009042901546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f722074686520666972737420746f6b656e20696e207468652070616972207761736e2774206d65742e80417373657454776f4465706f7369744469644e6f744d6565744d696e696d756d000a042d01546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f7220746865207365636f6e6420746f6b656e20696e207468652070616972207761736e2774206d65742e8c41737365744f6e655769746864726177616c4469644e6f744d6565744d696e696d756d000b042901546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f722074686520666972737420746f6b656e20696e207468652070616972207761736e2774206d65742e8c417373657454776f5769746864726177616c4469644e6f744d6565744d696e696d756d000c042d01546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f7220746865207365636f6e6420746f6b656e20696e207468652070616972207761736e2774206d65742e704f7074696d616c416d6f756e744c6573735468616e44657369726564000d04bc4f7074696d616c2063616c63756c6174656420616d6f756e74206973206c657373207468616e20646573697265642e6c496e73756666696369656e744c69717569646974794d696e746564000e0478496e73756666696369656e74206c6971756964697479206d696e7465642e345a65726f4c6971756964697479000f0488526571756573746564206c69717569646974792063616e2774206265207a65726f2e285a65726f416d6f756e7400100454416d6f756e742063616e2774206265207a65726f2e8c50726f76696465644d696e696d756d4e6f7453756666696369656e74466f7253776170001104ec43616c63756c6174656420616d6f756e74206f7574206973206c657373207468616e2070726f7669646564206d696e696d756d20616d6f756e742e8c50726f76696465644d6178696d756d4e6f7453756666696369656e74466f7253776170001204cc50726f7669646564206d6178696d756d20616d6f756e74206973206e6f742073756666696369656e7420666f7220737761702e2c496e76616c696450617468001304d45468652070726f76696465642070617468206d75737420636f6e7369737473206f66203220617373657473206174206c656173742e344e6f6e556e6971756550617468001404c45468652070726f76696465642070617468206d75737420636f6e7369737473206f6620756e69717565206173736574732e50496e636f7272656374506f6f6c41737365744964001504ec497420776173206e6f7420706f737369626c6520746f20676574206f7220696e6372656d656e7420746865204964206f662074686520706f6f6c2e3042656c6f774d696e696d756d001604f05468652064657374696e6174696f6e206163636f756e742063616e6e6f7420657869737420776974682074686520737761707065642066756e64732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11070c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c6574144572726f7204045400011040496e76616c6964417373657450616972000004b850726f76696465642061737365742070616972206973206e6f7420737570706f7274656420666f7220706f6f6c2e30506f6f6c4e6f74466f756e640001045c54686520706f6f6c20646f65736e27742065786973742e2c5a65726f42616c616e636500020478506f6f6c27732062616c616e63652063616e6e6f74206265207a65726f2e3c5061727469616c5472616e736665720003043901496e646963617465732061207061727469616c207472616e73666572206f662062616c616e636520746f20746865206e6577206163636f756e7420647572696e672061206d6967726174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1507102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ad031043616c6c015505245369676e617475726501c105144578747261011907000400380000001907000004241d072107250729072d07350739073d074107001d0710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000210710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000250710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000290710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e65736973040454000000002d0710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003107010c45726100003107102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000350710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400a00120543a3a4e6f6e63650000390710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003d07088870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e7450436861726765417373657454785061796d656e74040454000008010c746970b0013042616c616e63654f663c543e00012061737365745f6964d90401684f7074696f6e3c436861726765417373657449644f663c543e3e0000410708a463756d756c75735f7072696d6974697665735f73746f726167655f7765696768745f7265636c61696d5053746f726167655765696768745265636c61696d040454000000004507086461737365745f6875625f77657374656e645f72756e74696d651c52756e74696d6500000000701853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f7069637301010402346d020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000750204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500006502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500007d02040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01810201581830426c6f636b57656967687473910289010700f2052a01000b00204aa9d101020040010265cd1d00010bc0560def45010200e000010b0098f73e5d010200f0000100000265cd1d00010bc0de5f59ba0102003001010b00204aa9d1010200400101070088526a74020050000265cd1d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468a1023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874a9024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ead02910320776573746d696e7420776573746d696e7401000000386d0f000000000040dd718d5cc53262d401000000d7bdd8a272ca0d6501000000df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f01000000899a250cbe84f250010000008a8047a53a8277ec0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000de92b8a0426b9bf602000000ea93e3f16f3d696202000000fbc577b9d747efd6010000000f000000000484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669780102082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01bd02003c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e740100c1020400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e740000e90204000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468652d01206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010038040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000380400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000ed0204000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f6465010020040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001010000000000c1d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e00882054686973206973207570646174656420696e20606f6e5f66696e616c697a65602e60557067726164655265737472696374696f6e5369676e616c0100f50204001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f41686561640100e102040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000fd02040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000050304001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000019030400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100210380000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301002503040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100310304000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d6573736167657301008d0204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301008d02040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e5c55707761726444656c6976657279466565466163746f720100390340000064a7b3b6e00d000000000000000004e42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c69766572792066656520627920666f7220554d502e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e60437573746f6d56616c69646174696f6e486561644461746100003804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e013d03017c042853656c66506172614964dd0110e803000004b82052657475726e73207468652070617261636861696e204944207765206172652072756e6e696e6720776974682e016103012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0165030004344d696e696d756d506572696f6430200000000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00033450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100dd01106400000000016903000000042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402006d03040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6020526573657276657301010402007d0304000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c6473010104020089030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402009d030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01a903018410484578697374656e7469616c4465706f736974184000ca9a3b00000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01b9030a485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100390340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100bd0304000000018c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000b38417373657454785061796d656e740000019000000d28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e000000001444436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100c10304000411012054686520696e76756c6e657261626c652c207065726d697373696f6e656420636f6c6c61746f72732e2054686973206c697374206d75737420626520736f727465642e3443616e6469646174654c6973740100c5030400146901205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e206043616e646964617465736020616e642060496e76756c6e657261626c6573602073686f756c6420626550206d757475616c6c79206578636c75736976652e0075012054686973206c69737420697320736f7274656420696e20617363656e64696e67206f72646572206279206465706f73697420616e64207768656e20746865206465706f736974732061726520657175616c2c20746865206c65617374a020726563656e746c79207570646174656420697320636f6e7369646572656420677265617465722e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e01d10301bc0001d503151c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100c00400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100d9030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010011020400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500e1030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405e90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01f10301c40001f503161041757261011041757261082c417574686f7269746965730100f9030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010001042000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000430536c6f744475726174696f6e30207017000000000000100d012054686520736c6f74206475726174696f6e20417572612073686f756c642072756e20776974682c2065787072657373656420696e206d696c6c697365636f6e64732e3d0120546865206566666563746976652076616c7565206f66207468697320747970652073686f756c64206e6f74206368616e6765207768696c652074686520636861696e2069732072756e6e696e672e00350120466f72206261636b776172647320636f6d7061746962696c6974792065697468657220757365205b604d696e696d756d506572696f6454696d657354776f605d206f72206120636f6e73742e00171c41757261457874011c41757261457874082c417574686f7269746965730100f903040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f0000050404000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e00000000182458636d705175657565012458636d7051756575651c50496e626f756e6458636d7053757370656e646564010009040400200d01205468652073757370656e64656420696e626f756e642058434d50206368616e6e656c732e20416c6c206f746865727320617265206e6f742073757370656e6465642e00710120546869732069732061206053746f7261676556616c75656020696e7374656164206f662061206053746f726167654d6170602073696e636520776520657870656374206d756c7469706c652072656164732070657220626c6f636b690120746f20646966666572656e74206b65797320776974682061206f6e652062797465207061796c6f61642e205468652061636365737320746f2060426f756e6465644254726565536574602077696c6c2062652063616368656415012077697468696e2074686520626c6f636b20616e64207468657265666f7265206f6e6c7920696e636c75646564206f6e636520696e207468652070726f6f662073697a652e006501204e4f54453a2054686520506f562062656e63686d61726b696e672063616e6e6f74206b6e6f77207468697320616e642077696c6c206f7665722d657374696d6174652c20627574207468652061637475616c2070726f6f66442077696c6c20626520736d616c6c65722e484f7574626f756e6458636d70537461747573010015040400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205210438040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402dd0138040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e66696701002504302000000030000000080000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e38517565756553757370656e64656401002004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e4444656c6976657279466565466163746f7201010405dd01390340000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e01290401c8044c4d6178496e626f756e6453757370656e6465641010e803000014490120546865206d6178696d756d206e756d626572206f6620696e626f756e642058434d50206368616e6e656c7320746861742063616e2062652073757370656e6465642073696d756c74616e656f75736c792e005d0120416e792066757274686572206368616e6e656c2073757370656e73696f6e732077696c6c206661696c20616e64206d65737361676573206d6179206765742064726f7070656420776974686f757420667572746865724501206e6f746963652e2043686f6f73696e67206120686967682076616c756520283130303029206973206f6b61793b207468652074726164652d6f666620746861742069732064657363726962656420696ed8205b60496e626f756e6458636d7053757370656e646564605d207374696c6c206170706c6965732061742074686174207363616c652e012d041e2c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c51756572696573000104023031040400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502690410040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502690430040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f7469667954617267657473000108050269046d0404000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100710404000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e00007d040400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c05020285048d04040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402009d04040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01a90401cc00011d051f2843756d756c757358636d0001210501d10100002044546f526f636f636f58636d526f757465720144546f526f636f636f58636d526f7574657204184272696467650100250544000064a7b3b6e00d0000000000000000001c6820427269646765207468617420776520617265207573696e672e007101202a2a627269646765732d76312a2a20617373756d7074696f6e733a20616c6c206f7574626f756e64206d65737361676573207468726f756768207468697320726f7574657220617265207573696e672073696e676c65206c616e656d0120616e6420746f2073696e676c652072656d6f746520636f6e73656e7375732e20496620746865726520697320736f6d65206f746865722072656d6f746520636f6e73656e73757320746861742075736573207468652073616d65610120627269646765206875622c207468652073657061726174652070616c6c657420696e7374616e6365207368616c6c20626520757365642c20496e2060763260207765276c6c206861766520616c6c2072657175697265647101207072696d69746976657320286c616e652d696420616b61206272696467652d69642c20646572697665642066726f6d2058434d206c6f636174696f6e732920746f20737570706f7274206d756c7469706c6520206272696467657374206279207468652073616d652070616c6c657420696e7374616e63652e01290500000022304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f7201010405d9012d0574000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c53657276696365486561640000d901040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e145061676573000108050539053d050400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e01450501d50110204865617053697a65101000000100143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010080000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e34536572766963655765696768749d022c0107005840fba2020070001841012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f72a820736572766963696e6720656e717565756564206974656d7320606f6e5f696e697469616c697a65602e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6c5d012060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c79206f7220736574205b6053656c663a3a49646c654d617853657276696365576569676874605d20746f2068617665542069742072756e20696e20606f6e5f69646c65602e5049646c654d6178536572766963655765696768749d022c0107005840fba202007000145d0120546865206d6178696d756d20616d6f756e74206f66207765696768742028696620616e792920746f20626520757365642066726f6d2072656d61696e696e672077656967687420606f6e5f69646c656020776869636841012073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f7220736572766963696e6720656e717565756564206974656d7320606f6e5f69646c65602e3d012055736566756c20666f722070617261636861696e7320746f2070726f63657373206d65737361676573206174207468652073616d6520626c6f636b2074686579206172652072656365697665642e00290120496620604e6f6e65602c2069742077696c6c206e6f742063616c6c2060536572766963655175657565733a3a736572766963655f7175657565736020696e20606f6e5f69646c65602e014905231c5574696c69747900014d0501e501044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01fd0528204d756c746973696701204d756c746973696704244d756c746973696773000108050201060506040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01590501f1010c2c4465706f7369744261736518400047ab5602000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218400024f4000000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e010d06291450726f7879011450726f7879081c50726f78696573010104050011064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500210644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01610501f901184050726f78794465706f73697442617365184000113d5502000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184020c5fb0000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840001a7a5502000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f721840408af70100000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0131062a1841737365747301184173736574731014417373657400010402103506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e7400010802023d064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c0202024d06510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d65746164617461010104021055065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e0169050105021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f736974184000e8764817000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f736974184000f685540200000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f73697442617365184080b012560200000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f73697450657242797465184020a1070000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000ca9a3b0000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e015d06321c556e6971756573011c556e69717565732814436c61737300010402106106040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202026506ed01040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e7400010802026906ed0104000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e144173736574000108020271026d06040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040210710604000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f6600010802027102750604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c02020279067d06040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802027102810604000470205072696365206f6620616e20617373657420696e7374616e63652e4c436f6c6c656374696f6e4d6178537570706c79000104021010040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e016d050109022044436f6c6c656374696f6e4465706f736974184000e876481700000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000ca9a3b00000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f7369744261736518402015e457020000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000e40b540200000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f73697450657242797465184020a1070000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410108000000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410102000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410104000000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e01850633104e66747301104e6674733c28436f6c6c656374696f6e00010402108906040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202026506ed01040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e7400010802026906ed0104000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f6600010802023d068d06040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d000108020271029506040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210ad0604000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802027102b10604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500011002020202b906bd06040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f66000108020271028106040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802027102c50604000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802027102cd060400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f66000104021081050400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802027102a9050400044c20436f6e666967206f6620616e206974656d2e017d050125023844436f6c6c656374696f6e4465706f736974184000e876481700000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000ca9a3b00000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f7369744261736518402015e457020000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000e40b540200000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f73697450657242797465184020a1070000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410104000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410101400000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410101e00000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e1010001a4f0004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100a00000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e204665617475726573d10620000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e01d9063434466f726569676e4173736574730134466f726569676e4173736574731014417373657400010402943506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e740001080202dd064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c020202e106510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040294e5065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e01d1050141021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f736974184000e8764817000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f736974184000f685540200000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f73697442617365184080b012560200000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f73697450657242797465184020a1070000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000ca9a3b0000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01ed0635504e66744672616374696f6e616c697a6174696f6e01504e66744672616374696f6e616c697a6174696f6e04284e6674546f4173736574000104027102f1060400041501204b6565707320747261636b206f662074686520636f72726573706f6e64696e67204e46542049442c20617373657420494420616e6420616d6f756e74206d696e7465642e01d505014502141c4465706f736974184000e8764817000000000000000000000008650120546865206465706f7369742070616964206279207468652075736572206c6f636b696e6720616e204e46542e20546865206465706f7369742069732072657475726e656420746f20746865206f726967696e616c204e4654e4206f776e6572207768656e2074686520617373657420697320756e696669656420616e6420746865204e465420697320756e6c6f636b65642e2050616c6c65744964f506206672616374696f6e04f4205468652070616c6c657427732069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e384e6577417373657453796d626f6c5906141046524143048820546865206e65776c79206372656174656420617373657427732073796d626f6c2e304e657741737365744e616d655906141046726163048020546865206e65776c7920637265617465642061737365742773206e616d652e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01f9063628506f6f6c4173736574730128506f6f6c4173736574731014417373657400010402103506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e7400010802023d064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c0202024d06510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040210fd065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e01d9050149021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f73697418400000000000000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f7369741840000000000000000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f736974426173651840000000000000000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f7369745065724279746518400000000000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f7369741840000000000000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e010507373c4173736574436f6e76657273696f6e013c4173736574436f6e76657273696f6e0814506f6f6c7300010402510209070400086901204d61702066726f6d2060506f6f6c417373657449646020746f2060506f6f6c496e666f602e20546869732065737461626c69736865732077686574686572206120706f6f6c20686173206265656e206f6666696369616c6c793d01206372656174656420726174686572207468616e2070656f706c652073656e64696e6720746f6b656e73206469726563746c7920746f206120706f6f6c2773207075626c6963206163636f756e742e3c4e657874506f6f6c4173736574496400001004000825012053746f726573207468652060506f6f6c4173736574496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e657874206c7020746f6b656e2ee42054686973206765747320696e6372656d656e746564207768656e657665722061206e6577206c7020706f6f6c20697320637265617465642e01dd05014d021c144c504665651010030000000451012041202520746865206c69717569646974792070726f7669646572732077696c6c2074616b65206f6620657665727920737761702e20526570726573656e7473203130746873206f6620612070657263656e742e30506f6f6c536574757046656518400000000000000000000000000000000004882041206f6e652d74696d652066656520746f2073657475702074686520706f6f6c2e44506f6f6c536574757046656541737365749408010004390120417373657420636c6173732066726f6d205b60436f6e6669673a3a417373657473605d207573656420746f2070617920746865205b60436f6e6669673a3a506f6f6c5365747570466565605d2e584c69717569646974795769746864726177616c46656555021000000000048420412066656520746f20776974686472617720746865206c69717569646974792e404d696e744d696e4c6971756964697479184064000000000000000000000000000000043d0120546865206d696e696d756d204c5020746f6b656e20616d6f756e74207468617420636f756c64206265206d696e7465642e20416d656c696f726174657320726f756e64696e67206572726f72732e444d617853776170506174684c656e677468101003000000048820546865206d6178206e756d626572206f6620686f707320696e206120737761702e2050616c6c65744964f5062070792f6173636f6e04f4205468652070616c6c657427732069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e010d0738604173736574436f6e76657273696f6e4d6967726174696f6e0001e50501610200011107c81507042448436865636b4e6f6e5a65726f53656e6465721d07ed0140436865636b5370656356657273696f6e21071038436865636b547856657273696f6e25071030436865636b47656e6573697329073438436865636b4d6f7274616c6974792d073428436865636b4e6f6e63653507ed012c436865636b5765696768743907ed0150436861726765417373657454785061796d656e743d07ed015053746f726167655765696768745265636c61696d4107ed014507'; \ No newline at end of file +export const assetHubWestendV1011000 = + '0x6d6574610e4907000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173656502011450686173650001146576656e7454010445000118746f70696373690201185665633c543e000054086461737365745f6875625f77657374656e645f72756e74696d653052756e74696d654576656e740001581853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04007c01bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040084017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000a00485472616e73616374696f6e5061796d656e7404008c01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000b0038417373657454785061796d656e7404009001c870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e743a3a4576656e743c52756e74696d653e000d0044436f6c6c61746f7253656c656374696f6e0400bc01a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0015001c53657373696f6e0400c4015470616c6c65745f73657373696f6e3a3a4576656e740016002458636d7051756575650400c801a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e001e002c506f6c6b61646f7458636d0400cc016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e001f002843756d756c757358636d0400d101018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e002000304d65737361676551756575650400d501019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e0023001c5574696c6974790400e501015470616c6c65745f7574696c6974793a3a4576656e74002800204d756c74697369670400f101017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0029001450726f78790400f901017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002a00184173736574730400050201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365313e0032001c556e697175657304000902017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e003300104e66747304002502016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e00340034466f726569676e4173736574730400410201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365323e003500504e66744672616374696f6e616c697a6174696f6e0400450201b070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e3a3a4576656e743c52756e74696d653e00360028506f6f6c4173736574730400490201dc70616c6c65745f6173736574733a3a4576656e743c52756e74696d652c2070616c6c65745f6173736574733a3a496e7374616e6365333e0037003c4173736574436f6e76657273696f6e04004d02019c70616c6c65745f61737365745f636f6e76657273696f6e3a3a4576656e743c52756e74696d653e003800604173736574436f6e76657273696f6e4d6967726174696f6e0400610201ac70616c6c65745f61737365745f636f6e76657273696f6e5f6f70733a3a4576656e743c52756e74696d653e00c80000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320003040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616434014472656c61795f636861696e3a3a48617368000404e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f6861736880013c4f7074696f6e3c58636d486173683e000504b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000840c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100008c0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c8870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e741870616c6c6574144576656e7404045400010838417373657454784665655061696410010c77686f000130543a3a4163636f756e74496400012861637475616c5f666565180144417373657442616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e00012061737365745f6964940148436861726765417373657449644f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652cb8686173206265656e2070616964206279206077686f6020696e20616e206173736574206061737365745f6964602e444173736574526566756e644661696c65640401486e61746976655f616d6f756e745f6b65707418013042616c616e63654f663c543e000104f4412073776170206f662074686520726566756e6420696e206e61746976652063757272656e6379206261636b20746f206173736574206661696c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657494102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f729801244a756e6374696f6e73000098100c78636d087633246a756e6374696f6e73244a756e6374696f6e73000124104865726500000008583104009c01204a756e6374696f6e00010008583208009c01204a756e6374696f6e00009c01204a756e6374696f6e0002000858330c009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00030008583410009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00040008583514009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00050008583618009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e0006000858371c009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00070008583820009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e00009c01204a756e6374696f6e000800009c100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726ba401444f7074696f6e3c4e6574776f726b49643e00010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964b40118426f6479496400011070617274b80120426f6479506172740008003c476c6f62616c436f6e73656e7375730400a801244e6574776f726b496400090000a00000061000a404184f7074696f6e04045401a80108104e6f6e6500000010536f6d650400a80000010000a8100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000ac000003140000000800b00000061800b4100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e6465780400a0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000b8100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74a0010c753332000100204672616374696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c75333200040000bc0c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000128404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c6573c001445665633c543a3a4163636f756e7449643e0000046c4e657720496e76756c6e657261626c65732077657265207365742e44496e76756c6e657261626c6541646465640401286163636f756e745f6964000130543a3a4163636f756e7449640001047441206e657720496e76756c6e657261626c65207761732061646465642e4c496e76756c6e657261626c6552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400020470416e20496e76756c6e657261626c65207761732072656d6f7665642e504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000304a4546865206e756d626572206f6620646573697265642063616e6469646174657320776173207365742e404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0004046c5468652063616e64696461637920626f6e6420776173207365742e3843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0005045c41206e65772063616e646964617465206a6f696e65642e5043616e646964617465426f6e64557064617465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00060470426f6e64206f6620612063616e64696461746520757064617465642e4043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400070460412063616e646964617465207761732072656d6f7665642e4443616e6469646174655265706c616365640c010c6f6c64000130543a3a4163636f756e74496400010c6e6577000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804f4416e206163636f756e7420776173207265706c6163656420696e207468652063616e646964617465206c69737420627920616e6f74686572206f6e652e68496e76616c6964496e76756c6e657261626c65536b69707065640401286163636f756e745f6964000130543a3a4163636f756e7449640009085501416e206163636f756e742077617320756e61626c6520746f20626520616464656420746f2074686520496e76756c6e657261626c65732062656361757365207468657920646964206e6f742068617665206b657973c8726567697374657265642e204f7468657220496e76756c6e657261626c6573206d61792068617665206265656e207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00000020000c40c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001043c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000004c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d65d0015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ed801204c6f636174696f6e00012c64657374696e6174696f6ed801204c6f636174696f6e00011c6d6573736167650d01011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e736539010120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6e5d0101404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696ed801204c6f636174696f6e0001186173736574737d01013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ed801204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ed801204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ed801204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f72d4012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6ecd01014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ed801204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f71756572696572d801204c6f636174696f6e0001506d617962655f61637475616c5f717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ed801204c6f636174696f6e000110636f7374190101184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e67d801204c6f636174696f6e0001106665657319010118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696ed801204c6f636174696f6e0001186173736574737d01013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d0102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72d401144572726f72000100144572726f720401146572726f72d401144572726f7200020000d4100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000d8102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72dc01244a756e6374696f6e730000dc102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400e001484172633c5b4a756e6374696f6e3b20315d3e0001000858320400f001484172633c5b4a756e6374696f6e3b20325d3e0002000858330400f401484172633c5b4a756e6374696f6e3b20335d3e0003000858340400f801484172633c5b4a756e6374696f6e3b20345d3e0004000858350400fc01484172633c5b4a756e6374696f6e3b20355d3e0005000858360400010101484172633c5b4a756e6374696f6e3b20365d3e0006000858370400050101484172633c5b4a756e6374696f6e3b20375d3e0007000858380400090101484172633c5b4a756e6374696f6e3b20385d3e00080000e000000301000000e400e4102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726be801444f7074696f6e3c4e6574776f726b49643e00010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964b40118426f6479496400011070617274b80120426f6479506172740008003c476c6f62616c436f6e73656e7375730400ec01244e6574776f726b496400090000e804184f7074696f6e04045401ec0108104e6f6e6500000010536f6d650400ec0000010000ec102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000f000000302000000e400f400000303000000e400f800000304000000e400fc00000305000000e400010100000306000000e400050100000307000000e400090100000308000000e4000d010c2c73746167696e675f78636d0876340c58636d041043616c6c00000400110101585665633c496e737472756374696f6e3c43616c6c3e3e0000110100000215010015010c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040019010118417373657473000000545265736572766541737365744465706f7369746564040019010118417373657473000100585265636569766554656c65706f727465644173736574040019010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736539010120526573706f6e73650001286d61785f77656967687428011857656967687400011c717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731901011841737365747300012c62656e6566696369617279d801204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731901011841737365747300011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6501014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400dc0140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400690101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d01012c417373657446696c74657200012c62656e6566696369617279d801204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d01012c417373657446696c74657200011077616e741901011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d01012c417373657446696c74657200011c72657365727665d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0001186173736574736d01012c417373657446696c74657200120030427579457865637574696f6e080110666565732101011441737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d01012458636d3c43616c6c3e0015002c536574417070656e64697804000d01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473190101184173736574730001187469636b6574d801204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040019010118417373657473001c002c4578706563744173736574040019010118417373657473001d00304578706563744f726967696e04005d0101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400690101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400e401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bec01244e6574776f726b496400012c64657374696e6174696f6edc0140496e746572696f724c6f636174696f6e00010c78636d0d01011c58636d3c28293e002600244c6f636b41737365740801146173736574210101144173736574000120756e6c6f636b6572d801204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574210101144173736574000118746172676574d801204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365742101011441737365740001146f776e6572d801204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365742101011441737365740001186c6f636b6572d801204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d801204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696e5d0101404f7074696f6e3c4c6f636174696f6e3e002f00001901102c73746167696e675f78636d08763414617373657418417373657473000004001d0101285665633c41737365743e00001d010000022101002101102c73746167696e675f78636d087634146173736574144173736574000008010869642501011c4173736574496400010c66756e2901012c46756e676962696c69747900002501102c73746167696e675f78636d0876341461737365741c4173736574496400000400d801204c6f636174696f6e00002901102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c6504002d0101344173736574496e7374616e6365000100002d01102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d000500003101000003080000000800350100000310000000080039010c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400190101184173736574730001003c457865637574696f6e526573756c7404003d0101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040045010198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400550101384d617962654572726f72436f6465000500003d0104184f7074696f6e0404540141010108104e6f6e6500000010536f6d6504004101000001000041010000040810d40045010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014901045300000400510101185665633c543e000049010c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e646578a0010c7533320001106e616d654d010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d654d010180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72a0010c7533320001146d696e6f72a0010c7533320001147061746368a0010c75333200004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000510100000249010055010c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005901018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005901018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d0104184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000061010c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000065010c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000069010c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ed801204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400006d01102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400190101184173736574730000001057696c6404007101012457696c644173736574000100007101102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f6608010869642501011c4173736574496400010c66756e7501013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400a0010c75333200020030416c6c4f66436f756e7465640c010869642501011c4173736574496400010c66756e7501013c57696c6446756e676962696c697479000114636f756e74a0010c753332000300007501102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000079010c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100007d01080c78636d3c56657273696f6e656441737365747300010c08563204008101013c76323a3a4d756c74694173736574730001000856330400b501013c76333a3a4d756c746941737365747300030008563404001901012876343a3a417373657473000400008101100c78636d087632286d756c746961737365742c4d756c7469417373657473000004008501013c5665633c4d756c746941737365743e000085010000028901008901100c78636d087632286d756c74696173736574284d756c74694173736574000008010869648d01011c4173736574496400010c66756ead01012c46756e676962696c69747900008d01100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400910101344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e000100009101100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72950101244a756e6374696f6e7300009501100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400990101204a756e6374696f6e0001000858320800990101204a756e6374696f6e0000990101204a756e6374696f6e0002000858330c00990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0003000858341000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0004000858351400990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0005000858361800990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0006000858371c00990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0007000858382000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e0000990101204a756e6374696f6e000800009901100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400a0010c7533320000002c4163636f756e744964333208011c6e6574776f726b9d0101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b9d0101244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b9d0101244e6574776f726b496400010c6b6579ac01205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400b00110753132380005002847656e6572616c4b65790400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964a5010118426f6479496400011070617274a9010120426f647950617274000800009d010c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000a1010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e0000a5010c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400a10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400a0010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000a9010c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74a0010c753332000100204672616374696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6da0010c75333200011464656e6f6da0010c75333200040000ad01100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c650400b10101344173736574496e7374616e636500010000b101100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e00060000b501100c78636d087633286d756c746961737365742c4d756c746941737365747300000400b901013c5665633c4d756c746941737365743e0000b901000002bd0100bd01100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964c101011c4173736574496400010c66756ec501012c46756e676962696c6974790000c101100c78636d087633286d756c746961737365741c4173736574496400010820436f6e637265746504009401344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000c501100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400b00110753132380000002c4e6f6e46756e6769626c650400c90101344173736574496e7374616e636500010000c901100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400b001107531323800010018417272617934040048011c5b75383b20345d0002001841727261793804003101011c5b75383b20385d0003001c417272617931360400350101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000cd01080c78636d4456657273696f6e65644c6f636174696f6e00010c08563204009101014476323a3a4d756c74694c6f636174696f6e000100085633040094014476333a3a4d756c74694c6f636174696f6e0003000856340400d8013076343a3a4c6f636174696f6e00040000d1010c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000d0011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5010c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f72e101014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696ed90101484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696ed90101484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d901085c63756d756c75735f7072696d6974697665735f636f7265584167677265676174654d6573736167654f726967696e00010c104865726500000018506172656e740001001c5369626c696e670400dd01011850617261496400020000dd010c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c7533320000e10110346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c6400040000e5010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74e90101384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e9010418526573756c7408045401ed01044501680108084f6b0400ed01000000000c4572720400680000010000ed010000040000f1010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74e90101384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f501083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000f9010c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74e90101384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465780102010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fd01086461737365745f6875625f77657374656e645f72756e74696d652450726f78795479706500011c0c416e790000002c4e6f6e5472616e736665720001002c43616e63656c50726f7879000200184173736574730003002841737365744f776e65720004003041737365744d616e6167657200050020436f6c6c61746f72000600000102000005040005020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964100128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964100128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964100128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964100128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964100128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964100128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964100128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964100128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964100128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964100128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964100128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964100128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964100128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964100128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657409020c3870616c6c65745f756e69717565731870616c6c6574144576656e7408045400044900016c1c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73110201385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c75651d020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572210201504f7074696f6e3c543a3a4163636f756e7449643e0018048c546865207072696365207761732073657420666f722074686520696e7374616e63652e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019049c54686520707269636520666f722074686520696e7374616e6365207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001a044c416e206974656d2077617320626f756768742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000011020000021000150204184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000019020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00001d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000210204184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000025020c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572210201504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696e210201504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a6572210201504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e65150201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73110201385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f69641502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572210201504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e0022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e65100144426c6f636b4e756d626572466f723c543e00230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d150201444f7074696f6e3c543a3a4974656d49643e0001246174747269627574653d02018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e047c54686520604576656e746020656e756d206f6620746869732070616c6c657429020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00002d020c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6e390201385072696365446972656374696f6e000039020c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c52656365697665000100003d020c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001082c55736564546f436c61696d0400100130436f6c6c656374696f6e4964000000405472616e7366657244697361626c65640001000041020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964940128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964940128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964940128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964940128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964940128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964940128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964940128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964940128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964940128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964940128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964940128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964940128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964940128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964940128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964940128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964940128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657445020c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c6574144576656e74040454000108444e66744672616374696f6e616c697a65641401386e66745f636f6c6c656374696f6e100148543a3a4e6674436f6c6c656374696f6e496400010c6e6674100120543a3a4e667449640001246672616374696f6e73180144417373657442616c616e63654f663c543e0001146173736574100130417373657449644f663c543e00012c62656e6566696369617279000130543a3a4163636f756e7449640000049c416e204e465420776173207375636365737366756c6c79206672616374696f6e616c697a65642e284e6674556e69666965641001386e66745f636f6c6c656374696f6e100148543a3a4e6674436f6c6c656374696f6e496400010c6e6674100120543a3a4e667449640001146173736574100130417373657449644f663c543e00012c62656e6566696369617279000130543a3a4163636f756e74496400010498416e204e465420776173207375636365737366756c6c792072657475726e6564206261636b2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449020c3470616c6c65745f6173736574731870616c6c6574144576656e740804540004490001601c437265617465640c012061737365745f6964100128543a3a4173736574496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e74496400000474536f6d6520617373657420636c6173732077617320637265617465642e184973737565640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500010460536f6d65206173736574732077657265206973737565642e2c5472616e7366657272656410012061737365745f6964100128543a3a4173736574496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500020474536f6d65206173736574732077657265207472616e736665727265642e184275726e65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400011c62616c616e6365180128543a3a42616c616e63650003046c536f6d652061737365747320776572652064657374726f7965642e2c5465616d4368616e67656410012061737365745f6964100128543a3a41737365744964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e74496400040470546865206d616e6167656d656e74207465616d206368616e6765642e304f776e65724368616e67656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400050448546865206f776e6572206368616e6765642e1846726f7a656e08012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400060478536f6d65206163636f756e74206077686f60207761732066726f7a656e2e1854686177656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e74496400070478536f6d65206163636f756e74206077686f6020776173207468617765642e2c417373657446726f7a656e04012061737365745f6964100128543a3a4173736574496400080484536f6d65206173736574206061737365745f696460207761732066726f7a656e2e2c417373657454686177656404012061737365745f6964100128543a3a4173736574496400090484536f6d65206173736574206061737365745f69646020776173207468617765642e444163636f756e747344657374726f7965640c012061737365745f6964100128543a3a417373657449640001486163636f756e74735f64657374726f79656410010c7533320001486163636f756e74735f72656d61696e696e6710010c753332000a04a04163636f756e747320776572652064657374726f79656420666f7220676976656e2061737365742e48417070726f76616c7344657374726f7965640c012061737365745f6964100128543a3a4173736574496400014c617070726f76616c735f64657374726f79656410010c75333200014c617070726f76616c735f72656d61696e696e6710010c753332000b04a4417070726f76616c7320776572652064657374726f79656420666f7220676976656e2061737365742e484465737472756374696f6e5374617274656404012061737365745f6964100128543a3a41737365744964000c04d0416e20617373657420636c61737320697320696e207468652070726f63657373206f66206265696e672064657374726f7965642e2444657374726f79656404012061737365745f6964100128543a3a41737365744964000d0474416e20617373657420636c617373207761732064657374726f7965642e30466f7263654372656174656408012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e744964000e048c536f6d6520617373657420636c6173732077617320666f7263652d637265617465642e2c4d6574616461746153657414012061737365745f6964100128543a3a417373657449640001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000f049c4e6577206d6574616461746120686173206265656e2073657420666f7220616e2061737365742e3c4d65746164617461436c656172656404012061737365745f6964100128543a3a417373657449640010049c4d6574616461746120686173206265656e20636c656172656420666f7220616e2061737365742e40417070726f7665645472616e7366657210012061737365745f6964100128543a3a41737365744964000118736f75726365000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650011043101284164646974696f6e616c292066756e64732068617665206265656e20617070726f76656420666f72207472616e7366657220746f20612064657374696e6174696f6e206163636f756e742e44417070726f76616c43616e63656c6c65640c012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964001204f0416e20617070726f76616c20666f72206163636f756e74206064656c656761746560207761732063616e63656c6c656420627920606f776e6572602e4c5472616e73666572726564417070726f76656414012061737365745f6964100128543a3a417373657449640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e74496400012c64657374696e6174696f6e000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650013083101416e2060616d6f756e746020776173207472616e7366657272656420696e2069747320656e7469726574792066726f6d20606f776e65726020746f206064657374696e6174696f6e602062796074686520617070726f766564206064656c6567617465602e4841737365745374617475734368616e67656404012061737365745f6964100128543a3a41737365744964001404f8416e2061737365742068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e5841737365744d696e42616c616e63654368616e67656408012061737365745f6964100128543a3a4173736574496400013c6e65775f6d696e5f62616c616e6365180128543a3a42616c616e63650015040101546865206d696e5f62616c616e6365206f6620616e20617373657420686173206265656e207570646174656420627920746865206173736574206f776e65722e1c546f75636865640c012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e744964001604fc536f6d65206163636f756e74206077686f6020776173206372656174656420776974682061206465706f7369742066726f6d20606465706f7369746f72602e1c426c6f636b656408012061737365745f6964100128543a3a4173736574496400010c77686f000130543a3a4163636f756e7449640017047c536f6d65206163636f756e74206077686f602077617320626c6f636b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744d020c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c6574144576656e740404540001182c506f6f6c4372656174656410011c63726561746f72000130543a3a4163636f756e7449640488546865206163636f756e74207468617420637265617465642074686520706f6f6c2e011c706f6f6c5f696451020124543a3a506f6f6c496408490154686520706f6f6c206964206173736f63696174656420776974682074686520706f6f6c2e204e6f7465207468617420746865206f72646572206f662074686520617373657473206d6179206e6f74206265f47468652073616d6520617320746865206f726465722073706563696669656420696e207468652063726561746520706f6f6c2065787472696e7369632e0130706f6f6c5f6163636f756e74000130543a3a4163636f756e744964046c546865206163636f756e74204944206f662074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964084101546865206964206f6620746865206c697175696469747920746f6b656e7320746861742077696c6c206265206d696e746564207768656e206173736574732061726520616464656420746f207468697314706f6f6c2e00041d0141207375636365737366756c2063616c6c206f66207468652060437265617465506f6f6c602065787472696e7369632077696c6c206372656174652074686973206576656e742e384c697175696469747941646465641c010c77686f000130543a3a4163636f756e74496404b8546865206163636f756e74207468617420746865206c6971756964697479207761732074616b656e2066726f6d2e011c6d696e745f746f000130543a3a4163636f756e74496404d4546865206163636f756e74207468617420746865206c697175696469747920746f6b656e732077657265206d696e74656420746f2e011c706f6f6c5f696451020124543a3a506f6f6c496404e054686520706f6f6c206964206f662074686520706f6f6c207468617420746865206c69717569646974792077617320616464656420746f2e0140616d6f756e74315f70726f7669646564180128543a3a42616c616e636504e454686520616d6f756e74206f662074686520666972737420617373657420746861742077617320616464656420746f2074686520706f6f6c2e0140616d6f756e74325f70726f7669646564180128543a3a42616c616e636504e854686520616d6f756e74206f6620746865207365636f6e6420617373657420746861742077617320616464656420746f2074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964049c546865206964206f6620746865206c7020746f6b656e207468617420776173206d696e7465642e013c6c705f746f6b656e5f6d696e746564180128543a3a42616c616e636504d054686520616d6f756e74206f66206c7020746f6b656e7320746861742077657265206d696e746564206f6620746861742069642e0104250141207375636365737366756c2063616c6c206f662074686520604164644c6971756964697479602065787472696e7369632077696c6c206372656174652074686973206576656e742e404c697175696469747952656d6f76656420010c77686f000130543a3a4163636f756e74496404dc546865206163636f756e74207468617420746865206c697175696469747920746f6b656e732077657265206275726e65642066726f6d2e012c77697468647261775f746f000130543a3a4163636f756e74496404c0546865206163636f756e74207468617420746865206173736574732077657265207472616e7366657272656420746f2e011c706f6f6c5f696451020124543a3a506f6f6c496404c054686520706f6f6c206964207468617420746865206c6971756964697479207761732072656d6f7665642066726f6d2e011c616d6f756e7431180128543a3a42616c616e636504f454686520616d6f756e74206f66207468652066697273742061737365742074686174207761732072656d6f7665642066726f6d2074686520706f6f6c2e011c616d6f756e7432180128543a3a42616c616e636504f854686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656d6f7665642066726f6d2074686520706f6f6c2e01206c705f746f6b656e100138543a3a506f6f6c41737365744964049c546865206964206f6620746865206c7020746f6b656e207468617420776173206275726e65642e013c6c705f746f6b656e5f6275726e6564180128543a3a42616c616e636504d054686520616d6f756e74206f66206c7020746f6b656e7320746861742077657265206275726e6564206f6620746861742069642e01387769746864726177616c5f6665655502011c5065726d696c6c04744c6971756964697479207769746864726177616c20666565202825292e0204310141207375636365737366756c2063616c6c206f6620746865206052656d6f76654c6971756964697479602065787472696e7369632077696c6c206372656174652074686973206576656e742e3053776170457865637574656414010c77686f000130543a3a4163636f756e74496404b45768696368206163636f756e74207761732074686520696e7374696761746f72206f662074686520737761702e011c73656e645f746f000130543a3a4163636f756e74496404c0546865206163636f756e74207468617420746865206173736574732077657265207472616e7366657272656420746f2e0124616d6f756e745f696e180128543a3a42616c616e636504bc54686520616d6f756e74206f662074686520666972737420617373657420746861742077617320737761707065642e0128616d6f756e745f6f7574180128543a3a42616c616e636504c454686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656365697665642e0110706174685902013842616c616e6365506174683c543e08fc54686520726f757465206f6620617373657420494473207769746820616d6f756e747320746861742074686520737761702077656e74207468726f7567682eec452e672e2028412c20616d6f756e745f696e29202d3e2028446f742c20616d6f756e745f6f757429202d3e2028422c20616d6f756e745f6f757429030835014173736574732068617665206265656e20636f6e7665727465642066726f6d206f6e6520746f20616e6f746865722e20426f74682060537761704578616374546f6b656e466f72546f6b656e60d8616e64206053776170546f6b656e466f724578616374546f6b656e602077696c6c2067656e65726174652074686973206576656e742e485377617043726564697445786563757465640c0124616d6f756e745f696e180128543a3a42616c616e636504bc54686520616d6f756e74206f662074686520666972737420617373657420746861742077617320737761707065642e0128616d6f756e745f6f7574180128543a3a42616c616e636504c454686520616d6f756e74206f6620746865207365636f6e642061737365742074686174207761732072656365697665642e0110706174685902013842616c616e6365506174683c543e08fc54686520726f757465206f6620617373657420494473207769746820616d6f756e747320746861742074686520737761702077656e74207468726f7567682eec452e672e2028412c20616d6f756e745f696e29202d3e2028446f742c20616d6f756e745f6f757429202d3e2028422c20616d6f756e745f6f7574290404bc4173736574732068617665206265656e20636f6e7665727465642066726f6d206f6e6520746f20616e6f746865722e1c546f756368656408011c706f6f6c5f696451020124543a3a506f6f6c4964044c546865204944206f662074686520706f6f6c2e010c77686f000130543a3a4163636f756e7449640484546865206163636f756e7420696e6974696174696e672074686520746f7563682e05040d01506f6f6c20686173206265656e20746f756368656420696e206f7264657220746f2066756c66696c6c206f7065726174696f6e616c20726571756972656d656e74732e047c54686520604576656e746020656e756d206f6620746869732070616c6c657451020000040894940055020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c753332000059020000025d02005d020000040894180061020c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c6574144576656e74040454000104504d69677261746564546f4e65774163636f756e740c011c706f6f6c5f696451020124543a3a506f6f6c49640428506f6f6c27732049442e01347072696f725f6163636f756e74000130543a3a4163636f756e7449640460506f6f6c2773207072696f72206163636f756e742049442e012c6e65775f6163636f756e74000130543a3a4163636f756e7449640458506f6f6c2773206e6577206163636f756e742049442e0004f8496e646963617465732074686174206120706f6f6c20686173206265656e206d6967726174656420746f20746865206e6577206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574650208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000690200000234006d02000002710200710200000408101000750208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ea0014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d657902016473705f72756e74696d653a3a52756e74696d65537472696e670000790200000502007d0208306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c000081020c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73850201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b6579738d0201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85020000028902008902000004083838008d02000002380091020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373950201845065724469737061746368436c6173733c57656967687473506572436c6173733e000095020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454019902000c01186e6f726d616c990201045400012c6f7065726174696f6e616c99020104540001246d616e6461746f72799902010454000099020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e7369639d0201384f7074696f6e3c5765696768743e0001246d61785f746f74616c9d0201384f7074696f6e3c5765696768743e00012072657365727665649d0201384f7074696f6e3c5765696768743e00009d0204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000a1020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178a50201545065724469737061746368436c6173733c7533323e0000a5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000a902082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c7536340000ad02082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d657902013452756e74696d65537472696e67000124696d706c5f6e616d657902013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973b102011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000b102040c436f7704045401b502000400b502000000b502000002b90200b9020000040831011000bd020c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574c102000002c50200c5020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e7420416e636573746f720404480134000c0138757365645f62616e647769647468c90201345573656442616e647769647468000138706172615f686561645f68617368dd0201244f7074696f6e3c483e000160636f6e73756d65645f676f5f61686561645f7369676e616ce102018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000c9020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74345573656442616e64776964746800000c0134756d705f6d73675f636f756e7410010c75333200013c756d705f746f74616c5f627974657310010c75333200013468726d705f6f7574676f696e67cd02018c42547265654d61703c5061726149642c2048726d704368616e6e656c5570646174653e0000cd02042042547265654d617008044b01dd01045601d102000400d502000000d1020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e744448726d704368616e6e656c55706461746500000801246d73675f636f756e7410010c75333200012c746f74616c5f627974657310010c7533320000d502000002d90200d90200000408dd01d10200dd0204184f7074696f6e04045401340108104e6f6e6500000010536f6d650400340000010000e10204184f7074696f6e04045401e5020108104e6f6e6500000010536f6d650400e5020000010000e5020c4c706f6c6b61646f745f7072696d6974697665730876373855706772616465476f41686561640001081441626f72740000001c476f416865616400010000e9020c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d48756e696e636c756465645f7365676d656e74385365676d656e74547261636b65720404480134000c0138757365645f62616e647769647468c90201345573656442616e64776964746800013868726d705f77617465726d61726b150201804f7074696f6e3c72656c61795f636861696e3a3a426c6f636b4e756d6265723e000160636f6e73756d65645f676f5f61686561645f7369676e616ce102018c4f7074696f6e3c72656c61795f636861696e3a3a55706772616465476f41686561643e0000ed020c4c706f6c6b61646f745f7072696d6974697665730876375c50657273697374656456616c69646174696f6e446174610804480134044e01100010012c706172656e745f68656164f1020120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74340104480001306d61785f706f765f73697a6510010c7533320000f1020c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e0000f50204184f7074696f6e04045401f9020108104e6f6e6500000010536f6d650400f9020000010000f9020c4c706f6c6b61646f745f7072696d69746976657308763748557067726164655265737472696374696f6e0001041c50726573656e7400000000fd020c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465730103014442547265655365743c5665633c75383e3e000001030420425472656553657404045401380004008d0200000005030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616434014472656c61795f636861696e3a3a4861736800019c72656c61795f64697370617463685f71756575655f72656d61696e696e675f63617061636974790903018c52656c61794469737061746368517565756552656d61696e696e674361706163697479000140696e67726573735f6368616e6e656c730d0301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c730d0301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000009030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f748c52656c61794469737061746368517565756552656d61696e696e674361706163697479000008013c72656d61696e696e675f636f756e7410010c75333200013872656d61696e696e675f73697a6510010c75333200000d03000002110300110300000408dd0115030015030c4c706f6c6b61646f745f7072696d6974697665730876374c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164dd0201304f7074696f6e3c486173683e000019030c4c706f6c6b61646f745f7072696d697469766573087637644162726964676564486f7374436f6e66696775726174696f6e00002801346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d731d0301484173796e634261636b696e67506172616d7300001d03104c706f6c6b61646f745f7072696d697469766573087637346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c75333200002103089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040034012452656c61794861736800002503042042547265654d617008044b01dd010456012103000400290300000029030000022d03002d0300000408dd01210300310300000235030035030860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401dd0100080124726563697069656e74dd01010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e000039030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800003d030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174614103015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653801345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4103089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461ed02015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465fd02015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765734503016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d657373616765734d0301a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000450300000249030049030860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d65737361676500004d03042042547265654d617008044b01dd0104560151030004005903000000510300000255030055030860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e000059030000025d03005d0300000408dd0151030061030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e65030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e69030c5873746167696e675f70617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454017103045300000400790301185665633c543e000071030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964310101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e737503011c526561736f6e73000075030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000079030000027103007d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018103045300000400850301185665633c543e000081030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720131011c42616c616e6365011800080108696431010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000850300000281030089030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d03045300000400990301185665633c543e00008d030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640191031c42616c616e63650118000801086964910301084964000118616d6f756e7418011c42616c616e636500009103086461737365745f6875625f77657374656e645f72756e74696d654452756e74696d65486f6c64526561736f6e000104504e66744672616374696f6e616c697a6174696f6e0400950301a070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e3a3a486f6c64526561736f6e0036000095030c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c657428486f6c64526561736f6e000104384672616374696f6e616c697a65640000000099030000028d03009d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400a50301185665633c543e0000a1030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401ed011c42616c616e63650118000801086964ed0101084964000118616d6f756e7418011c42616c616e63650000a503000002a10300a9030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565b00128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fc001445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565b00128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6eb503014c41646a7573746d656e74446972656374696f6e00011464656c7461b00128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ed01011408496404000001244163636f756e74496400000014496e6465780400b10301304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400ac01205b75383b2032305d00040000b103000006ed0100b5030c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e63726561736500000020446563726561736500010000b9030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000c1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c001185665633c543e0000c5030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c903045300000400cd0301185665633c543e0000c9030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000cd03000002c90300d1030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000124447365745f696e76756c6e657261626c657304010c6e6577c001445665633c543a3a4163636f756e7449643e000034310153657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e20546865736520636f6c6c61746f7273206d75737420646f20736f6d65d07072657061726174696f6e2c206e616d656c7920746f206861766520726567697374657265642073657373696f6e206b6579732e0059015468652063616c6c2077696c6c2072656d6f766520616e79206163636f756e747320746861742068617665206e6f742072656769737465726564206b6579732066726f6d20746865207365742e20546861742069732c5d016974206973206e6f6e2d61746f6d69633b207468652063616c6c6572206163636570747320616c6c20604163636f756e74496460732070617373656420696e20606e657760205f696e646976696475616c6c795f206173310161636365707461626c6520496e76756c6e657261626c65732c20616e64206973206e6f742070726f706f73696e672061205f7365745f206f66206e657720496e76756c6e657261626c65732e005901546869732063616c6c20646f6573206e6f74206d61696e7461696e206d757475616c206578636c75736976697479206f662060496e76756c6e657261626c65736020616e64206043616e64696461746573602e20497461016973207265636f6d6d656e64656420746f207573652061206261746368206f6620606164645f696e76756c6e657261626c656020616e64206072656d6f76655f696e76756c6e657261626c656020696e73746561642e204151016062617463685f616c6c602063616e20616c736f206265207573656420746f20656e666f7263652061746f6d69636974792e20496620616e792063616e646964617465732061726520696e636c7564656420696e4d01606e6577602c20746865792073686f756c642062652072656d6f7665642077697468206072656d6f76655f696e76756c6e657261626c655f63616e6469646174656020616674657220657865637574696f6e2e00944d7573742062652063616c6c65642062792074686520605570646174654f726967696e602e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200011455015365742074686520696465616c206e756d626572206f66206e6f6e2d696e76756c6e657261626c6520636f6c6c61746f72732e204966206c6f776572696e672074686973206e756d6265722c207468656e2074686561016e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e2041736964652066726f6d2074686174206564676520636173652c350174686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f72652063616e64696461746573207468616e207468652064657369726564206e756d6265722e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00021c78536574207468652063616e64696461637920626f6e6420616d6f756e742e0051014966207468652063616e64696461637920626f6e6420697320696e6372656173656420627920746869732063616c6c2c20616c6c2063757272656e742063616e64696461746573207768696368206861766520614d016465706f736974206c6f776572207468616e20746865206e657720626f6e642077696c6c206265206b69636b65642066726f6d20746865206c69737420616e6420676574207468656972206465706f73697473146261636b2e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041455014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e001901546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f775c604d696e456c696769626c65436f6c6c61746f7273602e406164645f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e74496400051045014164642061206e6577206163636f756e74206077686f6020746f20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e206077686f60206d75737420686176651d01726567697374657265642073657373696f6e206b6579732e204966206077686f6020697320612063616e6469646174652c20746865792077696c6c2062652072656d6f7665642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e4c72656d6f76655f696e76756c6e657261626c6504010c77686f000130543a3a4163636f756e744964000610610152656d6f766520616e206163636f756e74206077686f602066726f6d20746865206c697374206f662060496e76756c6e657261626c65736020636f6c6c61746f72732e2060496e76756c6e657261626c657360206d75737428626520736f727465642e00d0546865206f726967696e20666f7220746869732063616c6c206d7573742062652074686520605570646174654f726967696e602e2c7570646174655f626f6e6404012c6e65775f6465706f73697418013042616c616e63654f663c543e00071c5d01557064617465207468652063616e64696461637920626f6e64206f6620636f6c6c61746f722063616e64696461746520606f726967696e6020746f2061206e657720616d6f756e7420606e65775f6465706f736974602e00410153657474696e67206120606e65775f6465706f736974602074686174206973206c6f776572207468616e207468652063757272656e74206465706f736974207768696c6520606f726967696e60206973e06f6363757079696e67206120746f702d604465736972656443616e646964617465736020736c6f74206973206e6f7420616c6c6f7765642e005901546869732063616c6c2077696c6c206661696c20696620606f726967696e60206973206e6f74206120636f6c6c61746f722063616e6469646174652c20746865207570646174656420626f6e64206973206c6f77657219017468616e20746865206d696e696d756d2063616e64696461637920626f6e642c20616e642f6f722074686520616d6f756e742063616e6e6f742062652072657365727665642e4c74616b655f63616e6469646174655f736c6f7408011c6465706f73697418013042616c616e63654f663c543e000118746172676574000130543a3a4163636f756e74496400081c4d015468652063616c6c657220606f726967696e60207265706c6163657320612063616e64696461746520607461726765746020696e2074686520636f6c6c61746f722063616e646964617465206c6973742062795501726573657276696e6720606465706f736974602e2054686520616d6f756e7420606465706f73697460207265736572766564206279207468652063616c6c6572206d7573742062652067726561746572207468616ee0746865206578697374696e6720626f6e64206f66207468652074617267657420697420697320747279696e6720746f207265706c6163652e005901546869732063616c6c2077696c6c206661696c206966207468652063616c6c657220697320616c7265616479206120636f6c6c61746f722063616e646964617465206f7220696e76756c6e657261626c652c20746865550163616c6c657220646f6573206e6f74206861766520726567697374657265642073657373696f6e206b6579732c2074686520746172676574206973206e6f74206120636f6c6c61746f722063616e6469646174652cbc616e642f6f722074686520606465706f7369746020616d6f756e742063616e6e6f742062652072657365727665642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400014444546f6f4d616e7943616e646964617465730000048c5468652070616c6c65742068617320746f6f206d616e792063616e646964617465732e5c546f6f466577456c696769626c65436f6c6c61746f7273000104ac4c656176696e6720776f756c6420726573756c7420696e20746f6f206665772063616e646964617465732e40416c726561647943616e6469646174650002047c4163636f756e7420697320616c726561647920612063616e6469646174652e304e6f7443616e6469646174650003046c4163636f756e74206973206e6f7420612063616e6469646174652e50546f6f4d616e79496e76756c6e657261626c65730004048454686572652061726520746f6f206d616e7920496e76756c6e657261626c65732e4c416c7265616479496e76756c6e657261626c650005048c4163636f756e7420697320616c726561647920616e20496e76756c6e657261626c652e3c4e6f74496e76756c6e657261626c650006047c4163636f756e74206973206e6f7420616e20496e76756c6e657261626c652e5c4e6f4173736f63696174656456616c696461746f7249640007049c4163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049442e5856616c696461746f724e6f74526567697374657265640008048c56616c696461746f72204944206973206e6f742079657420726567697374657265642e6c496e73657274546f43616e6469646174654c6973744661696c65640009049c436f756c64206e6f7420696e7365727420696e207468652063616e646964617465206c6973742e7452656d6f766546726f6d43616e6469646174654c6973744661696c6564000a04a4436f756c64206e6f742072656d6f76652066726f6d207468652063616e646964617465206c6973742e344465706f736974546f6f4c6f77000b04f44e6577206465706f73697420616d6f756e7420776f756c642062652062656c6f7720746865206d696e696d756d2063616e64696461637920626f6e642e6455706461746543616e6469646174654c6973744661696c6564000c0490436f756c64206e6f7420757064617465207468652063616e646964617465206c6973742e40496e73756666696369656e74426f6e64000d0429014465706f73697420616d6f756e7420697320746f6f206c6f7720746f2074616b652074686520746172676574277320736c6f7420696e207468652063616e646964617465206c6973742e5054617267657449734e6f7443616e646964617465000e042d0154686520746172676574206163636f756e7420746f206265207265706c6163656420696e207468652063616e646964617465206c697374206973206e6f7420612063616e6469646174652e404964656e746963616c4465706f736974000f040d015468652075706461746564206465706f73697420616d6f756e7420697320657175616c20746f2074686520616d6f756e7420616c72656164792072657365727665642e40496e76616c6964556e726573657276650010043d0143616e6e6f74206c6f7765722063616e64696461637920626f6e64207768696c65206f6363757079696e6720612066757475726520636f6c6c61746f7220736c6f7420696e20746865206c6973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed903000002dd0300dd030000040800e10300e103086461737365745f6875625f77657374656e645f72756e74696d652c53657373696f6e4b657973000004011061757261e50301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000e503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c69630000040004013c737232353531393a3a5075626c69630000e90300000408ed033800ed030c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d0000f1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973e103011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ef9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e503045300000400fd0301185665633c543e0000fd03000002e503000104084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c75363400000504000004080104100009040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401dd010453000004000d04012c42547265655365743c543e00000d040420425472656553657404045401dd0100040011040000001104000002dd010015040000021904001904086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74dd01011850617261496400011473746174651d0401344f7574626f756e6453746174650001347369676e616c735f6578697374200110626f6f6c00012c66697273745f696e6465780102010c7531360001286c6173745f696e6465780102010c75313600001d04086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000210400000408dd010102002504086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e6669674461746100000c014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c753332000029040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c0404540001145473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031449014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626578746f6c6420746f2073757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041445014f76657277726974657320746865206e756d626572206f66207061676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e798866757274686572206d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c7533320005144d014f76657277726974657320746865206e756d626572206f6620706167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c73010174686174206d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c6460040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f7204045400010c384261645175657565436f6e666967000004110153657474696e672074686520717565756520636f6e666967206661696c65642073696e6365206f6e65206f66206974732076616c7565732077617320696e76616c69642e40416c726561647953757370656e6465640001048c54686520657865637574696f6e20697320616c72656164792073757370656e6465642e38416c7265616479526573756d65640002048454686520657865637574696f6e20697320616c726561647920726573756d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31040c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572cd01014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572350401644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f74696679390401404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696ecd01014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e73654104014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000350404184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000390404184f7074696f6e040454013d040108104e6f6e6500000010536f6d6504003d0400000100003d04000004080808004104080c78636d4456657273696f6e6564526573706f6e736500010c08563204004504013076323a3a526573706f6e736500020008563304005504013076333a3a526573706f6e736500030008563404003901013076343a3a526573706f6e73650004000045040c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304008101012c4d756c74694173736574730001003c457865637574696f6e526573756c740400490401504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000490404184f7074696f6e040454014d040108104e6f6e6500000010536f6d6504004d0400000100004d0400000408105104005104100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c650019000055040c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400b501012c4d756c74694173736574730001003c457865637574696f6e526573756c7404003d0101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040059040198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400550101384d617962654572726f72436f64650005000059040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d04045300000400650401185665633c543e00005d040c0c78636d0876332850616c6c6574496e666f0000180114696e646578a0010c7533320001106e616d6561040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6561040180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72a0010c7533320001146d696e6f72a0010c7533320001147061746368a0010c753332000061040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000065040000025d040069040000040810cd01006d040000040c3028100071040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017504045300000400790401185665633c543e0000750400000408cd01100079040000027504007d040c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e745461726765747304008104013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000810404184f7074696f6e04045401380108104e6f6e6500000010536f6d65040038000001000085040000040c10008904008904080c78636d4056657273696f6e6564417373657449640001080856330400c101012c76333a3a4173736574496400030008563404002501012c76343a3a41737365744964000400008d040c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e74696669657201ed01304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572cd01014456657273696f6e65644c6f636174696f6e0001186c6f636b6572cd01014456657273696f6e65644c6f636174696f6e000124636f6e73756d657273910401d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000091040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019504045300000400990401185665633c543e0000950400000408ed01180099040000029504009d040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a104045300000400a50401185665633c543e0000a1040000040818cd0100a504000002a10400a9040c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001381073656e6408011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d657373616765ad040154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765ed0401b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ed80134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e150201484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ecd010158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ecd010158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f61737365747314011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69747901012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f6173736574730801186173736574737d010150426f783c56657273696f6e65644173736574733e00012c62656e6566696369617279cd010158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e8c7472616e736665725f6173736574735f7573696e675f747970655f616e645f7468656e1c011064657374cd010158426f783c56657273696f6e65644c6f636174696f6e3e0001186173736574737d010150426f783c56657273696f6e65644173736574733e0001506173736574735f7472616e736665725f7479706519050144426f783c5472616e73666572547970653e00013872656d6f74655f666565735f696489040154426f783c56657273696f6e6564417373657449643e000148666565735f7472616e736665725f7479706519050144426f783c5472616e73666572547970653e000148637573746f6d5f78636d5f6f6e5f64657374ad040154426f783c56657273696f6e656458636d3c28293e3e0001307765696768745f6c696d69747901012c5765696768744c696d6974000dc055015472616e73666572206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207573696e67206578706c69636974207472616e7366657268747970657320666f722061737365747320616e6420666565732e0059016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206d61792062652074656c65706f727461626c6520746f206064657374602e2043616c6c6572206d757374ec70726f766964652074686520606173736574735f7472616e736665725f747970656020746f206265207573656420666f722060617373657473603a5101202d20605472616e73666572547970653a3a4c6f63616c52657365727665603a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a44657374696e6174696f6e52657365727665603a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a52656d6f746552657365727665287265736572766529603a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f206072657365727665606101202020636861696e20746f206d6f76652072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f74686572550120202058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e205479706963616c6c79942020207468652072656d6f746520607265736572766560206973204173736574204875622e4501202d20605472616e73666572547970653a3a54656c65706f7274603a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746fe82020206d696e742f74656c65706f72742061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0055014f6e207468652064657374696e6174696f6e20636861696e2c2061732077656c6c20617320616e7920696e7465726d65646961727920686f70732c2060427579457865637574696f6e60206973207573656420746f210162757920657865637574696f6e207573696e67207472616e73666572726564206061737365747360206964656e746966696564206279206072656d6f74655f666565735f6964602e59014d616b65207375726520656e6f756768206f662074686520737065636966696564206072656d6f74655f666565735f69646020617373657420697320696e636c7564656420696e2074686520676976656e206c69737461016f662060617373657473602e206072656d6f74655f666565735f6964602073686f756c6420626520656e6f75676820746f2070617920666f7220607765696768745f6c696d6974602e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0045016072656d6f74655f666565735f696460206d61792075736520646966666572656e74207472616e736665722074797065207468616e2072657374206f6620606173736574736020616e642063616e2062659c737065636966696564207468726f7567682060666565735f7472616e736665725f74797065602e0061015468652063616c6c6572206e6565647320746f207370656369667920776861742073686f756c642068617070656e20746f20746865207472616e7366657272656420617373657473206f6e6365207468657920726561636841017468652060646573746020636861696e2e205468697320697320646f6e65207468726f756768207468652060637573746f6d5f78636d5f6f6e5f646573746020706172616d657465722c207768696368fc636f6e7461696e732074686520696e737472756374696f6e7320746f2065786563757465206f6e2060646573746020617320612066696e616c20737465702e7c20205468697320697320757375616c6c792061732073696d706c652061733a510120206058636d28766563215b4465706f7369744173736574207b206173736574733a2057696c6428416c6c436f756e746564286173736574732e6c656e282929292c2062656e6566696369617279207d5d29602c3101202062757420636f756c6420626520736f6d657468696e67206d6f72652065786f746963206c696b652073656e64696e6720746865206061737365747360206576656e20667572746865722e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d3d01202072656c617920746f2070617261636861696e2c206f72206028706172656e74733a20322c2028476c6f62616c436f6e73656e737573282e2e292c202e2e29296020746f2073656e642066726f6df4202070617261636861696e206163726f737320612062726964676520746f20616e6f746865722065636f73797374656d2064657374696e6174696f6e2e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e3d012d20606173736574735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e73666572207468652060617373657473602e2d012d206072656d6f74655f666565735f6964603a204f6e65206f662074686520696e636c7564656420606173736574736020746f206265206265207573656420746f2070617920666565732e49012d2060666565735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e736665722074686520606665657360206173736574732e59012d2060637573746f6d5f78636d5f6f6e5f64657374603a205468652058434d20746f206265206578656375746564206f6e2060646573746020636861696e20617320746865206c6173742073746570206f6620746865590120207472616e736665722c20776869636820616c736f2064657465726d696e657320776861742068617070656e7320746f2074686520617373657473206f6e207468652064657374696e6174696f6e20636861696e2e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead04080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400b104015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400cd04015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000d01015076343a3a58636d3c52756e74696d6543616c6c3e00040000b1040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400b50401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000b504000002b90400b9040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008101012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008101012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008101012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736545040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738101012c4d756c746941737365747300012c62656e6566696369617279910101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738101012c4d756c746941737365747300011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c65010168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040095010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200012c62656e6566696369617279910101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000e003445786368616e6765417373657408011067697665bd0401404d756c7469417373657446696c74657200011c726563656976658101012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473bd0401404d756c7469417373657446696c74657200011c72657365727665910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473bd0401404d756c7469417373657446696c74657200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e000118617373657473bd0401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573890101284d756c746941737365740001307765696768745f6c696d6974c904012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400b104014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400b104014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738101012c4d756c74694173736574730001187469636b6574910101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000bd04100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504008101012c4d756c74694173736574730000001057696c640400c104013857696c644d756c7469417373657400010000c104100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869648d01011c4173736574496400010c66756ec504013c57696c6446756e676962696c69747900010000c504100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000c9040c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000cd040c0c78636d0876330c58636d041043616c6c00000400d10401585665633c496e737472756374696f6e3c43616c6c3e3e0000d104000002d50400d5040c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400b501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400b501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400b501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736555040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473b501012c4d756c746941737365747300012c62656e65666963696172799401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473b501012c4d756c7469417373657473000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6501014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400980154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400dd0401445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473e10401404d756c7469417373657446696c74657200012c62656e65666963696172799401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000e003445786368616e676541737365740c011067697665e10401404d756c7469417373657446696c74657200011077616e74b501012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473e10401404d756c7469417373657446696c74657200011c726573657276659401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f000118617373657473e10401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573bd0101284d756c746941737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400cd04012458636d3c43616c6c3e0015002c536574417070656e6469780400cd04012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473b501012c4d756c74694173736574730001187469636b65749401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400b501012c4d756c7469417373657473001c002c45787065637441737365740400b501012c4d756c7469417373657473001d00304578706563744f726967696e0400d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400dd0401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e04009c01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726ba801244e6574776f726b496400012c64657374696e6174696f6e980154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e002600244c6f636b41737365740801146173736574bd0101284d756c74694173736574000120756e6c6f636b65729401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574bd0101284d756c746941737365740001187461726765749401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574bd0101284d756c746941737365740001146f776e65729401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574bd0101284d756c746941737365740001186c6f636b65729401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04009401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696ed90401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000d90404184f7074696f6e04045401940108104e6f6e6500000010536f6d650400940000010000dd040c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6e9401344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f7765696768742801185765696768740000e104100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400b501012c4d756c74694173736574730000001057696c640400e504013857696c644d756c7469417373657400010000e504100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964c101011c4173736574496400010c66756ee904013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400a0010c75333200020030416c6c4f66436f756e7465640c01086964c101011c4173736574496400010c66756ee904013c57696c6446756e676962696c697479000114636f756e74a0010c75333200030000e904100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000ed04080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400f104015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304000105015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404000d05015076343a3a58636d3c52756e74696d6543616c6c3e00040000f1040c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400f50401745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000f504000002f90400f9040c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008101012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008101012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008101012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736545040120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738101012c4d756c746941737365747300012c62656e6566696369617279910101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738101012c4d756c746941737365747300011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6cfd040168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040095010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200012c62656e6566696369617279910101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473bd0401404d756c7469417373657446696c7465720001286d61785f617373657473a0010c75333200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e000e003445786368616e6765417373657408011067697665bd0401404d756c7469417373657446696c74657200011c726563656976658101012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473bd0401404d756c7469417373657446696c74657200011c72657365727665910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473bd0401404d756c7469417373657446696c74657200011064657374910101344d756c74694c6f636174696f6e00010c78636db104011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374910101344d756c74694c6f636174696f6e000118617373657473bd0401404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573890101284d756c746941737365740001307765696768745f6c696d6974c904012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400f104014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400f104014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738101012c4d756c74694173736574730001187469636b6574910101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000fd040c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e000001050c0c78636d0876330c58636d041043616c6c00000400050501585665633c496e737472756374696f6e3c43616c6c3e3e0000050500000209050009050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400b501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400b501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400b501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736555040120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473b501012c4d756c746941737365747300012c62656e65666963696172799401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473b501012c4d756c7469417373657473000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cfd04014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400980154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400dd0401445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473e10401404d756c7469417373657446696c74657200012c62656e65666963696172799401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e000e003445786368616e676541737365740c011067697665e10401404d756c7469417373657446696c74657200011077616e74b501012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473e10401404d756c7469417373657446696c74657200011c726573657276659401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473e10401404d756c7469417373657446696c746572000110646573749401344d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f000118617373657473e10401404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573bd0101284d756c746941737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000105012458636d3c43616c6c3e0015002c536574417070656e64697804000105012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473b501012c4d756c74694173736574730001187469636b65749401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400b501012c4d756c7469417373657473001c002c45787065637441737365740400b501012c4d756c7469417373657473001d00304578706563744f726967696e0400d90401544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fdd0401445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400dd0401445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e04009c01204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726ba801244e6574776f726b496400012c64657374696e6174696f6e980154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd04011c58636d3c28293e002600244c6f636b41737365740801146173736574bd0101284d756c74694173736574000120756e6c6f636b65729401344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574bd0101284d756c746941737365740001187461726765749401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574bd0101284d756c746941737365740001146f776e65729401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574bd0101284d756c746941737365740001186c6f636b65729401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04009401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696ed90401544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00000d050c2c73746167696e675f78636d0876340c58636d041043616c6c00000400110501585665633c496e737472756374696f6e3c43616c6c3e3e0000110500000215050015050c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040019010118417373657473000000545265736572766541737365744465706f7369746564040019010118417373657473000100585265636569766554656c65706f727465644173736574040019010118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736539010120526573706f6e73650001286d61785f77656967687428011857656967687400011c717565726965725d0101404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574731901011841737365747300012c62656e6566696369617279d801204c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731901011841737365747300011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64610101284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cfd04014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572a0010c7533320001406d61785f6d6573736167655f73697a65a0010c7533320001306d61785f6361706163697479a0010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74a0010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72a0010c75333200011873656e646572a0010c753332000124726563697069656e74a0010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400dc0140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400690101445175657279526573706f6e7365496e666f000c00304465706f73697441737365740801186173736574736d01012c417373657446696c74657200012c62656e6566696369617279d801204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e000e003445786368616e676541737365740c0110676976656d01012c417373657446696c74657200011077616e741901011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c01186173736574736d01012c417373657446696c74657200011c72657365727665d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574736d01012c417373657446696c74657200011064657374d801204c6f636174696f6e00010c78636d0d01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0001186173736574736d01012c417373657446696c74657200120030427579457865637574696f6e080110666565732101011441737365740001307765696768745f6c696d69747901012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d05012458636d3c43616c6c3e0015002c536574417070656e64697804000d05012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473190101184173736574730001187469636b6574d801204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040019010118417373657473001c002c4578706563744173736574040019010118417373657473001d00304578706563744f726967696e04005d0101404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204003d0101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400550101384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f690101445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578a0010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f72a0010c75333200013c6d696e5f63726174655f6d696e6f72a0010c753332002200505265706f72745472616e736163745374617475730400690101445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400e401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bec01244e6574776f726b496400012c64657374696e6174696f6edc0140496e746572696f724c6f636174696f6e00010c78636d0d01011c58636d3c28293e002600244c6f636b41737365740801146173736574210101144173736574000120756e6c6f636b6572d801204c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574210101144173736574000118746172676574d801204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365742101011441737365740001146f776e6572d801204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365742101011441737365740001186c6f636b6572d801204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400d801204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747901012c5765696768744c696d6974000130636865636b5f6f726967696e5d0101404f7074696f6e3c4c6f636174696f6e3e002f00001905105073746167696e675f78636d5f6578656375746f72187472616974733861737365745f7472616e73666572305472616e73666572547970650001102054656c65706f7274000000304c6f63616c526573657276650001004844657374696e6174696f6e526573657276650002003452656d6f7465526573657276650400cd01014456657273696f6e65644c6f636174696f6e000300001d050c2870616c6c65745f78636d1870616c6c6574144572726f720404540001602c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21050c4863756d756c75735f70616c6c65745f78636d1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2505086062705f78636d5f6272696467655f6875625f726f757465722c4272696467655374617465000008014c64656c69766572795f6665655f666163746f723903012446697865645531323800013069735f636f6e676573746564200110626f6f6c000029050c7070616c6c65745f78636d5f6272696467655f6875625f726f757465721870616c6c65741043616c6c080454000449000104507265706f72745f6272696467655f7374617475730801246272696467655f69643401104832353600013069735f636f6e676573746564200110626f6f6c000004a84e6f74696669636174696f6e2061626f757420636f6e676573746564206272696467652071756575652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d05085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e01d90100180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f757273310501844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c7536340000310504184f7074696f6e0404540135050108104e6f6e6500000010536f6d650400350500000100003505085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e01d9010008011070726576d90101344d6573736167654f726967696e0001106e657874d90101344d6573736167654f726967696e0000390500000408d90110003d05085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561704105019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e000041050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000045050c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696ed90101484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696ed90101484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49050c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d050c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465780102010c75313600011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ee9050154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c735105017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050000025505005505086461737365745f6875625f77657374656e645f72756e74696d652c52756e74696d6543616c6c00015c1853797374656d0400810201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d04003d0301d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400650301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003003450617261636861696e496e666f0400690301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0004002042616c616e6365730400a90301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000a0044436f6c6c61746f7253656c656374696f6e0400d10301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e0015001c53657373696f6e0400f10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016002458636d7051756575650400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e001e002c506f6c6b61646f7458636d0400a90401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e001f002843756d756c757358636d0400210501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43756d756c757358636d2c2052756e74696d653e00200044546f526f636f636f58636d526f757465720400290501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f526f636f636f58636d526f757465722c2052756e74696d653e002200304d65737361676551756575650400450501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e0023001c5574696c69747904004d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e002800204d756c74697369670400590501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0029001450726f78790400610501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002a00184173736574730400690501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574732c2052756e74696d653e0032001c556e697175657304006d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e003300104e66747304007d0501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e00340034466f726569676e4173736574730400d10501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f726569676e4173736574732c2052756e74696d653e003500504e66744672616374696f6e616c697a6174696f6e0400d50501e50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e66744672616374696f6e616c697a6174696f6e2c2052756e74696d653e00360028506f6f6c4173736574730400d90501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6f6c4173736574732c2052756e74696d653e0037003c4173736574436f6e76657273696f6e0400dd0501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574436f6e76657273696f6e2c2052756e74696d653e003800604173736574436f6e76657273696f6e4d6967726174696f6e0400e50501f50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574436f6e76657273696f6e4d6967726174696f6e2c2052756e74696d653e00c8000059050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e745d0501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e745d0501904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c640102010c7531360001446f746865725f7369676e61746f72696573c001445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d0504184f7074696f6e04045401f5010108104e6f6e6500000010536f6d650400f501000001000061050c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065650501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065fd010130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465780102010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065fd010130543a3a50726f787954797065000114696e6465780102010c753136000118686569676874a00144426c6f636b4e756d626572466f723c543e0001246578745f696e646578a0010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0001107265616cad0301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065650501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e650504184f7074696f6e04045401fd010108104e6f6e6500000010536f6d650400fd01000001000069050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c01086964a0014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174651001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f790401086964a0014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e74730401086964a0014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c730401086964a0014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f790401086964a0014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c01086964a0014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c01086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c01086964a0014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c01086964a0014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e736665721001086964a0014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a650801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296010746861770801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f61737365740401086964a0014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f61737365740401086964a0014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e6572736869700801086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d1001086964a0014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d657461646174611001086964a0014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d657461646174610401086964a0014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d657461646174611401086964a0014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d657461646174610401086964a0014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f7374617475732001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c01086964a0014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0801086964a0014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c01086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f7665641001086964a0014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f7563680401086964a0014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e640801086964a0014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e63650801086964a0014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f746865720801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f746865720801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b0801086964a0014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d050c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016818637265617465080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573737105013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012c636865636b5f6f776e6572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00043c5844657374726f7920612073696e676c65206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000544c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00b454686973207265736574732074686520617070726f766564206163636f756e74206f6620746865206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73110201385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000d381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e004d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265f865697468657220746865206f776e6572206f662074686520606974656d60206f72207468652061646d696e206f662074686520636f6c6c656374696f6e2e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e001901496d706f7274616e74204e4f54453a205468652060617070726f76656460206163636f756e7420676574732072657365742061667465722065616368207472616e736665722e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67200110626f6f6c00012469735f66726f7a656e200110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c75651d020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e00010c6b65791902016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000110646174610d020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011470726963657905015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00182c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520617373657420606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e001924a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e71050c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73a0010c7533320001386974656d5f6d6574616461746173a0010c75333200012861747472696275746573a0010c7533320000750504184f7074696f6e04045401ad030108104e6f6e6500000010536f6d650400ad030000010000790504184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100007d050c2c70616c6c65745f6e6674731870616c6c65741043616c6c08045400044900019c1863726561746508011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e00003c090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650801146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e00013c190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0039012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c20737570657275736572590120207065726d697373696f6e73206f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e67982020607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c7769746e6573739d05013844657374726f795769746e6573730002449c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e00dc4e4f54453a2054686520636f6c6c656374696f6e206d75737420686176652030206974656d7320746f2062652064657374726f7965642e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00745765696768743a20604f286d202b2063202b206129602077686572653a782d20606d203d207769746e6573732e6974656d5f6d657461646174617360702d206063203d207769746e6573732e6974656d5f636f6e6669677360682d206061203d207769746e6573732e6174747269627574657360106d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fad0301504163636f756e7449644c6f6f6b75704f663c543e0001307769746e6573735f64617461a10501d84f7074696f6e3c4d696e745769746e6573733c543a3a4974656d49642c204465706f73697442616c616e63654f663c542c20493e3e3e000340a04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e45012d20607769746e6573735f64617461603a205768656e20746865206d696e7420747970652069732060486f6c6465724f6628636f6c6c656374696f6e5f696429602c207468656e20746865206f776e6564590120206974656d5f69642066726f6d207468617420636f6c6c656374696f6e206e6565647320746f2062652070726f76696465642077697468696e20746865207769746e6573732064617461206f626a6563742e20496661012020746865206d696e74207072696365206973207365742c207468656e2069742073686f756c64206265206164646974696f6e616c6c7920636f6e6669726d656420696e2074686520607769746e6573735f64617461602e0051014e6f74653a20746865206465706f7369742077696c6c2062652074616b656e2066726f6d2074686520606f726967696e6020616e64206e6f742074686520606f776e657260206f662074686520606974656d602e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296028666f7263655f6d696e74100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011c6d696e745f746fad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6974656d5f636f6e666967a90501284974656d436f6e66696700043405014d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2066726f6d20612070726976696c65676564206f726967696e2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265207468656c497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642ea82d20606974656d5f636f6e666967603a204120636f6e666967206f6620746865206e6577206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400052c5844657374726f7920612073696e676c65206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d7573746c626520746865206f776e6572206f662074686520606974656d602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e736665720c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000638c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642e942d20606974656d603a20546865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146974656d73110201385665633c543a3a4974656d49643e0007449c52652d6576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d7320746f2062652072656576616c75617465642e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f7220746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e28292960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000828c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000928a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129603c6c6f636b5f636f6c6c656374696f6e080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346c6f636b5f73657474696e677385050148436f6c6c656374696f6e53657474696e6773000a30d8446973616c6c6f7773207370656369666965642073657474696e677320666f72207468652077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265206c6f636b65642eb42d20606c6f636b5f73657474696e6773603a205468652073657474696e677320746f206265206c6f636b65642e001d014e6f74653a206974277320706f737369626c6520746f206f6e6c79206c6f636b2873657429207468652073657474696e672c20627574206e6f7420746f20756e7365742069742e0064456d6974732060436f6c6c656374696f6e4c6f636b6564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000c40d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296058666f7263655f636f6c6c656374696f6e5f6f776e6572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000d28844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb02d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f283129605c666f7263655f636f6c6c656374696f6e5f636f6e666967080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118636f6e66696781050164436f6c6c656374696f6e436f6e666967466f723c542c20493e000e28884368616e67652074686520636f6e666967206f66206120636f6c6c656374696f6e2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00c42d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2eb82d2060636f6e666967603a20546865206e657720636f6e666967206f66207468697320636f6c6c656374696f6e2e0080456d6974732060436f6c6c656374696f6e436f6e6669674368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0001386d617962655f646561646c696e65150201644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000f381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722ee42d20606974656d603a20546865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e49012d20606d617962655f646561646c696e65603a204f7074696f6e616c20646561646c696e6520666f722074686520617070726f76616c2e205370656369666965642062792070726f766964696e6720746865d8096e756d626572206f6620626c6f636b732061667465722077686963682074686520617070726f76616c2077696c6c206578706972650090456d69747320605472616e73666572417070726f76656460206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001038e443616e63656c206f6e65206f6620746865207472616e7366657220617070726f76616c7320666f722061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e25012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e01012d206064656c6567617465603a20546865206163636f756e74207468617420697320676f696e6720746f206c6f6f736520746865697220617070726f76616c2e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296070636c6561725f616c6c5f7472616e736665725f617070726f76616c73080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001134b043616e63656c20616c6c2074686520617070726f76616c73206f662061207370656369666963206974656d2e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a39012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e21012d20606974656d603a20546865206974656d206f662074686520636f6c6c656374696f6e206f662077686f736520617070726f76616c732077696c6c20626520636c65617265642e00a4456d6974732060416c6c417070726f76616c7343616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960506c6f636b5f6974656d5f70726f70657274696573100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461200110626f6f6c00013c6c6f636b5f61747472696275746573200110626f6f6c001244e8446973616c6c6f7773206368616e67696e6720746865206d65746164617461206f722061747472696275746573206f6620746865206974656d2e0041014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e506f66207468652060636f6c6c656374696f6e602e00b42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2069662074686520606974656d602e7c2d20606974656d603a20416e206974656d20746f206265206c6f636b65642e0d012d20606c6f636b5f6d65746164617461603a20537065636966696573207768657468657220746865206d657461646174612073686f756c64206265206c6f636b65642e61012d20606c6f636b5f61747472696275746573603a20537065636966696573207768657468657220746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d6573706163654c202073686f756c64206265206c6f636b65642e005d014e6f74653a20606c6f636b5f6174747269627574657360206166666563747320746865206174747269627574657320696e207468652060436f6c6c656374696f6e4f776e657260206e616d657370616365206f6e6c792e45015768656e20746865206d65746164617461206f72206174747269627574657320617265206c6f636b65642c20697420776f6e277420626520706f737369626c652074686520756e6c6f636b207468656d2e0074456d69747320604974656d50726f706572746965734c6f636b6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001358a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129604c666f7263655f7365745f6174747269627574651801187365745f6173210201504f7074696f6e3c543a3a4163636f756e7449643e000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c756529020174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001444c0466f7263652d73657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e0039014966207468652061747472696275746520616c72656164792065786973747320616e64206974207761732073657420627920616e6f74686572206163636f756e742c20746865206465706f7369749c77696c6c2062652072657475726e656420746f207468652070726576696f7573206f776e65722e00bc2d20607365745f6173603a20416e206f7074696f6e616c206f776e6572206f6620746865206174747269627574652e39012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656d150201444f7074696f6e3c543a3a4974656d49643e0001246e616d6573706163652d0201804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b65791d02016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00153cb0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f283129605c617070726f76655f6974656d5f617474726962757465730c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e0016242d01417070726f7665206974656d2773206174747269627574657320746f206265206368616e67656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00a42d2060636f6c6c656374696f6e603a204120636f6c6c656374696f6e206f6620746865206974656d2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732e49012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f206368616e67652061747472696275746573206f6620746865206974656d2e00bc456d69747320604974656d41747472696275746573417070726f76616c416464656460206f6e20737563636573732e7c63616e63656c5f6974656d5f617474726962757465735f617070726f76616c100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e00011c7769746e657373ad05017c43616e63656c41747472696275746573417070726f76616c5769746e657373001728110143616e63656c207468652070726576696f75736c792070726f766964656420617070726f76616c20746f206368616e6765206974656d277320617474726962757465732e1101416c6c207468652070726576696f75736c7920736574206174747269627574657320627920746865206064656c6567617465602077696c6c2062652072656d6f7665642e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00f42d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e207468617420746865206974656d20697320636f6e7461696e65642077697468696e2ea42d20606974656d603a20546865206974656d207468617420686f6c647320617474726962757465732ee02d206064656c6567617465603a205468652070726576696f75736c7920617070726f766564206163636f756e7420746f2072656d6f76652e00c4456d69747320604974656d41747472696275746573417070726f76616c52656d6f76656460206f6e20737563636573732e307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0018407453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640019347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106461746129020178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001a3c8853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b3090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e1502015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001c28110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001d24e053657420746865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d206e756d626572206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e507570646174655f6d696e745f73657474696e6773080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001346d696e745f73657474696e67738d050105014d696e7453657474696e67733c42616c616e63654f663c542c20493e2c20426c6f636b4e756d626572466f723c543e2c20543a3a436f6c6c656374696f6e49643e001e2454557064617465206d696e742073657474696e67732e004d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c642062652074686520497373756572506f66207468652060636f6c6c656374696f6e602e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652ea42d20606d696e745f73657474696e6773603a20546865206e6577206d696e742073657474696e67732e00f0456d6974732060436f6c6c656374696f6e4d696e7453657474696e67735570646174656460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011470726963657905015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572750501704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e001f2c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e002024a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e207061795f7469707304011074697073b105019c426f756e6465645665633c4974656d5469704f663c542c20493e2c20543a3a4d6178546970733e00211c5c416c6c6f777320746f207061792074686520746970732e00584f726967696e206d757374206265205369676e65642e00542d206074697073603a20546970732061727261792e0098456d697473206054697053656e7460206f6e20657665727920746970207472616e736665722e2c6372656174655f737761701801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001486d617962655f646573697265645f6974656d150201444f7074696f6e3c543a3a4974656d49643e00012c6d617962655f7072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e0001206475726174696f6e100144426c6f636b4e756d626572466f723c543e002240510152656769737465722061206e65772061746f6d696320737761702c206465636c6172696e6720616e20696e74656e74696f6e20746f2073656e6420616e20606974656d6020696e2065786368616e676520666f72fc60646573697265645f6974656d602066726f6d206f726967696e20746f20746172676574206f6e207468652063757272656e7420626c6f636b636861696e2e4d01546865207461726765742063616e206578656375746520746865207377617020647572696e67207468652073706563696669656420606475726174696f6e60206f6620626c6f636b732028696620736574292ef04164646974696f6e616c6c792c2074686520707269636520636f756c642062652073657420666f7220746865206465736972656420606974656d602e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652eec2d2060646573697265645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f66207468652064657369726564206974656d2ef42d2060646573697265645f6974656d603a205468652064657369726564206974656d20616e206f776e65722077616e747320746f20726563656976652e61012d20606d617962655f7072696365603a2054686520707269636520616e206f776e65722069732077696c6c696e6720746f20706179206f72207265636569766520666f7220746865206465736972656420606974656d602e49012d20606475726174696f6e603a204120646561646c696e6520666f722074686520737761702e205370656369666965642062792070726f766964696e6720746865206e756d626572206f6620626c6f636b73880961667465722077686963682074686520737761702077696c6c206578706972652e007c456d6974732060537761704372656174656460206f6e20737563636573732e2c63616e63656c5f737761700801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d49640023245843616e63656c20616e2061746f6d696320737761702e00584f726967696e206d757374206265205369676e65642e15014f726967696e206d75737420626520616e206f776e6572206f662074686520606974656d602069662074686520646561646c696e65206861736e277420657870697265642e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea82d20606974656d603a20546865206974656d20616e206f776e65722077616e747320746f20676976652e0084456d69747320605377617043616e63656c6c656460206f6e20737563636573732e28636c61696d5f7377617014013c73656e645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e645f6974656d100124543a3a4974656d4964000148726563656976655f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130726563656976655f6974656d100124543a3a4974656d49640001347769746e6573735f7072696365310201ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e00243054436c61696d20616e2061746f6d696320737761702e390154686973206d6574686f6420657865637574657320612070656e64696e6720737761702c2074686174207761732063726561746564206279206120636f756e74657270617274206265666f72652e00e44f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f662074686520606974656d602e00ec2d206073656e645f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652073656e742e8c2d206073656e645f6974656d603a20546865206974656d20746f2062652073656e742e09012d2060726563656976655f636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652072656365697665642ea82d2060726563656976655f6974656d603a20546865206974656d20746f2062652072656365697665642ee42d20607769746e6573735f7072696365603a20412070726963652074686174207761732070726576696f75736c7920616772656564206f6e2e007c456d697473206053776170436c61696d656460206f6e20737563636573732e3c6d696e745f7072655f7369676e65640c01246d696e745f64617461bd050168426f783c5072655369676e65644d696e744f663c542c20493e3e0001247369676e6174757265c1050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e744964002534c84d696e7420616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00584f726967696e206d757374206265205369676e65642e005d012d20606d696e745f64617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2c51012020697473206d657461646174612c20617474726962757465732c2077686f2063616e206d696e742069742028604e6f6e656020666f7220616e796f6e652920616e6420756e74696c207768617420626c6f636b2420206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e39012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e20497373756572206f662074686520636f6c6c656374696f6e2e0068456d697473206049737375656460206f6e20737563636573732ed4456d69747320604174747269627574655365746020696620746865206174747269627574657320776572652070726f76696465642ed8456d69747320604974656d4d657461646174615365746020696620746865206d6574616461746120776173206e6f7420656d7074792e647365745f617474726962757465735f7072655f7369676e65640c011064617461cd05016c5072655369676e6564417474726962757465734f663c542c20493e0001247369676e6174757265c1050150543a3a4f6666636861696e5369676e61747572650001187369676e6572000130543a3a4163636f756e7449640026340101536574206174747269627574657320666f7220616e206974656d2062792070726f766964696e6720746865207072652d7369676e656420617070726f76616c2e00f84f726967696e206d757374206265205369676e656420616e64206d75737420626520616e206f776e6572206f66207468652060646174612e6974656d602e0049012d206064617461603a20546865207072652d7369676e656420617070726f76616c207468617420636f6e7369737473206f662074686520696e666f726d6174696f6e2061626f757420746865206974656d2ccc20206174747269627574657320746f2075706461746520616e6420756e74696c207768617420626c6f636b206e756d6265722ec82d20607369676e6174757265603a20546865207369676e6174757265206f662074686520606461746160206f626a6563742e51012d20607369676e6572603a2054686520606461746160206f626a6563742773207369676e65722e2053686f756c6420626520616e2041646d696e206f662074686520636f6c6c656374696f6e20666f722074686578202060436f6c6c656374696f6e4f776e657260206e616d6573706163652e00c4456d69747320604174747269627574655365746020666f7220656163682070726f7669646564206174747269627574652e1901456d69747320604974656d41747472696275746573417070726f76616c4164646564602069662074686520617070726f76616c207761736e277420736574206265666f72652ea8456d69747320605072655369676e65644174747269627574657353657460206f6e20737563636573732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81050c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e677385050148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c791502012c4f7074696f6e3c7533323e0001346d696e745f73657474696e67738d0501b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e000085050c2c70616c6c65745f6e66747314747970657320426974466c616773040454018905000400300144436f6c6c656374696f6e53657474696e67000089050c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f7369745265717569726564001000008d050c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065910501584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365790501344f7074696f6e3c50726963653e00012c73746172745f626c6f636b1502014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636b1502014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e6773950501304974656d53657474696e6773000091050c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e49640002000095050c2c70616c6c65745f6e66747314747970657320426974466c61677304045401990500040030012c4974656d53657474696e67000099050c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b656441747472696275746573000400009d050c2c70616c6c65745f6e6674731474797065733844657374726f795769746e65737300000c01386974656d5f6d6574616461746173a0010c7533320001306974656d5f636f6e66696773a0010c75333200012861747472696275746573a0010c7533320000a10504184f7074696f6e04045401a5050108104e6f6e6500000010536f6d650400a5050000010000a5050c2c70616c6c65745f6e6674731474797065732c4d696e745769746e65737308184974656d496401101c42616c616e63650118000801286f776e65645f6974656d150201384f7074696f6e3c4974656d49643e0001286d696e745f70726963657905013c4f7074696f6e3c42616c616e63653e0000a9050c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e6773950501304974656d53657474696e67730000ad050c2c70616c6c65745f6e6674731474797065737c43616e63656c41747472696275746573417070726f76616c5769746e65737300000401486163636f756e745f6174747269627574657310010c7533320000b1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b505045300000400b90501185665633c543e0000b5050c2c70616c6c65745f6e6674731474797065731c4974656d5469701030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010018416d6f756e74011800100128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d496400012072656365697665720001244163636f756e744964000118616d6f756e74180118416d6f756e740000b905000002b50500bd050c2c70616c6c65745f6e667473147479706573345072655369676e65644d696e741430436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e6501101c42616c616e63650118001c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000128617474726962757465738502015c5665633c285665633c75383e2c205665633c75383e293e0001206d6574616461746138011c5665633c75383e0001306f6e6c795f6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000120646561646c696e65100120446561646c696e650001286d696e745f70726963657905013c4f7074696f6e3c42616c616e63653e0000c105082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400c5050148656432353531393a3a5369676e61747572650000001c537232353531390400c5050148737232353531393a3a5369676e61747572650001001445636473610400c905014065636473613a3a5369676e617475726500020000c505000003400000000800c905000003410000000800cd050c2c70616c6c65745f6e6674731474797065734c5072655369676e6564417474726962757465731030436f6c6c656374696f6e49640110184974656d49640110244163636f756e744964010020446561646c696e65011000140128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000128617474726962757465738502015c5665633c285665633c75383e2c205665633c75383e293e0001246e616d6573706163652d0201744174747269627574654e616d6573706163653c4163636f756e7449643e000120646561646c696e65100120446561646c696e650000d1050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c0108696494014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f637265617465100108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f79040108696494014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e7473040108696494014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c73040108696494014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f79040108696494014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c0108696494014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c0108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c0108696494014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c0108696494014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e73666572100108696494014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a65080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f6173736574040108696494014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f6173736574040108696494014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100108696494014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d65746164617461100108696494014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461040108696494014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d65746164617461140108696494014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d65746164617461040108696494014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f737461747573200108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0108696494014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c080108696494014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c0108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f766564100108696494014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f756368040108696494014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e64080108696494014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e6365080108696494014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f74686572080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f74686572080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b080108696494014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5050c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c65741043616c6c040454000108346672616374696f6e616c697a651401446e66745f636f6c6c656374696f6e5f6964100148543a3a4e6674436f6c6c656374696f6e49640001186e66745f6964100120543a3a4e6674496400012061737365745f6964100130417373657449644f663c543e00012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e0001246672616374696f6e73180144417373657442616c616e63654f663c543e000044ac4c6f636b20746865204e465420616e64206d696e742061206e65772066756e6769626c652061737365742e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e0101546865206f726967696e206d75737420626520746865206f776e6572206f6620746865204e465420746865792061726520747279696e6720746f206c6f636b2e009c604465706f736974602066756e6473206f662073656e646572206172652072657365727665642e0025012d20606e66745f636f6c6c656374696f6e5f6964603a20546865204944207573656420746f206964656e746966792074686520636f6c6c656374696f6e206f6620746865204e46542eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e21012d20606e66745f6964603a20546865204944207573656420746f206964656e7469667920746865204e46542077697468696e2074686520676976656e20636f6c6c656374696f6e2eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602ee42d206061737365745f6964603a20546865204944206f6620746865206e65772061737365742e204974206d757374206e6f742065786973742eb8497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f617373657473602e1d012d206062656e6566696369617279603a20546865206163636f756e7420746861742077696c6c207265636569766520746865206e65776c7920637265617465642061737365742e0d012d20606672616374696f6e73603a2054686520746f74616c2069737375616e6365206f6620746865206e65776c79206372656174656420617373657420636c6173732e00c0456d69747320604e66744672616374696f6e616c697a656460206576656e74207768656e207375636365737366756c2e14756e6966791001446e66745f636f6c6c656374696f6e5f6964100148543a3a4e6674436f6c6c656374696f6e49640001186e66745f6964100120543a3a4e6674496400012061737365745f6964100130417373657449644f663c543e00012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e00014045014275726e2074686520746f74616c2069737375616e6365206f66207468652066756e6769626c6520617373657420616e642072657475726e2028756e6c6f636b2920746865206c6f636b6564204e46542e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642e00d0604465706f736974602066756e64732077696c6c2062652072657475726e656420746f206061737365745f63726561746f72602e0025012d20606e66745f636f6c6c656374696f6e5f6964603a20546865204944207573656420746f206964656e746966792074686520636f6c6c656374696f6e206f6620746865204e46542eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e21012d20606e66745f6964603a20546865204944207573656420746f206964656e7469667920746865204e46542077697468696e2074686520676976656e20636f6c6c656374696f6e2eb0497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f6e667473602e29012d206061737365745f6964603a20546865204944206f6620746865206173736574206265696e672072657475726e656420616e642064657374726f7965642e204d757374206d61746368fc746865206f726967696e616c204944206f662074686520637265617465642061737365742c20636f72726573706f6e64696e6720746f20746865204e46542eb8497320757365642077697468696e2074686520636f6e74657874206f66206070616c6c65745f617373657473602efc2d206062656e6566696369617279603a20546865206163636f756e7420746861742077696c6c20726563656976652074686520756e6966696564204e46542e00a4456d69747320604e6674556e696669656460206576656e74207768656e207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed9050c3470616c6c65745f6173736574731870616c6c65741043616c6c080454000449000180186372656174650c0108696410014c543a3a41737365744964506172616d6574657200011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365180128543a3a42616c616e636500004ce849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d2061207075626c6963206f726967696e2e00250154686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00bc46756e6473206f662073656e64657220617265207265736572766564206279206041737365744465706f736974602e002c506172616d65746572733a59012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d206061646d696e603a205468652061646d696e206f66207468697320636c617373206f66206173736574732e205468652061646d696e2069732074686520696e697469616c2061646472657373206f6620656163689c6d656d626572206f662074686520617373657420636c61737327732061646d696e207465616d2e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f637265617465100108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00013469735f73756666696369656e74200110626f6f6c00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500014cf849737375652061206e657720636c617373206f662066756e6769626c65206173736574732066726f6d20612070726976696c65676564206f726967696e2e00b454686973206e657720617373657420636c61737320686173206e6f2061737365747320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0059012d20606964603a20546865206964656e746966696572206f6620746865206e65772061737365742e2054686973206d757374206e6f742062652063757272656e746c7920696e2075736520746f206964656e7469667948616e206578697374696e672061737365742e59012d20606f776e6572603a20546865206f776e6572206f66207468697320636c617373206f66206173736574732e20546865206f776e6572206861732066756c6c20737570657275736572207065726d697373696f6e7325016f76657220746869732061737365742c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129603473746172745f64657374726f79040108696410014c543a3a41737365744964506172616d6574657200022cdc5374617274207468652070726f63657373206f662064657374726f79696e6720612066756e6769626c6520617373657420636c6173732e0059016073746172745f64657374726f79602069732074686520666972737420696e206120736572696573206f662065787472696e7369637320746861742073686f756c642062652063616c6c65642c20746f20616c6c6f77786465737472756374696f6e206f6620616e20617373657420636c6173732e005101546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020627920746865206173736574277320606f776e6572602e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00f854686520617373657420636c617373206d7573742062652066726f7a656e206265666f72652063616c6c696e67206073746172745f64657374726f79602e4064657374726f795f6163636f756e7473040108696410014c543a3a41737365744964506172616d65746572000330cc44657374726f7920616c6c206163636f756e7473206173736f6369617465642077697468206120676976656e2061737365742e005d016064657374726f795f6163636f756e7473602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79310164657374726f7920616c6c206163636f756e74732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d697460206163636f756e747320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d4456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f7965644163636f756e747360206576656e742e4464657374726f795f617070726f76616c73040108696410014c543a3a41737365744964506172616d65746572000430610144657374726f7920616c6c20617070726f76616c73206173736f6369617465642077697468206120676976656e20617373657420757020746f20746865206d61782028543a3a52656d6f76654974656d734c696d6974292e0061016064657374726f795f617070726f76616c73602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e642074686584617373657420697320696e2061206044657374726f79696e67602073746174652e005d0144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c79390164657374726f7920616c6c20617070726f76616c732e2049742077696c6c2064657374726f79206052656d6f76654974656d734c696d69746020617070726f76616c7320617420612074696d652e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00d8456163682063616c6c20656d6974732074686520604576656e743a3a44657374726f796564417070726f76616c7360206576656e742e3866696e6973685f64657374726f79040108696410014c543a3a41737365744964506172616d65746572000528c4436f6d706c6574652064657374726f79696e6720617373657420616e6420756e726573657276652063757272656e63792e0055016066696e6973685f64657374726f79602073686f756c64206f6e6c792062652063616c6c6564206166746572206073746172745f64657374726f796020686173206265656e2063616c6c65642c20616e64207468655901617373657420697320696e2061206044657374726f79696e67602073746174652e20416c6c206163636f756e7473206f7220617070726f76616c732073686f756c642062652064657374726f796564206265666f72651468616e642e004d012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652064657374726f7965642e2054686973206d757374206964656e7469667920616e206578697374696e6720202061737365742e00e045616368207375636365737366756c2063616c6c20656d6974732074686520604576656e743a3a44657374726f79656460206576656e742e106d696e740c0108696410014c543a3a41737365744964506172616d6574657200012c62656e6566696369617279ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000630884d696e7420617373657473206f66206120706172746963756c617220636c6173732e003901546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f662074686520617373657420606964602e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206d696e7465642e0d012d206062656e6566696369617279603a20546865206163636f756e7420746f206265206372656469746564207769746820746865206d696e746564206173736574732ec42d2060616d6f756e74603a2054686520616d6f756e74206f662074686520617373657420746f206265206d696e7465642e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296055014d6f6465733a205072652d6578697374696e672062616c616e6365206f66206062656e6566696369617279603b204163636f756e74207072652d6578697374656e6365206f66206062656e6566696369617279602e106275726e0c0108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500073c4501526564756365207468652062616c616e6365206f66206077686f60206279206173206d75636820617320706f737369626c6520757020746f2060616d6f756e746020617373657473206f6620606964602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204d616e61676572206f662074686520617373657420606964602e00d04261696c73207769746820604e6f4163636f756e746020696620746865206077686f6020697320616c726561647920646561642e00fc2d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74206275726e65642ea02d206077686f603a20546865206163636f756e7420746f20626520646562697465642066726f6d2e29012d2060616d6f756e74603a20546865206d6178696d756d20616d6f756e74206279207768696368206077686f6027732062616c616e63652073686f756c6420626520726564756365642e005101456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e20496620746869732074616b6573207468652062616c616e636520746f2062656c6f772074686539016d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74206275726e656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296009014d6f6465733a20506f73742d6578697374656e6365206f66206077686f603b20507265202620706f7374205a6f6d6269652d737461747573206f66206077686f602e207472616e736665720c0108696410014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000848d04d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e4c7472616e736665725f6b6565705f616c6976650c0108696410014c543a3a41737365744964506172616d65746572000118746172676574ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e636500094859014d6f766520736f6d65206173736574732066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722c206b656570696e67207468652073656e646572206163636f756e7420616c6976652e00584f726967696e206d757374206265205369676e65642e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e9c2d2060746172676574603a20546865206163636f756e7420746f2062652063726564697465642e51012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652073656e64657227732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e646101607461726765746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e5d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652073656e6465722062616c616e63652061626f7665207a65726f206275742062656c6f77bc746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f662060746172676574603b20506f73742d6578697374656e6365206f662073656e6465723b204163636f756e74207072652d6578697374656e6365206f662460746172676574602e38666f7263655f7472616e73666572100108696410014c543a3a41737365744964506172616d65746572000118736f75726365ad0301504163636f756e7449644c6f6f6b75704f663c543e00011064657374ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e6365000a4cb44d6f766520736f6d65206173736574732066726f6d206f6e65206163636f756e7420746f20616e6f746865722e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e0011012d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206861766520736f6d6520616d6f756e74207472616e736665727265642e982d2060736f75726365603a20546865206163636f756e7420746f20626520646562697465642e942d206064657374603a20546865206163636f756e7420746f2062652063726564697465642e59012d2060616d6f756e74603a2054686520616d6f756e74206279207768696368207468652060736f757263656027732062616c616e6365206f66206173736574732073686f756c64206265207265647563656420616e64590160646573746027732062616c616e636520696e637265617365642e2054686520616d6f756e742061637475616c6c79207472616e73666572726564206d617920626520736c696768746c79206772656174657220696e4d017468652063617365207468617420746865207472616e7366657220776f756c64206f74686572776973652074616b65207468652060736f75726365602062616c616e63652061626f7665207a65726f20627574d462656c6f7720746865206d696e696d756d2062616c616e63652e204d7573742062652067726561746572207468616e207a65726f2e006101456d69747320605472616e73666572726564602077697468207468652061637475616c20616d6f756e74207472616e736665727265642e20496620746869732074616b65732074686520736f757263652062616c616e63655d01746f2062656c6f7720746865206d696e696d756d20666f72207468652061737365742c207468656e2074686520616d6f756e74207472616e7366657272656420697320696e6372656173656420746f2074616b6520697420746f207a65726f2e00385765696768743a20604f2831296051014d6f6465733a205072652d6578697374656e6365206f66206064657374603b20506f73742d6578697374656e6365206f662060736f75726365603b204163636f756e74207072652d6578697374656e6365206f661c6064657374602e18667265657a65080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000b305501446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e20617373657420606964602066726f6d20616e206163636f756e74206077686f602e206077686f604d016d75737420616c726561647920657869737420617320616e20656e74727920696e20604163636f756e746073206f66207468652061737365742e20496620796f752077616e7420746f20667265657a6520616ef46163636f756e74207468617420646f6573206e6f74206861766520616e20656e7472792c207573652060746f7563685f6f74686572602066697273742e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e882d206077686f603a20546865206163636f756e7420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e000c28e8416c6c6f7720756e70726976696c65676564207472616e736665727320746f20616e642066726f6d20616e206163636f756e7420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e902d206077686f603a20546865206163636f756e7420746f20626520756e66726f7a656e2e003c456d6974732060546861776564602e00385765696768743a20604f2831296030667265657a655f6173736574040108696410014c543a3a41737365744964506172616d65746572000d24f0446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f722074686520617373657420636c6173732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f2831296028746861775f6173736574040108696410014c543a3a41737365744964506172616d65746572000e24c4416c6c6f7720756e70726976696c65676564207472616e736665727320666f722074686520617373657420616761696e2e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000f28744368616e676520746865204f776e6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100108696410014c543a3a41737365744964506172616d65746572000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e001030c44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f6620616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00c42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f2062652066726f7a656e2ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f28312960307365745f6d65746164617461100108696410014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c7308010875380011407853657420746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00d846756e6473206f662073656e64657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a5101604d657461646174614465706f73697442617365202b204d657461646174614465706f73697450657242797465202a20286e616d652e6c656e202b2073796d626f6c2e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461040108696410014c543a3a41737365744964506172616d6574657200122c80436c65617220746865206d6574616461746120666f7220616e2061737365742e002d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f662074686520617373657420606964602e00a4416e79206465706f73697420697320667265656420666f7220746865206173736574206f776e65722e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f7365745f6d65746164617461140108696410014c543a3a41737365744964506172616d657465720001106e616d6538011c5665633c75383e00011873796d626f6c38011c5665633c75383e000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c001338b8466f72636520746865206d6574616461746120666f7220616e20617373657420746f20736f6d652076616c75652e006c4f726967696e206d75737420626520466f7263654f726967696e2e0068416e79206465706f736974206973206c65667420616c6f6e652e00b82d20606964603a20546865206964656e746966696572206f662074686520617373657420746f207570646174652e4d012d20606e616d65603a20546865207573657220667269656e646c79206e616d65206f6620746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e4d012d206073796d626f6c603a205468652065786368616e67652073796d626f6c20666f7220746869732061737365742e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e2d012d2060646563696d616c73603a20546865206e756d626572206f6620646563696d616c732074686973206173736574207573657320746f20726570726573656e74206f6e6520756e69742e0050456d69747320604d65746164617461536574602e0051015765696768743a20604f284e202b20532960207768657265204e20616e6420532061726520746865206c656e677468206f6620746865206e616d6520616e642073796d626f6c20726573706563746976656c792e50666f7263655f636c6561725f6d65746164617461040108696410014c543a3a41737365744964506172616d6574657200142c80436c65617220746865206d6574616461746120666f7220616e2061737365742e006c4f726967696e206d75737420626520466f7263654f726967696e2e0060416e79206465706f7369742069732072657475726e65642e00b42d20606964603a20546865206964656e746966696572206f662074686520617373657420746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f2831296048666f7263655f61737365745f737461747573200108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e000118697373756572ad0301504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ead0301504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c6d696e5f62616c616e6365b00128543a3a42616c616e636500013469735f73756666696369656e74200110626f6f6c00012469735f66726f7a656e200110626f6f6c00155898416c746572207468652061747472696275746573206f66206120676976656e2061737365742e00744f726967696e206d7573742062652060466f7263654f726967696e602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e9c2d20606f776e6572603a20546865206e6577204f776e6572206f6620746869732061737365742ea42d2060697373756572603a20546865206e657720497373756572206f6620746869732061737365742e9c2d206061646d696e603a20546865206e65772041646d696e206f6620746869732061737365742eac2d2060667265657a6572603a20546865206e657720467265657a6572206f6620746869732061737365742e4d012d20606d696e5f62616c616e6365603a20546865206d696e696d756d2062616c616e6365206f662074686973206e6577206173736574207468617420616e792073696e676c65206163636f756e74206d7573743d01686176652e20496620616e206163636f756e7427732062616c616e636520697320726564756365642062656c6f7720746869732c207468656e20697420636f6c6c617073657320746f207a65726f2e51012d206069735f73756666696369656e74603a20576865746865722061206e6f6e2d7a65726f2062616c616e6365206f662074686973206173736574206973206465706f736974206f662073756666696369656e744d0176616c756520746f206163636f756e7420666f722074686520737461746520626c6f6174206173736f6369617465642077697468206974732062616c616e63652073746f726167652e2049662073657420746f55016074727565602c207468656e206e6f6e2d7a65726f2062616c616e636573206d61792062652073746f72656420776974686f757420612060636f6e73756d657260207265666572656e63652028616e6420746875734d01616e20454420696e207468652042616c616e6365732070616c6c6574206f7220776861746576657220656c7365206973207573656420746f20636f6e74726f6c20757365722d6163636f756e742073746174652067726f777468292e3d012d206069735f66726f7a656e603a2057686574686572207468697320617373657420636c6173732069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e8456d697473206041737365745374617475734368616e67656460207769746820746865206964656e74697479206f66207468652061737365742e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0108696410014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650016502d01417070726f766520616e20616d6f756e74206f6620617373657420666f72207472616e7366657220627920612064656c6567617465642074686972642d7061727479206163636f756e742e00584f726967696e206d757374206265205369676e65642e004d01456e737572657320746861742060417070726f76616c4465706f7369746020776f727468206f66206043757272656e6379602069732072657365727665642066726f6d207369676e696e67206163636f756e745501666f722074686520707572706f7365206f6620686f6c64696e672074686520617070726f76616c2e20496620736f6d65206e6f6e2d7a65726f20616d6f756e74206f662061737365747320697320616c72656164794901617070726f7665642066726f6d207369676e696e67206163636f756e7420746f206064656c6567617465602c207468656e20697420697320746f70706564207570206f7220756e726573657276656420746f546d656574207468652072696768742076616c75652e0045014e4f54453a20546865207369676e696e67206163636f756e7420646f6573206e6f74206e65656420746f206f776e2060616d6f756e7460206f66206173736574732061742074686520706f696e74206f66446d616b696e6720746869732063616c6c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e0d012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e736665722061737365742e49012d2060616d6f756e74603a2054686520616d6f756e74206f662061737365742074686174206d6179206265207472616e73666572726564206279206064656c6567617465602e204966207468657265206973e0616c726561647920616e20617070726f76616c20696e20706c6163652c207468656e207468697320616374732061646469746976656c792e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c080108696410014c543a3a41737365744964506172616d6574657200012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001734490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e003d014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c616365206265747765656e207369676e657220616e642c6064656c6567617465602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296054666f7263655f63616e63656c5f617070726f76616c0c0108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012064656c6567617465ad0301504163636f756e7449644c6f6f6b75704f663c543e001834490143616e63656c20616c6c206f6620736f6d6520617373657420617070726f76656420666f722064656c656761746564207472616e7366657220627920612074686972642d7061727479206163636f756e742e0049014f726967696e206d7573742062652065697468657220466f7263654f726967696e206f72205369676e6564206f726967696e207769746820746865207369676e6572206265696e67207468652041646d696e686163636f756e74206f662074686520617373657420606964602e004901556e726573657276657320616e79206465706f7369742070726576696f75736c792072657365727665642062792060617070726f76655f7472616e736665726020666f722074686520617070726f76616c2e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e05012d206064656c6567617465603a20546865206163636f756e742064656c656761746564207065726d697373696f6e20746f207472616e736665722061737365742e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f28312960447472616e736665725f617070726f766564100108696410014c543a3a41737365744964506172616d657465720001146f776e6572ad0301504163636f756e7449644c6f6f6b75704f663c543e00012c64657374696e6174696f6ead0301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74b00128543a3a42616c616e63650019484d015472616e7366657220736f6d652061737365742062616c616e63652066726f6d20612070726576696f75736c792064656c656761746564206163636f756e7420746f20736f6d652074686972642d7061727479206163636f756e742e0049014f726967696e206d757374206265205369676e656420616e64207468657265206d75737420626520616e20617070726f76616c20696e20706c6163652062792074686520606f776e65726020746f207468651c7369676e65722e00590149662074686520656e7469726520616d6f756e7420617070726f76656420666f72207472616e73666572206973207472616e736665727265642c207468656e20616e79206465706f7369742070726576696f75736c79b472657365727665642062792060617070726f76655f7472616e736665726020697320756e72657365727665642e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742e61012d20606f776e6572603a20546865206163636f756e742077686963682070726576696f75736c7920617070726f76656420666f722061207472616e73666572206f66206174206c656173742060616d6f756e746020616e64bc66726f6d207768696368207468652061737365742062616c616e63652077696c6c2062652077697468647261776e2e61012d206064657374696e6174696f6e603a20546865206163636f756e7420746f207768696368207468652061737365742062616c616e6365206f662060616d6f756e74602077696c6c206265207472616e736665727265642eb42d2060616d6f756e74603a2054686520616d6f756e74206f662061737365747320746f207472616e736665722e009c456d69747320605472616e73666572726564417070726f76656460206f6e20737563636573732e00385765696768743a20604f2831296014746f756368040108696410014c543a3a41737365744964506172616d65746572001a24c043726561746520616e206173736574206163636f756e7420666f72206e6f6e2d70726f7669646572206173736574732e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e005d012d20606f726967696e603a204d757374206265205369676e65643b20746865207369676e6572206163636f756e74206d75737420686176652073756666696369656e742066756e647320666f722061206465706f736974382020746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e18726566756e64080108696410014c543a3a41737365744964506172616d65746572000128616c6c6f775f6275726e200110626f6f6c001b28590152657475726e20746865206465706f7369742028696620616e7929206f6620616e206173736574206163636f756e74206f72206120636f6e73756d6572207265666572656e63652028696620616e7929206f6620616e206163636f756e742e0068546865206f726967696e206d757374206265205369676e65642e003d012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f72207768696368207468652063616c6c657220776f756c64206c696b6520746865206465706f7369742c2020726566756e6465642e5d012d2060616c6c6f775f6275726e603a20496620607472756560207468656e20617373657473206d61792062652064657374726f79656420696e206f7264657220746f20636f6d706c6574652074686520726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e3c7365745f6d696e5f62616c616e6365080108696410014c543a3a41737365744964506172616d6574657200012c6d696e5f62616c616e6365180128543a3a42616c616e6365001c30945365747320746865206d696e696d756d2062616c616e6365206f6620616e2061737365742e0021014f6e6c7920776f726b73206966207468657265206172656e277420616e79206163636f756e747320746861742061726520686f6c64696e6720746865206173736574206f72206966e0746865206e65772076616c7565206f6620606d696e5f62616c616e636560206973206c657373207468616e20746865206f6c64206f6e652e00fc4f726967696e206d757374206265205369676e656420616e64207468652073656e6465722068617320746f20626520746865204f776e6572206f66207468652c617373657420606964602e00902d20606964603a20546865206964656e746966696572206f66207468652061737365742ec02d20606d696e5f62616c616e6365603a20546865206e65772076616c7565206f6620606d696e5f62616c616e6365602e00d4456d697473206041737365744d696e42616c616e63654368616e67656460206576656e74207768656e207375636365737366756c2e2c746f7563685f6f74686572080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001d288843726561746520616e206173736574206163636f756e7420666f72206077686f602e00c041206465706f7369742077696c6c2062652074616b656e2066726f6d20746865207369676e6572206163636f756e742e0061012d20606f726967696e603a204d757374206265205369676e65642062792060467265657a657260206f72206041646d696e60206f662074686520617373657420606964603b20746865207369676e6572206163636f756e74dc20206d75737420686176652073756666696369656e742066756e647320666f722061206465706f73697420746f2062652074616b656e2e09012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420746f20626520637265617465642e8c2d206077686f603a20546865206163636f756e7420746f20626520637265617465642e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e30726566756e645f6f74686572080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001e285d0152657475726e20746865206465706f7369742028696620616e7929206f66206120746172676574206173736574206163636f756e742e2055736566756c20696620796f752061726520746865206465706f7369746f722e005d01546865206f726967696e206d757374206265205369676e656420616e642065697468657220746865206163636f756e74206f776e65722c206465706f7369746f722c206f72206173736574206041646d696e602e20496e61016f7264657220746f206275726e2061206e6f6e2d7a65726f2062616c616e6365206f66207468652061737365742c207468652063616c6c6572206d75737420626520746865206163636f756e7420616e642073686f756c64347573652060726566756e64602e0019012d20606964603a20546865206964656e746966696572206f662074686520617373657420666f7220746865206163636f756e7420686f6c64696e672061206465706f7369742e7c2d206077686f603a20546865206163636f756e7420746f20726566756e642e009c456d6974732060526566756e64656460206576656e74207768656e207375636365737366756c2e14626c6f636b080108696410014c543a3a41737365744964506172616d6574657200010c77686fad0301504163636f756e7449644c6f6f6b75704f663c543e001f285901446973616c6c6f77206675727468657220756e70726976696c65676564207472616e7366657273206f6620616e206173736574206069646020746f20616e642066726f6d20616e206163636f756e74206077686f602e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f662074686520617373657420606964602e00b82d20606964603a20546865206964656e746966696572206f6620746865206163636f756e7427732061737365742e942d206077686f603a20546865206163636f756e7420746f20626520756e626c6f636b65642e0040456d6974732060426c6f636b6564602e00385765696768743a20604f28312960040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd050c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c65741043616c6c0404540001182c6372656174655f706f6f6c080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00001019014372656174657320616e20656d707479206c697175696469747920706f6f6c20616e6420616e206173736f636961746564206e657720606c705f746f6b656e60206173736574010128746865206964206f662077686963682069732072657475726e656420696e2074686520604576656e743a3a506f6f6c4372656174656460206576656e74292e0011014f6e6365206120706f6f6c20697320637265617465642c20736f6d656f6e65206d6179205b6050616c6c65743a3a6164645f6c6971756964697479605d20746f2069742e346164645f6c69717569646974791c0118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00013c616d6f756e74315f64657369726564180128543a3a42616c616e636500013c616d6f756e74325f64657369726564180128543a3a42616c616e636500012c616d6f756e74315f6d696e180128543a3a42616c616e636500012c616d6f756e74325f6d696e180128543a3a42616c616e636500011c6d696e745f746f000130543a3a4163636f756e744964000138e450726f76696465206c697175696469747920696e746f2074686520706f6f6c206f6620606173736574316020616e642060617373657432602e0d014e4f54453a20616e206f7074696d616c20616d6f756e74206f662061737365743120616e64206173736574322077696c6c2062652063616c63756c6174656420616e6421016d6967687420626520646966666572656e74207468616e207468652070726f76696465642060616d6f756e74315f64657369726564602f60616d6f756e74325f6465736972656460fc7468757320796f752073686f756c642070726f7669646520746865206d696e20616d6f756e7420796f7527726520686170707920746f2070726f766964652ec8506172616d732060616d6f756e74315f6d696e602f60616d6f756e74325f6d696e6020726570726573656e7420746861742e4901606d696e745f746f602077696c6c2062652073656e7420746865206c697175696469747920746f6b656e73207468617420726570726573656e742074686973207368617265206f662074686520706f6f6c2e005d014e4f54453a207768656e20656e636f756e746572696e6720616e20696e636f72726563742065786368616e6765207261746520616e64206e6f6e2d776974686472617761626c6520706f6f6c206c69717569646974792cdc626174636820616e2061746f6d69632063616c6c2077697468205b6050616c6c65743a3a6164645f6c6971756964697479605d20616e6451015b6050616c6c65743a3a737761705f65786163745f746f6b656e735f666f725f746f6b656e73605d206f72205b6050616c6c65743a3a737761705f746f6b656e735f666f725f65786163745f746f6b656e73605d250163616c6c7320746f2072656e64657220746865206c697175696469747920776974686472617761626c6520616e642072656374696679207468652065786368616e676520726174652e00d84f6e6365206c69717569646974792069732061646465642c20736f6d656f6e65206d6179207375636365737366756c6c792063616c6cd85b6050616c6c65743a3a737761705f65786163745f746f6b656e735f666f725f746f6b656e73605d207375636365737366756c6c792e4072656d6f76655f6c6971756964697479180118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e0001346c705f746f6b656e5f6275726e180128543a3a42616c616e636500014c616d6f756e74315f6d696e5f72656365697665180128543a3a42616c616e636500014c616d6f756e74325f6d696e5f72656365697665180128543a3a42616c616e636500012c77697468647261775f746f000130543a3a4163636f756e74496400020c4d01416c6c6f777320796f7520746f2072656d6f7665206c69717569646974792062792070726f766964696e672074686520606c705f746f6b656e5f6275726e6020746f6b656e7320746861742077696c6c20626551016275726e656420696e207468652070726f636573732e205769746820746865207573616765206f662060616d6f756e74315f6d696e5f72656365697665602f60616d6f756e74325f6d696e5f726563656976656035016974277320706f737369626c6520746f20636f6e74726f6c20746865206d696e20616d6f756e74206f662072657475726e656420746f6b656e7320796f7527726520686170707920776974682e70737761705f65786163745f746f6b656e735f666f725f746f6b656e7314011070617468e10501585665633c426f783c543a3a41737365744b696e643e3e000124616d6f756e745f696e180128543a3a42616c616e6365000138616d6f756e745f6f75745f6d696e180128543a3a42616c616e636500011c73656e645f746f000130543a3a4163636f756e7449640001286b6565705f616c697665200110626f6f6c000318c0537761702074686520657861637420616d6f756e74206f6620606173736574316020696e746f2060617373657432602e2d0160616d6f756e745f6f75745f6d696e6020706172616d20616c6c6f777320796f7520746f207370656369667920746865206d696e20616d6f756e74206f662074686520606173736574326060796f7527726520686170707920746f20726563656976652e0059015b604173736574436f6e76657273696f6e4170693a3a71756f74655f70726963655f65786163745f746f6b656e735f666f725f746f6b656e73605d2072756e74696d652063616c6c2063616e2062652063616c6c656430666f7220612071756f74652e70737761705f746f6b656e735f666f725f65786163745f746f6b656e7314011070617468e10501585665633c426f783c543a3a41737365744b696e643e3e000128616d6f756e745f6f7574180128543a3a42616c616e6365000134616d6f756e745f696e5f6d6178180128543a3a42616c616e636500011c73656e645f746f000130543a3a4163636f756e7449640001286b6565705f616c697665200110626f6f6c00041801015377617020616e7920616d6f756e74206f6620606173736574316020746f206765742074686520657861637420616d6f756e74206f662060617373657432602e190160616d6f756e745f696e5f6d61786020706172616d20616c6c6f777320746f207370656369667920746865206d617820616d6f756e74206f662074686520606173736574316060796f7527726520686170707920746f2070726f766964652e0059015b604173736574436f6e76657273696f6e4170693a3a71756f74655f70726963655f746f6b656e735f666f725f65786163745f746f6b656e73605d2072756e74696d652063616c6c2063616e2062652063616c6c656430666f7220612071756f74652e14746f756368080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e00052c4d01546f75636820616e206578697374696e6720706f6f6c20746f2066756c66696c6c2070726572657175697369746573206265666f72652070726f766964696e67206c69717569646974792c20737563682061734901656e737572696e6720746861742074686520706f6f6c2773206163636f756e74732061726520696e20706c6163652e204974206973207479706963616c6c792075736566756c207768656e206120706f6f6c550163726561746f722072656d6f7665732074686520706f6f6c2773206163636f756e747320616e6420646f6573206e6f742070726f766964652061206c69717569646974792e205468697320616374696f6e206d61795501696e766f6c766520686f6c64696e67206173736574732066726f6d207468652063616c6c65722061732061206465706f73697420666f72206372656174696e672074686520706f6f6c2773206163636f756e74732e0068546865206f726967696e206d757374206265205369676e65642e0029012d2060617373657431603a20546865206173736574204944206f6620616e206578697374696e6720706f6f6c20776974682061207061697220286173736574312c20617373657432292e29012d2060617373657432603a20546865206173736574204944206f6620616e206578697374696e6720706f6f6c20776974682061207061697220286173736574312c20617373657432292e0098456d6974732060546f756368656460206576656e74207768656e207375636365737366756c2e047050616c6c657427732063616c6c61626c652066756e6374696f6e732ee1050000029400e5050c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c65741043616c6c040454000104586d6967726174655f746f5f6e65775f6163636f756e74080118617373657431940144426f783c543a3a41737365744b696e643e000118617373657432940144426f783c543a3a41737365744b696e643e0000105d014d6967726174657320616e206578697374696e6720706f6f6c20746f2061206e6577206163636f756e742049442064657269766174696f6e206d6574686f6420666f72206120676976656e20617373657420706169722e3101496620746865206d6967726174696f6e206973207375636365737366756c2c207472616e73616374696f6e20666565732061726520726566756e64656420746f207468652063616c6c65722e003c4d757374206265207369676e65642e047050616c6c657427732063616c6c61626c652066756e6374696f6e732ee905086461737365745f6875625f77657374656e645f72756e74696d65304f726967696e43616c6c65720001101873797374656d0400ed0501746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000002c506f6c6b61646f7458636d0400f105014870616c6c65745f78636d3a3a4f726967696e001f002843756d756c757358636d0400f505016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00200010566f69640400f90501410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f696400030000ed050c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000f1050c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400d801204c6f636174696f6e00000020526573706f6e73650400d801204c6f636174696f6e00010000f5050c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400dd01011850617261496400010000f905081c73705f636f726510566f696400010000fd050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0106000004080004000506083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef501015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730906018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000009060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c001185665633c543e00000d060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1106000004081506180015060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119060453000004001d0601185665633c543e00001906083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501fd012c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065fd01012450726f78795479706500011464656c617910012c426c6f636b4e756d62657200001d060000021906002106000004082506180025060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540129060453000004002d0601185665633c543e00002906083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d62657200002d0600000229060031060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35060c3470616c6c65745f61737365747314747970657330417373657444657461696c730c1c42616c616e63650118244163636f756e7449640100384465706f73697442616c616e63650118003001146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000118737570706c7918011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e636500012c6d696e5f62616c616e636518011c42616c616e636500013469735f73756666696369656e74200110626f6f6c0001206163636f756e747310010c75333200012c73756666696369656e747310010c753332000124617070726f76616c7310010c7533320001187374617475733906012c4173736574537461747573000039060c3470616c6c65745f6173736574731474797065732c417373657453746174757300010c104c6976650000001846726f7a656e0001002844657374726f79696e67000200003d060000040810000041060c3470616c6c65745f6173736574731474797065733041737365744163636f756e74101c42616c616e63650118384465706f73697442616c616e6365011814457874726101ed01244163636f756e74496401000010011c62616c616e636518011c42616c616e6365000118737461747573450601344163636f756e74537461747573000118726561736f6e490601a84578697374656e6365526561736f6e3c4465706f73697442616c616e63652c204163636f756e7449643e0001146578747261ed0101144578747261000045060c3470616c6c65745f617373657473147479706573344163636f756e7453746174757300010c184c69717569640000001846726f7a656e0001001c426c6f636b65640002000049060c3470616c6c65745f6173736574731474797065733c4578697374656e6365526561736f6e081c42616c616e63650118244163636f756e7449640100011420436f6e73756d65720000002853756666696369656e740001002c4465706f73697448656c64040018011c42616c616e63650002003c4465706f736974526566756e6465640003002c4465706f73697446726f6d08000001244163636f756e744964000018011c42616c616e6365000400004d060000040c1000000051060c3470616c6c65745f61737365747314747970657320417070726f76616c081c42616c616e63650118384465706f73697442616c616e6365011800080118616d6f756e7418011c42616c616e636500011c6465706f7369741801384465706f73697442616c616e6365000055060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e670159060014011c6465706f7369741801384465706f73697442616c616e63650001106e616d6559060134426f756e646564537472696e6700011873796d626f6c59060134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d060c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e61060c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67200110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656e200110626f6f6c000065060000040c001010006906000004080010006d060c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f766564210201444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656e200110626f6f6c00011c6465706f7369741801384465706f73697442616c616e6365000071060c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e6365000110646174610d02016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000075060c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e6365000110646174610d02016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656e200110626f6f6c000079060000040c1015021902007d06000004081d0218008106000004081821020085060c3870616c6c65745f756e69717565731870616c6c6574144572726f72080454000449000148304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d000f047454686520676976656e206974656d20494420697320756e6b6e6f776e2e284e6f74466f7253616c65001004544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001104705468652070726f76696465642062696420697320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e89060c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c75333200008d060c2c70616c6c65745f6e66747314747970657320426974466c616773040454019106000400080138436f6c6c656374696f6e526f6c65000091060c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e0004000095060c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f73697401990624417070726f76616c73019d06000c01146f776e65720001244163636f756e744964000124617070726f76616c739d060124417070726f76616c7300011c6465706f7369749906011c4465706f736974000099060c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e636500009d060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01000456011502045300000400a106013842547265654d61703c4b2c20563e0000a106042042547265654d617008044b01000456011502000400a506000000a506000002a90600a9060000040800150200ad060c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f736974000110646174612902016c426f756e6465645665633c75382c20537472696e674c696d69743e0000b1060c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f73697401b5062c537472696e674c696d6974000008011c6465706f736974b506011c4465706f736974000110646174612902016c426f756e6465645665633c75382c20537472696e674c696d69743e0000b5060c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000b906000004101015022d021d0200bd06000004082902c10600c1060c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74210201444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e63650000c5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540100045300000400c906012c42547265655365743c543e0000c906042042547265655365740404540100000400c0000000cd060c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01350220446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656d150201384f7074696f6e3c4974656d49643e0001147072696365310201784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e650000d1060c2c70616c6c65745f6e66747314747970657320426974466c61677304045401d50600040030013450616c6c6574466561747572650000d5060c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c7300040014537761707300080000d9060c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b4304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e3c5769746e6573735265717569726564002c0490546865207769746e65737320646174612073686f756c642062652070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd0600000408940000e1060000040c94000000e5060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e6701e9060014011c6465706f7369741801384465706f73697442616c616e63650001106e616d65e9060134426f756e646564537472696e6700011873796d626f6ce9060134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c0000e9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000ed060c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef1060c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1474797065731c44657461696c73101c417373657449640110244672616374696f6e7301181c4465706f7369740118244163636f756e744964010000100114617373657410011c417373657449640001246672616374696f6e731801244672616374696f6e7300011c6465706f73697418011c4465706f73697400013461737365745f63726561746f720001244163636f756e7449640000f50608346672616d655f737570706f72742050616c6c65744964000004003101011c5b75383b20385d0000f9060c7070616c6c65745f6e66745f6672616374696f6e616c697a6174696f6e1870616c6c6574144572726f7204045400011040496e636f727265637441737365744964000004ac417373657420494420646f6573206e6f7420636f72726573706f6e6420746f206c6f636b6564204e46542e304e6f5065726d697373696f6e000104e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e2c4e66744e6f74466f756e64000204484e465420646f65736e27742065786973742e504e66744e6f744672616374696f6e616c697a6564000304904e465420686173206e6f7420796574206265656e206672616374696f6e616c697365642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd060c3470616c6c65745f6173736574731474797065733441737365744d6574616461746108384465706f73697442616c616e6365011834426f756e646564537472696e670101070014011c6465706f7369741801384465706f73697442616c616e63650001106e616d6501070134426f756e646564537472696e6700011873796d626f6c01070134426f756e646564537472696e67000120646563696d616c73080108753800012469735f66726f7a656e200110626f6f6c000001070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000005070c3470616c6c65745f6173736574731870616c6c6574144572726f720804540004490001502842616c616e63654c6f7700000415014163636f756e742062616c616e6365206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865207472616e7366657220616d6f756e742e244e6f4163636f756e7400010490546865206163636f756e7420746f20616c74657220646f6573206e6f742065786973742e304e6f5065726d697373696f6e000204e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e1c556e6b6e6f776e0003047854686520676976656e20617373657420494420697320756e6b6e6f776e2e1846726f7a656e00040474546865206f726967696e206163636f756e742069732066726f7a656e2e14496e5573650005047854686520617373657420494420697320616c72656164792074616b656e2e284261645769746e6573730006046c496e76616c6964207769746e657373206461746120676976656e2e384d696e42616c616e63655a65726f0007048c4d696e696d756d2062616c616e63652073686f756c64206265206e6f6e2d7a65726f2e4c556e617661696c61626c65436f6e73756d657200080c5901556e61626c6520746f20696e6372656d656e742074686520636f6e73756d6572207265666572656e636520636f756e74657273206f6e20746865206163636f756e742e20456974686572206e6f2070726f76696465724d017265666572656e63652065786973747320746f20616c6c6f772061206e6f6e2d7a65726f2062616c616e6365206f662061206e6f6e2d73656c662d73756666696369656e742061737365742c206f72206f6e65f06665776572207468656e20746865206d6178696d756d206e756d626572206f6620636f6e73756d65727320686173206265656e20726561636865642e2c4261644d657461646174610009045c496e76616c6964206d6574616461746120676976656e2e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e20576f756c64446965000b04350154686520736f75726365206163636f756e7420776f756c64206e6f74207375727669766520746865207472616e7366657220616e64206974206e6565647320746f207374617920616c6976652e34416c7265616479457869737473000c04845468652061737365742d6163636f756e7420616c7265616479206578697374732e244e6f4465706f736974000d04d45468652061737365742d6163636f756e7420646f65736e2774206861766520616e206173736f636961746564206465706f7369742e24576f756c644275726e000e04c4546865206f7065726174696f6e20776f756c6420726573756c7420696e2066756e6473206265696e67206275726e65642e244c6976654173736574000f0859015468652061737365742069732061206c69766520617373657420616e64206973206163746976656c79206265696e6720757365642e20557375616c6c7920656d697420666f72206f7065726174696f6e7320737563681d016173206073746172745f64657374726f796020776869636820726571756972652074686520617373657420746f20626520696e20612064657374726f79696e672073746174652e3041737365744e6f744c697665001004c8546865206173736574206973206e6f74206c6976652c20616e64206c696b656c79206265696e672064657374726f7965642e3c496e636f7272656374537461747573001104b054686520617373657420737461747573206973206e6f7420746865206578706563746564207374617475732e244e6f7446726f7a656e001204d85468652061737365742073686f756c642062652066726f7a656e206265666f72652074686520676976656e206f7065726174696f6e2e3843616c6c6261636b4661696c65640013048443616c6c6261636b20616374696f6e20726573756c74656420696e206572726f72048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09070c5c70616c6c65745f61737365745f636f6e76657273696f6e14747970657320506f6f6c496e666f042c506f6f6c417373657449640110000401206c705f746f6b656e10012c506f6f6c4173736574496400000d070c5c70616c6c65745f61737365745f636f6e76657273696f6e1870616c6c6574144572726f7204045400015c40496e76616c6964417373657450616972000004b850726f76696465642061737365742070616972206973206e6f7420737570706f7274656420666f7220706f6f6c2e28506f6f6c45786973747300010450506f6f6c20616c7265616479206578697374732e4857726f6e6744657369726564416d6f756e74000204744465736972656420616d6f756e742063616e2774206265207a65726f2e60416d6f756e744f6e654c6573735468616e4d696e696d616c000308490150726f766964656420616d6f756e742073686f756c642062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e60416d6f756e7454776f4c6573735468616e4d696e696d616c000408490150726f766964656420616d6f756e742073686f756c642062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e68526573657276654c6566744c6573735468616e4d696e696d616c0005084d0152657365727665206e6565647320746f20616c776179732062652067726561746572207468616e206f7220657175616c20746f20746865206578697374656e7469616c206465706f7369742f617373657427733c6d696e696d616c20616d6f756e742e40416d6f756e744f7574546f6f48696768000604c84465736972656420616d6f756e742063616e277420626520657175616c20746f2074686520706f6f6c20726573657276652e30506f6f6c4e6f74466f756e640007045c54686520706f6f6c20646f65736e27742065786973742e204f766572666c6f7700080454416e206f766572666c6f772068617070656e65642e8041737365744f6e654465706f7369744469644e6f744d6565744d696e696d756d0009042901546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f722074686520666972737420746f6b656e20696e207468652070616972207761736e2774206d65742e80417373657454776f4465706f7369744469644e6f744d6565744d696e696d756d000a042d01546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f7220746865207365636f6e6420746f6b656e20696e207468652070616972207761736e2774206d65742e8c41737365744f6e655769746864726177616c4469644e6f744d6565744d696e696d756d000b042901546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f722074686520666972737420746f6b656e20696e207468652070616972207761736e2774206d65742e8c417373657454776f5769746864726177616c4469644e6f744d6565744d696e696d756d000c042d01546865206d696e696d616c20616d6f756e7420726571756972656d656e7420666f7220746865207365636f6e6420746f6b656e20696e207468652070616972207761736e2774206d65742e704f7074696d616c416d6f756e744c6573735468616e44657369726564000d04bc4f7074696d616c2063616c63756c6174656420616d6f756e74206973206c657373207468616e20646573697265642e6c496e73756666696369656e744c69717569646974794d696e746564000e0478496e73756666696369656e74206c6971756964697479206d696e7465642e345a65726f4c6971756964697479000f0488526571756573746564206c69717569646974792063616e2774206265207a65726f2e285a65726f416d6f756e7400100454416d6f756e742063616e2774206265207a65726f2e8c50726f76696465644d696e696d756d4e6f7453756666696369656e74466f7253776170001104ec43616c63756c6174656420616d6f756e74206f7574206973206c657373207468616e2070726f7669646564206d696e696d756d20616d6f756e742e8c50726f76696465644d6178696d756d4e6f7453756666696369656e74466f7253776170001204cc50726f7669646564206d6178696d756d20616d6f756e74206973206e6f742073756666696369656e7420666f7220737761702e2c496e76616c696450617468001304d45468652070726f76696465642070617468206d75737420636f6e7369737473206f66203220617373657473206174206c656173742e344e6f6e556e6971756550617468001404c45468652070726f76696465642070617468206d75737420636f6e7369737473206f6620756e69717565206173736574732e50496e636f7272656374506f6f6c41737365744964001504ec497420776173206e6f7420706f737369626c6520746f20676574206f7220696e6372656d656e7420746865204964206f662074686520706f6f6c2e3042656c6f774d696e696d756d001604f05468652064657374696e6174696f6e206163636f756e742063616e6e6f7420657869737420776974682074686520737761707065642066756e64732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11070c6c70616c6c65745f61737365745f636f6e76657273696f6e5f6f70731870616c6c6574144572726f7204045400011040496e76616c6964417373657450616972000004b850726f76696465642061737365742070616972206973206e6f7420737570706f7274656420666f7220706f6f6c2e30506f6f6c4e6f74466f756e640001045c54686520706f6f6c20646f65736e27742065786973742e2c5a65726f42616c616e636500020478506f6f6c27732062616c616e63652063616e6e6f74206265207a65726f2e3c5061727469616c5472616e736665720003043901496e646963617465732061207061727469616c207472616e73666572206f662062616c616e636520746f20746865206e6577206163636f756e7420647572696e672061206d6967726174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1507102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ad031043616c6c015505245369676e617475726501c105144578747261011907000400380000001907000004241d072107250729072d07350739073d074107001d0710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000210710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000250710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000290710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e65736973040454000000002d0710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003107010c45726100003107102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000350710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400a00120543a3a4e6f6e63650000390710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003d07088870616c6c65745f61737365745f636f6e76657273696f6e5f74785f7061796d656e7450436861726765417373657454785061796d656e74040454000008010c746970b0013042616c616e63654f663c543e00012061737365745f6964d90401684f7074696f6e3c436861726765417373657449644f663c543e3e0000410708a463756d756c75735f7072696d6974697665735f73746f726167655f7765696768745f7265636c61696d5053746f726167655765696768745265636c61696d040454000000004507086461737365745f6875625f77657374656e645f72756e74696d651c52756e74696d6500000000701853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f7069637301010402346d020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000750204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500006502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500007d02040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01810201581830426c6f636b57656967687473910289010700f2052a01000b00204aa9d101020040010265cd1d00010bc0560def45010200e000010b0098f73e5d010200f0000100000265cd1d00010bc0de5f59ba0102003001010b00204aa9d1010200400101070088526a74020050000265cd1d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468a1023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874a9024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ead02910320776573746d696e7420776573746d696e7401000000386d0f000000000040dd718d5cc53262d401000000d7bdd8a272ca0d6501000000df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f01000000899a250cbe84f250010000008a8047a53a8277ec0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000de92b8a0426b9bf602000000ea93e3f16f3d696202000000fbc577b9d747efd6010000000f000000000484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669780102082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01bd02003c50617261636861696e53797374656d013c50617261636861696e53797374656d6044556e696e636c756465645365676d656e740100c1020400184901204c617465737420696e636c7564656420626c6f636b2064657363656e64616e7473207468652072756e74696d652061636365707465642e20496e206f7468657220776f7264732c20746865736520617265610120616e636573746f7273206f66207468652063757272656e746c7920657865637574696e6720626c6f636b2077686963682068617665206e6f74206265656e20696e636c7564656420696e20746865206f627365727665644c2072656c61792d636861696e2073746174652e00750120546865207365676d656e74206c656e677468206973206c696d69746564206279207468652063617061636974792072657475726e65642066726f6d20746865205b60436f6e73656e737573486f6f6b605d20636f6e666967757265643c20696e207468652070616c6c65742e6c41676772656761746564556e696e636c756465645365676d656e740000e90204000c69012053746f72616765206669656c642074686174206b6565707320747261636b206f662062616e64776964746820757365642062792074686520756e696e636c75646564207365676d656e7420616c6f6e672077697468207468652d01206c61746573742048524d502077617465726d61726b2e205573656420666f72206c696d6974696e672074686520616363657074616e6365206f66206e657720626c6f636b73207769746890207265737065637420746f2072656c617920636861696e20636f6e73747261696e74732e5450656e64696e6756616c69646174696f6e436f6465010038040018590120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f20626524206170706c6965642e003d0120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f7665727772697465207468657101205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d2077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f636573730901207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000380400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000ed0204000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f6465010020040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001010000000000c1d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e00882054686973206973207570646174656420696e20606f6e5f66696e616c697a65602e60557067726164655265737472696374696f6e5369676e616c0100f50204001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3855706772616465476f41686561640100e102040014dc204f7074696f6e616c207570677261646520676f2d6168656164207369676e616c2066726f6d207468652072656c61792d636861696e2e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000fd02040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000050304001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000019030400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100210380000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301002503040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100310304000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d6573736167657301008d0204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301008d02040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e5c55707761726444656c6976657279466565466163746f720100390340000064a7b3b6e00d000000000000000004e42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c69766572792066656520627920666f7220554d502e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e60437573746f6d56616c69646174696f6e486561644461746100003804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e013d03017c042853656c66506172614964dd0110e803000004b82052657475726e73207468652070617261636861696e204944207765206172652072756e6e696e6720776974682e016103012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e0165030004344d696e696d756d506572696f6430200000000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00033450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100dd01106400000000016903000000042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402006d03040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6020526573657276657301010402007d0304000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c6473010104020089030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402009d030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01a903018410484578697374656e7469616c4465706f736974184000ca9a3b00000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01b9030a485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100390340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100bd0304000000018c04604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000b38417373657454785061796d656e740000019000000d28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e000000001444436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100c10304000411012054686520696e76756c6e657261626c652c207065726d697373696f6e656420636f6c6c61746f72732e2054686973206c697374206d75737420626520736f727465642e3443616e6469646174654c6973740100c5030400146901205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e206043616e646964617465736020616e642060496e76756c6e657261626c6573602073686f756c6420626550206d757475616c6c79206578636c75736976652e0075012054686973206c69737420697320736f7274656420696e20617363656e64696e67206f72646572206279206465706f73697420616e64207768656e20746865206465706f736974732061726520657175616c2c20746865206c65617374a020726563656e746c79207570646174656420697320636f6e7369646572656420677265617465722e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e01d10301bc0001d503151c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100c00400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100d9030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010011020400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500e1030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405e90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01f10301c40001f503161041757261011041757261082c417574686f7269746965730100f9030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010001042000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000430536c6f744475726174696f6e30207017000000000000100d012054686520736c6f74206475726174696f6e20417572612073686f756c642072756e20776974682c2065787072657373656420696e206d696c6c697365636f6e64732e3d0120546865206566666563746976652076616c7565206f66207468697320747970652073686f756c64206e6f74206368616e6765207768696c652074686520636861696e2069732072756e6e696e672e00350120466f72206261636b776172647320636f6d7061746962696c6974792065697468657220757365205b604d696e696d756d506572696f6454696d657354776f605d206f72206120636f6e73742e00171c41757261457874011c41757261457874082c417574686f7269746965730100f903040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c5d0120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c0d0120616c77617973206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e20536c6f74496e666f0000050404000cd82043757272656e7420736c6f742070616972656420776974682061206e756d626572206f6620617574686f72656420626c6f636b732e00982055706461746564206f6e206561636820626c6f636b20696e697469616c697a6174696f6e2e00000000182458636d705175657565012458636d7051756575651c50496e626f756e6458636d7053757370656e646564010009040400200d01205468652073757370656e64656420696e626f756e642058434d50206368616e6e656c732e20416c6c206f746865727320617265206e6f742073757370656e6465642e00710120546869732069732061206053746f7261676556616c75656020696e7374656164206f662061206053746f726167654d6170602073696e636520776520657870656374206d756c7469706c652072656164732070657220626c6f636b690120746f20646966666572656e74206b65797320776974682061206f6e652062797465207061796c6f61642e205468652061636365737320746f2060426f756e6465644254726565536574602077696c6c2062652063616368656415012077697468696e2074686520626c6f636b20616e64207468657265666f7265206f6e6c7920696e636c75646564206f6e636520696e207468652070726f6f662073697a652e006501204e4f54453a2054686520506f562062656e63686d61726b696e672063616e6e6f74206b6e6f77207468697320616e642077696c6c206f7665722d657374696d6174652c20627574207468652061637475616c2070726f6f66442077696c6c20626520736d616c6c65722e484f7574626f756e6458636d70537461747573010015040400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205210438040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402dd0138040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e66696701002504302000000030000000080000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e38517565756553757370656e64656401002004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e4444656c6976657279466565466163746f7201010405dd01390340000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e01290401c8044c4d6178496e626f756e6453757370656e6465641010e803000014490120546865206d6178696d756d206e756d626572206f6620696e626f756e642058434d50206368616e6e656c7320746861742063616e2062652073757370656e6465642073696d756c74616e656f75736c792e005d0120416e792066757274686572206368616e6e656c2073757370656e73696f6e732077696c6c206661696c20616e64206d65737361676573206d6179206765742064726f7070656420776974686f757420667572746865724501206e6f746963652e2043686f6f73696e67206120686967682076616c756520283130303029206973206f6b61793b207468652074726164652d6f666620746861742069732064657363726962656420696ed8205b60496e626f756e6458636d7053757370656e646564605d207374696c6c206170706c6965732061742074686174207363616c652e012d041e2c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c51756572696573000104023031040400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502690410040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502690430040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f7469667954617267657473000108050269046d0404000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100710404000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e00007d040400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c05020285048d04040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402009d04040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01a90401cc00011d051f2843756d756c757358636d0001210501d10100002044546f526f636f636f58636d526f757465720144546f526f636f636f58636d526f7574657204184272696467650100250544000064a7b3b6e00d0000000000000000001c6820427269646765207468617420776520617265207573696e672e007101202a2a627269646765732d76312a2a20617373756d7074696f6e733a20616c6c206f7574626f756e64206d65737361676573207468726f756768207468697320726f7574657220617265207573696e672073696e676c65206c616e656d0120616e6420746f2073696e676c652072656d6f746520636f6e73656e7375732e20496620746865726520697320736f6d65206f746865722072656d6f746520636f6e73656e73757320746861742075736573207468652073616d65610120627269646765206875622c207468652073657061726174652070616c6c657420696e7374616e6365207368616c6c20626520757365642c20496e2060763260207765276c6c206861766520616c6c2072657175697265647101207072696d69746976657320286c616e652d696420616b61206272696467652d69642c20646572697665642066726f6d2058434d206c6f636174696f6e732920746f20737570706f7274206d756c7469706c6520206272696467657374206279207468652073616d652070616c6c657420696e7374616e63652e01290500000022304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f7201010405d9012d0574000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c53657276696365486561640000d901040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e145061676573000108050539053d050400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e01450501d50110204865617053697a65101000000100143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010080000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e34536572766963655765696768749d022c0107005840fba2020070001841012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f72a820736572766963696e6720656e717565756564206974656d7320606f6e5f696e697469616c697a65602e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6c5d012060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c79206f7220736574205b6053656c663a3a49646c654d617853657276696365576569676874605d20746f2068617665542069742072756e20696e20606f6e5f69646c65602e5049646c654d6178536572766963655765696768749d022c0107005840fba202007000145d0120546865206d6178696d756d20616d6f756e74206f66207765696768742028696620616e792920746f20626520757365642066726f6d2072656d61696e696e672077656967687420606f6e5f69646c656020776869636841012073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f7220736572766963696e6720656e717565756564206974656d7320606f6e5f69646c65602e3d012055736566756c20666f722070617261636861696e7320746f2070726f63657373206d65737361676573206174207468652073616d6520626c6f636b2074686579206172652072656365697665642e00290120496620604e6f6e65602c2069742077696c6c206e6f742063616c6c2060536572766963655175657565733a3a736572766963655f7175657565736020696e20606f6e5f69646c65602e014905231c5574696c69747900014d0501e501044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01fd0528204d756c746973696701204d756c746973696704244d756c746973696773000108050201060506040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01590501f1010c2c4465706f7369744261736518400047ab5602000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218400024f4000000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e010d06291450726f7879011450726f7879081c50726f78696573010104050011064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500210644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01610501f901184050726f78794465706f73697442617365184000113d5502000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184020c5fb0000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840001a7a5502000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f721840408af70100000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0131062a1841737365747301184173736574731014417373657400010402103506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e7400010802023d064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c0202024d06510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d65746164617461010104021055065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e0169050105021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f736974184000e8764817000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f736974184000f685540200000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f73697442617365184080b012560200000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f73697450657242797465184020a1070000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000ca9a3b0000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e015d06321c556e6971756573011c556e69717565732814436c61737300010402106106040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202026506ed01040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e7400010802026906ed0104000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e144173736574000108020271026d06040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040210710604000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f6600010802027102750604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c02020279067d06040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802027102810604000470205072696365206f6620616e20617373657420696e7374616e63652e4c436f6c6c656374696f6e4d6178537570706c79000104021010040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e016d050109022044436f6c6c656374696f6e4465706f736974184000e876481700000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000ca9a3b00000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f7369744261736518402015e457020000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000e40b540200000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f73697450657242797465184020a1070000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410108000000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410102000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410104000000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e01850633104e66747301104e6674733c28436f6c6c656374696f6e00010402108906040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202026506ed01040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e7400010802026906ed0104000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f6600010802023d068d06040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d000108020271029506040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210ad0604000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802027102b10604000454204d65746164617461206f6620616e206974656d2e2441747472696275746500011002020202b906bd06040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f66000108020271028106040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802027102c50604000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802027102cd060400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f66000104021081050400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802027102a9050400044c20436f6e666967206f6620616e206974656d2e017d050125023844436f6c6c656374696f6e4465706f736974184000e876481700000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000ca9a3b00000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f7369744261736518402015e457020000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000e40b540200000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f73697450657242797465184020a1070000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410104000000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410101400000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410101e00000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e1010001a4f0004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100a00000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e204665617475726573d10620000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e01d9063434466f726569676e4173736574730134466f726569676e4173736574731014417373657400010402943506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e740001080202dd064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c020202e106510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040294e5065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e01d1050141021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f736974184000e8764817000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f736974184000f685540200000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f73697442617365184080b012560200000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f73697450657242797465184020a1070000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f736974184000ca9a3b0000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01ed0635504e66744672616374696f6e616c697a6174696f6e01504e66744672616374696f6e616c697a6174696f6e04284e6674546f4173736574000104027102f1060400041501204b6565707320747261636b206f662074686520636f72726573706f6e64696e67204e46542049442c20617373657420494420616e6420616d6f756e74206d696e7465642e01d505014502141c4465706f736974184000e8764817000000000000000000000008650120546865206465706f7369742070616964206279207468652075736572206c6f636b696e6720616e204e46542e20546865206465706f7369742069732072657475726e656420746f20746865206f726967696e616c204e4654e4206f776e6572207768656e2074686520617373657420697320756e696669656420616e6420746865204e465420697320756e6c6f636b65642e2050616c6c65744964f506206672616374696f6e04f4205468652070616c6c657427732069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e384e6577417373657453796d626f6c5906141046524143048820546865206e65776c79206372656174656420617373657427732073796d626f6c2e304e657741737365744e616d655906141046726163048020546865206e65776c7920637265617465642061737365742773206e616d652e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e01f9063628506f6f6c4173736574730128506f6f6c4173736574731014417373657400010402103506040004542044657461696c73206f6620616e2061737365742e1c4163636f756e7400010802023d064106040004e42054686520686f6c64696e6773206f662061207370656369666963206163636f756e7420666f7220612073706563696669632061737365742e24417070726f76616c7300010c0202024d06510604000c590120417070726f7665642062616c616e6365207472616e73666572732e2046697273742062616c616e63652069732074686520616d6f756e7420617070726f76656420666f72207472616e736665722e205365636f6e64e82069732074686520616d6f756e74206f662060543a3a43757272656e63796020726573657276656420666f722073746f72696e6720746869732e4901204669727374206b6579206973207468652061737365742049442c207365636f6e64206b657920697320746865206f776e657220616e64207468697264206b6579206973207468652064656c65676174652e204d657461646174610101040210fd065000000000000000000000000000000000000000000458204d65746164617461206f6620616e2061737365742e01d9050149021c4052656d6f76654974656d734c696d69741010e80300000c5101204d6178206e756d626572206f66206974656d7320746f2064657374726f7920706572206064657374726f795f6163636f756e74736020616e64206064657374726f795f617070726f76616c73602063616c6c2e003901204d75737420626520636f6e6669677572656420746f20726573756c7420696e2061207765696768742074686174206d616b657320656163682063616c6c2066697420696e206120626c6f636b2e3041737365744465706f73697418400000000000000000000000000000000004f82054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e2061737365742e4c41737365744163636f756e744465706f7369741840000000000000000000000000000000000845012054686520616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206e6f6e2d70726f7669646572206173736574206163636f756e7420746f20626530206d61696e7461696e65642e4c4d657461646174614465706f736974426173651840000000000000000000000000000000000451012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f75722061737365742e584d657461646174614465706f7369745065724279746518400000000000000000000000000000000008550120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f6620627974657320796f752073746f726520696e20796f757228206d657461646174612e3c417070726f76616c4465706f7369741840000000000000000000000000000000000421012054686520616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e206372656174696e672061206e657720617070726f76616c2e2c537472696e674c696d697410103200000004e020546865206d6178696d756d206c656e677468206f662061206e616d65206f722073796d626f6c2073746f726564206f6e2d636861696e2e010507373c4173736574436f6e76657273696f6e013c4173736574436f6e76657273696f6e0814506f6f6c7300010402510209070400086901204d61702066726f6d2060506f6f6c417373657449646020746f2060506f6f6c496e666f602e20546869732065737461626c69736865732077686574686572206120706f6f6c20686173206265656e206f6666696369616c6c793d01206372656174656420726174686572207468616e2070656f706c652073656e64696e6720746f6b656e73206469726563746c7920746f206120706f6f6c2773207075626c6963206163636f756e742e3c4e657874506f6f6c4173736574496400001004000825012053746f726573207468652060506f6f6c4173736574496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e657874206c7020746f6b656e2ee42054686973206765747320696e6372656d656e746564207768656e657665722061206e6577206c7020706f6f6c20697320637265617465642e01dd05014d021c144c504665651010030000000451012041202520746865206c69717569646974792070726f7669646572732077696c6c2074616b65206f6620657665727920737761702e20526570726573656e7473203130746873206f6620612070657263656e742e30506f6f6c536574757046656518400000000000000000000000000000000004882041206f6e652d74696d652066656520746f2073657475702074686520706f6f6c2e44506f6f6c536574757046656541737365749408010004390120417373657420636c6173732066726f6d205b60436f6e6669673a3a417373657473605d207573656420746f2070617920746865205b60436f6e6669673a3a506f6f6c5365747570466565605d2e584c69717569646974795769746864726177616c46656555021000000000048420412066656520746f20776974686472617720746865206c69717569646974792e404d696e744d696e4c6971756964697479184064000000000000000000000000000000043d0120546865206d696e696d756d204c5020746f6b656e20616d6f756e74207468617420636f756c64206265206d696e7465642e20416d656c696f726174657320726f756e64696e67206572726f72732e444d617853776170506174684c656e677468101003000000048820546865206d6178206e756d626572206f6620686f707320696e206120737761702e2050616c6c65744964f5062070792f6173636f6e04f4205468652070616c6c657427732069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e010d0738604173736574436f6e76657273696f6e4d6967726174696f6e0001e50501610200011107c81507042448436865636b4e6f6e5a65726f53656e6465721d07ed0140436865636b5370656356657273696f6e21071038436865636b547856657273696f6e25071030436865636b47656e6573697329073438436865636b4d6f7274616c6974792d073428436865636b4e6f6e63653507ed012c436865636b5765696768743907ed0150436861726765417373657454785061796d656e743d07ed015053746f726167655765696768745265636c61696d4107ed014507'; diff --git a/src/types.ts b/src/types.ts index be531787..a2334937 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,6 +10,7 @@ import BN from 'bn.js'; import { CreateXcmCallOpts } from './createXcmCalls/types'; import { XcmPalletName } from './createXcmCalls/util/establishXcmPallet'; import { XTokensBaseArgs } from './createXcmCalls/xTokens/types'; +import { UnionXcmMultiLocation } from './createXcmTypes/types'; import type { Registry } from './registry'; import type { ChainInfoKeys, ChainInfoRegistry, InjectedChainInfoKeys } from './registry/types'; @@ -82,10 +83,8 @@ export enum AssetType { } export enum AssetCallType { - LocalReserve = "LocalReserve", - DestinationReserve = 'DestinationReserve', - RemoteReserve = 'RemoteReserve', - Teleport = "Teleport", + Reserve = 'Reserve', + Teleport = 'Teleport', } export enum LocalTxChainType { @@ -440,18 +439,25 @@ export type XcmPalletTxMethodTransactionMap = { [x: string]: [XcmPalletCallSignature, CallArgs]; }; +export type RemoteReserveV3 = { + RemoteReserve: { + V3: UnionXcmMultiLocation; + }; +}; +export type RemoteReserveV4 = { + RemoteReserve: { + V4: UnionXcmMultiLocation; + }; +}; +export type RemoteReserve = RemoteReserveV3 | RemoteReserveV4; export type LocalReserve = { LocalReserve: 'null'; }; export type DestinationReserve = { DestinationReserve: 'null'; }; -export type RemoteReserve = { - RemoteReserve: AnyJson; -} export type Teleport = { Teleport: 'null'; }; export type AssetTransferType = LocalReserve | DestinationReserve | Teleport | RemoteReserve; - diff --git a/src/util/getFeeAssetItemIndex.ts b/src/util/getFeeAssetItemIndex.ts index 895b523d..f8c81519 100644 --- a/src/util/getFeeAssetItemIndex.ts +++ b/src/util/getFeeAssetItemIndex.ts @@ -30,6 +30,8 @@ export const getFeeAssetItemIndex = async ( if (paysWithFeeDest) { const isRelayFeeAsset = + paysWithFeeDest.toLowerCase() === `{"parents":"0","interior":{"here":""}}` || + paysWithFeeDest.toLocaleLowerCase() === `{"parents":"1","interior":{"here":""}}` || paysWithFeeDest.toLowerCase() === 'dot' || paysWithFeeDest.toLowerCase() === 'ksm' || paysWithFeeDest.toLowerCase() === 'wnd'; diff --git a/src/util/resolveMultiLocation.ts b/src/util/resolveMultiLocation.ts index 188ec31e..1a0fbaa1 100644 --- a/src/util/resolveMultiLocation.ts +++ b/src/util/resolveMultiLocation.ts @@ -3,7 +3,7 @@ import type { AnyJson } from '@polkadot/types/types'; import { SUPPORTED_XCM_VERSIONS } from '../consts'; -import type { UnionXcmMultiLocation } from '../createXcmTypes/types'; +import type { UnionXcmMultiLocation, XcmV4Junction } from '../createXcmTypes/types'; import { BaseError, BaseErrorsEnum } from '../errors/BaseError'; import { sanitizeKeys } from './sanitizeKeys'; @@ -32,16 +32,15 @@ export const resolveMultiLocation = (multiLocation: AnyJson, xcmVersion: number) } let result = JSON.parse(multiLocationStr) as UnionXcmMultiLocation; - console.log('RESULT IS', JSON.stringify(result)); - - // if (xcmVersion > 3 && multiLocationStr.toLowerCase().includes('x1')) { - // result = { - // parents: result.parents, - // interior: { - // X1: [result.interior.X1 as XcmV4Junction], - // }, - // }; - // } + + if (xcmVersion > 3 && result.interior.X1) { + result = { + parents: result.parents, + interior: { + X1: [result.interior.X1 as XcmV4Junction], + }, + }; + } if (!hasGlobalConsensus) { return sanitizeKeys(result); From 0b69a733f9bcfdd64618bdf8e4f467b22881b910 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 9 May 2024 23:04:31 -0400 Subject: [PATCH 13/44] update example text --- .../assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts index 17056cb4..60e7175d 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts @@ -10,7 +10,7 @@ import { GREEN, PURPLE, RESET } from '../../../colors'; /** * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) * from a Rococo Asset Hub (System Parachain) account - * to an Ethereum Sepolia an account, where the `xcmVersion` is set to 4, and there is no + * to an Ethereum Sepolia account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. From 16758d8fc6a610efb917f51c9b14f5e75047e6be Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 9 May 2024 23:09:59 -0400 Subject: [PATCH 14/44] revert fetchCallType naming --- src/AssetTransferApi.spec.ts | 26 +++++++++++++------------- src/AssetTransferApi.ts | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/AssetTransferApi.spec.ts b/src/AssetTransferApi.spec.ts index 030f90e7..8239b0e6 100644 --- a/src/AssetTransferApi.spec.ts +++ b/src/AssetTransferApi.spec.ts @@ -234,10 +234,10 @@ describe('AssetTransferAPI', () => { }); }); - describe('fetchTransferType', () => { + describe('fetchCallType', () => { describe('RelayToSystem', () => { it('Should correctly return Teleport', () => { - const assetCallType = relayAssetsApi['fetchTransferType']( + const assetCallType = relayAssetsApi['fetchCallType']( '0', '1000', ['ksm'], @@ -253,7 +253,7 @@ describe('AssetTransferAPI', () => { }); describe('RelayToPara', () => { it('Should correctly return Reserve', () => { - const assetCallType = relayAssetsApi['fetchTransferType']( + const assetCallType = relayAssetsApi['fetchCallType']( '0', '2023', ['ksm'], @@ -269,7 +269,7 @@ describe('AssetTransferAPI', () => { }); describe('SystemToRelay', () => { it('Should correctly return Teleport', () => { - const assetCallType = systemAssetsApi['fetchTransferType']( + const assetCallType = systemAssetsApi['fetchCallType']( '1000', '0', ['ksm'], @@ -285,7 +285,7 @@ describe('AssetTransferAPI', () => { }); describe('SystemToSystem', () => { it('Should correctly return Teleport when sending a native asset', () => { - const assetCallType = systemAssetsApi['fetchTransferType']( + const assetCallType = systemAssetsApi['fetchCallType']( '1000', '1001', ['ksm'], @@ -301,7 +301,7 @@ describe('AssetTransferAPI', () => { }); describe('SystemToPara', () => { it('Should correctly return Teleport when sending to origin Parachain', () => { - const assetCallType = systemAssetsApi['fetchTransferType']( + const assetCallType = systemAssetsApi['fetchCallType']( '1000', '2023', [`{"parents": "1", "interior": { "X1": {"Parachain": "2023"}}}`], @@ -317,7 +317,7 @@ describe('AssetTransferAPI', () => { }); describe('SystemToPara', () => { it('Should correctly return Reserve when sending to non origin Parachain', () => { - const assetCallType = systemAssetsApi['fetchTransferType']( + const assetCallType = systemAssetsApi['fetchCallType']( '1000', '2125', [`{"parents": "1", "interior": { "X1": {"Parachain": "2023"}}}`], @@ -333,7 +333,7 @@ describe('AssetTransferAPI', () => { }); describe('ParaToRelay', () => { it('Should correctly return Reserve', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '0', ['ksm'], @@ -349,7 +349,7 @@ describe('AssetTransferAPI', () => { }); describe('ParaToSystem', () => { it('Should correctly return Teleport when sending a foreign asset that is native to the origin', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '1000', [`{"parents": "1", "interior": { "X1": {"Parachain": "2023"}}}`], @@ -363,7 +363,7 @@ describe('AssetTransferAPI', () => { expect(assetCallType).toEqual('Teleport'); }); it('Should correctly return Teleport when sending the parachains native asset', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '1000', ['movr'], @@ -377,7 +377,7 @@ describe('AssetTransferAPI', () => { expect(assetCallType).toEqual('Teleport'); }); it('Should correctly return Reserve when sending a foreign asset that is foreign to the origin', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '1000', [`{"parents": "1", "interior": { "X1": {"Parachain": "2125"}}}`], @@ -393,7 +393,7 @@ describe('AssetTransferAPI', () => { }); describe('ParaToPara', () => { it('Should correctly return Reserve', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '2125', [`{"parents": "1", "interior": { "X1": {"Parachain": "2023"}}}`], @@ -409,7 +409,7 @@ describe('AssetTransferAPI', () => { }); describe('ParaToRelay', () => { it('Should correctly return Reserve', () => { - const assetCallType = moonriverAssetsApi['fetchTransferType']( + const assetCallType = moonriverAssetsApi['fetchCallType']( '2023', '0', ['KSM'], diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index e1880465..020a20b2 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -281,7 +281,7 @@ export class AssetTransferApi { ); const assetType = this.fetchAssetType(xcmDirection, isForeignAssetsTransfer); - const assetCallType = this.fetchTransferType( + const assetCallType = this.fetchCallType( originChainId, destChainId, assetIds, @@ -628,7 +628,7 @@ export class AssetTransferApi { return AssetType.Foreign; } - private fetchTransferType( + private fetchCallType( originChainId: string, destChainId: string, assetIds: string[], From 69d9e9d9ef6d321932635d3f35fa437dbfa9a4cf Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 9 May 2024 23:14:46 -0400 Subject: [PATCH 15/44] lint --- README.md | 8 +- .../bridgeTransfers/assetHubROCToWestend.ts | 6 +- .../assetHubWETHToEthereumSepolia.ts | 6 +- .../reserve/assetHubMUSEToRhala.ts | 4 +- src/AssetTransferApi.ts | 3 +- .../transferAssetsUsingTypeAndThen.spec.ts | 294 +++++++++--------- src/errors/checkXcmTxInputs.ts | 14 - .../adjustedMockSystemApiV1011000.ts | 1 - 8 files changed, 158 insertions(+), 178 deletions(-) diff --git a/README.md b/README.md index c3f46078..5a3311ae 100644 --- a/README.md +++ b/README.md @@ -31,20 +31,20 @@ The below chart is focusing on what directions are supported for constructing as | Direction | V2 | V3 | V4 | | --------------------- | ------------------ | ------------------ | ------------------ | -| System to Parachain | ✅ | ✅ | ✅ | | System to Relay | ✅ | ✅ | ✅ | +| System to System | ✅ | ✅ | ✅ | +| System to Bridge | ❌ | ✅ | ✅ | +| System to Parachain | ✅ | ✅ | ✅ | | Relay to Parachain | ✅ | ✅ | ✅ | | Relay to System | ✅ | ✅ | ✅ | | Parachain to Parachain | ✅ | ✅ | ✅ | | Parachain to Relay | ✅ | ✅ | ✅ | | Parachain to System | ✅ | ✅ | ✅ | -| System to System | ✅ | ✅ | ✅ | -| System to Bridge | ❌ | ✅ | ✅ | ## 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. +## Note: System refers to System Parachains like Asset Hub. ## Usage diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 062afeb1..68685940 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -31,11 +31,9 @@ const main = async () => { xcmVersion: 4, paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: - '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: - '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts index 60e7175d..6bf5a325 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts @@ -38,11 +38,9 @@ const main = async () => { paysWithFeeDest: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: - '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: - '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts index 01bb5813..0d2618c2 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts @@ -26,9 +26,7 @@ const main = async () => { callInfo = await assetApi.createTransferTransaction( '2004', '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - [ - `{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`, - ], + [`{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`], ['1000000000000'], { format: 'call', diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 020a20b2..ea3549a7 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -1142,8 +1142,7 @@ export class AssetTransferApi { } } else if (api.tx[xcmPallet]) { if ( - api.tx[xcmPallet].transferAssetsUsingTypeAndThen && - xcmDirection === Direction.SystemToBridge || + (api.tx[xcmPallet].transferAssetsUsingTypeAndThen && xcmDirection === Direction.SystemToBridge) || baseOpts.assetTransferType ) { txMethod = 'transferAssetsUsingTypeAndThen'; diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts index ef8fc042..0644b4ea 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts @@ -9,43 +9,44 @@ describe('transferAssetsUsingTypeAndThen', () => { describe('SystemToBridge', () => { describe('XCM V3', () => { it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia', async () => { - const registry = new Registry('asset-hub-rococo', {}); - const isLiquidTokenTransfer = false; - const baseArgs: XcmBaseArgs = { - api: adjustedMockSystemApiV1011000, - direction: Direction.SystemToBridge as XcmDirection, - destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', - assetIds: [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location - ], - amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, - xcmVersion: 3, - specName: 'asset-hub-rococo', - registry, - }; - const refTime = '1000'; - const proofSize = '2000'; - const paysWithFeeDest = '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; - const isForeignAssetsTransfer = true; + const registry = new Registry('asset-hub-rococo', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + assetIds: [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, + xcmVersion: 3, + specName: 'asset-hub-rococo', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; + const isForeignAssetsTransfer = true; - const ext = await transferAssetsUsingTypeAndThen(baseArgs, { - weightLimit: { - refTime, - proofSize, - }, - paysWithFeeDest, - isLiquidTokenTransfer, - isForeignAssetsTransfer, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - }); + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); - expect(ext.toHex()).toBe( - '0x1502041f0d03020109079edaa802030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', - ); + expect(ext.toHex()).toBe( + '0x1502041f0d03020109079edaa802030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + ); }); it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia containing multiple assets', async () => { const registry = new Registry('asset-hub-rococo', {}); @@ -89,127 +90,128 @@ describe('transferAssetsUsingTypeAndThen', () => { ); }); it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { - const registry = new Registry('asset-hub-westend', {}); - const isLiquidTokenTransfer = false; - const baseArgs: XcmBaseArgs = { - api: adjustedMockSystemApiV1011000, - direction: Direction.SystemToBridge as XcmDirection, - destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - assetIds: [ - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location - ], - amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, - xcmVersion: 3, - specName: 'asset-hub-westend', - registry, - }; - const refTime = '1000'; - const proofSize = '2000'; - const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; - const isForeignAssetsTransfer = true; + const registry = new Registry('asset-hub-westend', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds: [ + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + xcmVersion: 3, + specName: 'asset-hub-westend', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; + const isForeignAssetsTransfer = true; - const ext = await transferAssetsUsingTypeAndThen(baseArgs, { - weightLimit: { - refTime, - proofSize, - }, - paysWithFeeDest, - isLiquidTokenTransfer, - isForeignAssetsTransfer, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - }); + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); - expect(ext.toHex()).toBe( - '0x6501041f0d03020109020304000201090200070010a5d4e80303010100a10f0300020109020303010100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', - ); + expect(ext.toHex()).toBe( + '0x6501041f0d03020109020304000201090200070010a5d4e80303010100a10f0300020109020303010100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + ); }); }); describe('XCM V4', () => { - describe('RemoteReserve', () => { - it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia', async () => { - const registry = new Registry('asset-hub-rococo', {}); - const isLiquidTokenTransfer = false; - const baseArgs: XcmBaseArgs = { - api: adjustedMockSystemApiV1011000, - direction: Direction.SystemToBridge as XcmDirection, - destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', - assetIds: [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location - ], - amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, - xcmVersion: 4, - specName: 'asset-hub-rococo', - registry, - }; - const refTime = '1000'; - const proofSize = '2000'; - const paysWithFeeDest = '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; - const isForeignAssetsTransfer = true; + describe('RemoteReserve', () => { + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Rococo to Ethereum Sepolia', async () => { + const registry = new Registry('asset-hub-rococo', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + assetIds: [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, // Snowbridge Sepolia WETH location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, // location destChainId, + xcmVersion: 4, + specName: 'asset-hub-rococo', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = + '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}'; + const isForeignAssetsTransfer = true; - const ext = await transferAssetsUsingTypeAndThen(baseArgs, { - weightLimit: { - refTime, - proofSize, - }, - paysWithFeeDest, - isLiquidTokenTransfer, - isForeignAssetsTransfer, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - }); + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); - expect(ext.toHex()).toBe( - '0x0d02041f0d04020109079edaa8020404020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80304010100a10f04020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140304010100a10f04040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', - ); - }); - it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { - const registry = new Registry('asset-hub-westend', {}); - const isLiquidTokenTransfer = false; - const baseArgs: XcmBaseArgs = { - api: adjustedMockSystemApiV1011000, - direction: Direction.SystemToBridge as XcmDirection, - destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', - assetIds: [ - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location - ], - amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, - xcmVersion: 4, - specName: 'asset-hub-westend', - registry, - }; - const refTime = '1000'; - const proofSize = '2000'; - const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; - const isForeignAssetsTransfer = true; + expect(ext.toHex()).toBe( + '0x0d02041f0d04020109079edaa8020404020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80304010100a10f04020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140304010100a10f04040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + ); + }); + it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { + const registry = new Registry('asset-hub-westend', {}); + const isLiquidTokenTransfer = false; + const baseArgs: XcmBaseArgs = { + api: adjustedMockSystemApiV1011000, + direction: Direction.SystemToBridge as XcmDirection, + destAddr: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds: [ + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location + ], + amounts: ['1000000000000'], + destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + xcmVersion: 4, + specName: 'asset-hub-westend', + registry, + }; + const refTime = '1000'; + const proofSize = '2000'; + const paysWithFeeDest = '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}'; + const isForeignAssetsTransfer = true; - const ext = await transferAssetsUsingTypeAndThen(baseArgs, { - weightLimit: { - refTime, - proofSize, - }, - paysWithFeeDest, - isLiquidTokenTransfer, - isForeignAssetsTransfer, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - }); + const ext = await transferAssetsUsingTypeAndThen(baseArgs, { + weightLimit: { + refTime, + proofSize, + }, + paysWithFeeDest, + isLiquidTokenTransfer, + isForeignAssetsTransfer, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, + }); - expect(ext.toHex()).toBe( - '0x5d01041f0d040201090204040201090200070010a5d4e80304010100a10f04020109020304010100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', - ); - }); - }); + expect(ext.toHex()).toBe( + '0x5d01041f0d040201090204040201090200070010a5d4e80304010100a10f04020109020304010100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + ); + }); + }); }); }); }); diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 5f13bb8b..b378ffbe 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -933,19 +933,6 @@ export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { } }; -/** - * Checks to ensure that all assets are locations for SystemToBridge transactions - * - * @param assetIds - */ -// export const checkAssetLocationsAreValidGlobalConsensusLocations = (assetIds: string[]) => { -// if (!assetDestIsBridge(assetIds)) { -// throw new BaseError( -// `SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received ${assetIds.toString()}`, -// BaseErrorsEnum.InvalidAsset, -// ); -// } -// }; /** * Checks to ensure that required inputs are provided for SystemToBridge transactions * @@ -1226,7 +1213,6 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); getGlobalConsensusSystemName(destChainId); - // checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); checkSystemToBridgeInputs( paysWithFeeDest, assetTransferType, diff --git a/src/testHelpers/adjustedMockSystemApiV1011000.ts b/src/testHelpers/adjustedMockSystemApiV1011000.ts index 6c9ae840..72e64671 100644 --- a/src/testHelpers/adjustedMockSystemApiV1011000.ts +++ b/src/testHelpers/adjustedMockSystemApiV1011000.ts @@ -465,7 +465,6 @@ export const adjustedMockSystemApiV1011000 = { ], }, }, - , ]; }, }, From 961ad436f1cf66a69ecf4c6b7bcd08842e50355f Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 10 May 2024 09:29:35 -0400 Subject: [PATCH 16/44] update default xcm on dest to account for assets length --- .../transferAssetsUsingTypeAndThen.spec.ts | 2 +- .../polkadotXcm/transferAssetsUsingTypeAndThen.ts | 2 +- .../util/createDefaultXcmOnDestination.spec.ts | 13 ++++++++++--- .../util/createDefaultXcmOnDestination.ts | 10 +++++++--- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts index 0644b4ea..75f8fb00 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts @@ -86,7 +86,7 @@ describe('transferAssetsUsingTypeAndThen', () => { }); expect(ext.toHex()).toBe( - '0xb102041f0d03020109079edaa802030800020209079edaa8020300c3d088842dcf02c13699f936bb83dfbbc6f721ab000b00204aa9d10100020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010204000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', + '0xb102041f0d03020109079edaa802030800020209079edaa8020300c3d088842dcf02c13699f936bb83dfbbc6f721ab000b00204aa9d10100020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b1400070010a5d4e80303010100a10f0300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140303010100a10f03040d010208000103006e733286c3dc52c67b8dadfdd634ed9c3fb05b5b01a10f411f', ); }); it('Should correctly construct a transferAssetsUsingTypeAndThen tx from AssetHub Westend to Polkadot', async () => { diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index 0d149b22..3985f5bc 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -71,7 +71,7 @@ export const transferAssetsUsingTypeAndThen = async ( ); const remoteFeesId = createXcmVersionedAssetId(paysWithFeeDest, xcmVersion); - const defaultDestXcm = createDefaultXcmOnDestination(beneficiary, xcmVersion); + const defaultDestXcm = createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion); const customXcmOnDest = customXcmOnDestStr ? (JSON.parse(customXcmOnDestStr) as AnyJson) : defaultDestXcm; return ext(dest, assets, assetTransferType, remoteFeesId, feeAssetTransferType, customXcmOnDest, weightLimitValue); diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts index c8852cb2..b34e70fb 100644 --- a/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts +++ b/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts @@ -5,6 +5,9 @@ import { createDefaultXcmOnDestination } from './createDefaultXcmOnDestination'; describe('createDefaultXcmOnDestination', () => { it('Should correctly construct the default XCM message for V3', () => { + const assetIds = [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + ]; const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; const beneficiary = { @@ -31,9 +34,13 @@ describe('createDefaultXcmOnDestination', () => { ], }; - expect(createDefaultXcmOnDestination(beneficiary, xcmVersion)).toEqual(expected); + expect(createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion)).toEqual(expected); }); it('Should correctly construct the default XCM message for V4', () => { + const assetIds = [ + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xc3d088842dcf02c13699f936bb83dfbbc6f721ab"}}]}}`, + ]; const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; const beneficiary = { @@ -51,7 +58,7 @@ describe('createDefaultXcmOnDestination', () => { depositAsset: { assets: { Wild: { - AllCounted: 1, + AllCounted: 2, }, }, beneficiary, @@ -60,6 +67,6 @@ describe('createDefaultXcmOnDestination', () => { ], }; - expect(createDefaultXcmOnDestination(beneficiary, xcmVersion)).toEqual(expected); + expect(createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion)).toEqual(expected); }); }); diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts index 5ca0df74..2766332c 100644 --- a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts +++ b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts @@ -4,7 +4,11 @@ import type { AnyJson } from '@polkadot/types/types'; import { UnionXcmMultiLocation } from '../types'; -export const createDefaultXcmOnDestination = (beneficiary: UnionXcmMultiLocation, xcmVersion: number): AnyJson => { +export const createDefaultXcmOnDestination = ( + assets: string[], + beneficiary: UnionXcmMultiLocation, + xcmVersion: number, +): AnyJson => { const defaultDestXcm: AnyJson = xcmVersion === 3 ? { @@ -13,7 +17,7 @@ export const createDefaultXcmOnDestination = (beneficiary: UnionXcmMultiLocation depositAsset: { assets: { Wild: { - AllCounted: 1, + AllCounted: assets.length, }, }, beneficiary, @@ -27,7 +31,7 @@ export const createDefaultXcmOnDestination = (beneficiary: UnionXcmMultiLocation depositAsset: { assets: { Wild: { - AllCounted: 1, + AllCounted: assets.length, }, }, beneficiary, From d067eff4e41d0b09ae13261a644bb4c366ad682f Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 14 May 2024 23:28:43 -0400 Subject: [PATCH 17/44] update examples update resolveCall to use assetTransferType --- .../bridgeTransfers/assetHubKSMToPolkadot.ts | 47 +++++++++++++++++++ .../bridgeTransfers/assetHubDOTToKusama.ts | 47 +++++++++++++++++++ .../bridgeTransfers/assetHubROCToWestend.ts | 7 +-- .../assetHubWETHToEthereumSepolia.ts | 6 --- src/AssetTransferApi.ts | 7 +-- src/createXcmTypes/SystemToBridge.ts | 41 ++++++++++++++-- .../util/assetDestIsBridge.spec.ts | 28 ----------- src/createXcmTypes/util/assetDestIsBridge.ts | 20 -------- .../util/createDefaultXcmOnDestination.ts | 3 -- src/errors/checkXcmTxInputs.ts | 26 +++++----- 10 files changed, 149 insertions(+), 83 deletions(-) create mode 100644 examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts create mode 100644 examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts delete mode 100644 src/createXcmTypes/util/assetDestIsBridge.spec.ts delete mode 100644 src/createXcmTypes/util/assetDestIsBridge.ts diff --git a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts new file mode 100644 index 00000000..ebadf5e0 --- /dev/null +++ b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts @@ -0,0 +1,47 @@ +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send KSM (asset with location `{"parents":"1","interior":{"Here":""}}`) + * from a Kusama Asset Hub (System Parachain) account + * to a Polkadot Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that + * the tx will allow unlimited weight to be used for fees. + * + * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://kusama-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [`{"parents":"1","interior":{"Here":""}}`], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + }, + ); + + 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/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts b/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts new file mode 100644 index 00000000..3b16a249 --- /dev/null +++ b/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts @@ -0,0 +1,47 @@ +/** + * 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 `polkadotXcm` pallet `transferAssets` call to send DOT (asset with location `{"parents":"1","interior":{"Here":""}}`) + * from a Polkadot Asset Hub (System Parachain) account + * to a Kusama Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that + * the tx will allow unlimited weight to be used for fees. + * + * 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://polkadot-asset-hub-rpc.polkadot.io'); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`, + '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + [`DOT`], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + }, + ); + + 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/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 68685940..3a097dd9 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (foreign asset with location `{"parents":"1","interior":{"Here":""}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) * from a Rococo Asset Hub (System Parachain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. @@ -29,11 +29,6 @@ const main = async () => { { format: 'call', xcmVersion: 4, - paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts index 6bf5a325..bcfd4baa 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts @@ -35,12 +35,6 @@ const main = async () => { { format: 'call', xcmVersion: 4, - paysWithFeeDest: - '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index ea3549a7..e5458d90 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -1141,12 +1141,9 @@ export class AssetTransferApi { txMethod = 'transferMultiassets'; } } else if (api.tx[xcmPallet]) { - if ( - (api.tx[xcmPallet].transferAssetsUsingTypeAndThen && xcmDirection === Direction.SystemToBridge) || - baseOpts.assetTransferType - ) { + if (api.tx[xcmPallet].transferAssetsUsingTypeAndThen && baseOpts.assetTransferType) { txMethod = 'transferAssetsUsingTypeAndThen'; - } else if (xcmDirection != Direction.SystemToBridge && api.tx[xcmPallet].transferAssets) { + } else if (api.tx[xcmPallet].transferAssets) { txMethod = 'transferAssets'; } else if (assetCallType === AssetCallType.Reserve) { txMethod = 'limitedReserveTransferAssets'; diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index 7803b226..20945b7d 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -5,6 +5,7 @@ import { isEthereumAddress } from '@polkadot/util-crypto'; import { BaseError, BaseErrorsEnum } from '../errors'; import type { Registry } from '../registry'; +import { RequireOnlyOne } from '../types'; import { getFeeAssetItemIndex } from '../util/getFeeAssetItemIndex'; import { normalizeArrToStr } from '../util/normalizeArrToStr'; import { resolveMultiLocation } from '../util/resolveMultiLocation'; @@ -18,11 +19,16 @@ import { FungibleStrMultiAsset, ICreateXcmType, UnionXcmMultiAssets, + UnionXcmMultiLocation, XcmDestBeneficiary, + XcmV2Junctions, + XcmV3Junctions, XcmV4JunctionDestBeneficiary, + XcmV4Junctions, XcmWeight, } from './types'; import { dedupeAssets } from './util/dedupeAssets'; +import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; import { getAssetId } from './util/getAssetId'; import { getGlobalConsensusDestFromLocation } from './util/getGlobalConsensusDestFromLocation'; import { isRelayNativeAsset } from './util/isRelayNativeAsset'; @@ -116,7 +122,7 @@ export const SystemToBridge: ICreateXcmType = { assets: string[], opts: CreateAssetsOpts, ): Promise => { - const { registry, isForeignAssetsTransfer, api } = opts; + const { registry, isForeignAssetsTransfer, isLiquidTokenTransfer, api } = opts; const sortedAndDedupedMultiAssets = await createSystemToBridgeAssets( api, @@ -126,6 +132,7 @@ export const SystemToBridge: ICreateXcmType = { registry, xcmVersion, isForeignAssetsTransfer, + isLiquidTokenTransfer, ); if (xcmVersion === 3) { @@ -160,7 +167,16 @@ export const SystemToBridge: ICreateXcmType = { * @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; + const { + registry, + paysWithFeeDest, + specName, + assetIds, + amounts, + xcmVersion, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + } = opts; if (xcmVersion && xcmVersion >= 3 && specName && amounts && assetIds && paysWithFeeDest) { const multiAssets = await createSystemToBridgeAssets( api, @@ -170,6 +186,7 @@ export const SystemToBridge: ICreateXcmType = { registry, xcmVersion, isForeignAssetsTransfer, + isLiquidTokenTransfer, ); const systemChainId = registry.lookupChainIdBySpecName(specName); @@ -217,9 +234,11 @@ export const createSystemToBridgeAssets = async ( registry: Registry, xcmVersion: number, isForeignAssetsTransfer: boolean, + isLiquidTokenTransfer: boolean, ): Promise => { let multiAssets: FungibleStrAssetType[] = []; let multiAsset: FungibleStrAssetType; + const palletId = fetchPalletInstanceId(api, isLiquidTokenTransfer, isForeignAssetsTransfer); const systemChainId = registry.lookupChainIdBySpecName(specName); for (let i = 0; i < assets.length; i++) { @@ -234,7 +253,23 @@ export const createSystemToBridgeAssets = async ( assetId = await getAssetId(api, registry, assetId, specName, xcmVersion, isForeignAssetsTransfer); } - const assetLocation = resolveMultiLocation(assetId, xcmVersion); + let assetLocation: UnionXcmMultiLocation; + + if (isForeignAssetsTransfer) { + assetLocation = resolveMultiLocation(assetId, xcmVersion); + } else { + const parents = isRelayNative ? 1 : 0; + const interior: RequireOnlyOne = isRelayNative + ? { Here: '' } + : { + X2: [{ PalletInstance: palletId }, { GeneralIndex: assetId }], + }; + + assetLocation = { + parents, + interior, + }; + } if (xcmVersion < 4) { multiAsset = { diff --git a/src/createXcmTypes/util/assetDestIsBridge.spec.ts b/src/createXcmTypes/util/assetDestIsBridge.spec.ts deleted file mode 100644 index b91dcdb7..00000000 --- a/src/createXcmTypes/util/assetDestIsBridge.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import { assetDestIsBridge } from './assetDestIsBridge'; - -describe('assetDestIsBridge', () => { - it('Should correctly return false for a assetId of 1984', () => { - const result = assetDestIsBridge(['1984']); - - expect(result).toEqual(false); - }); - it('Should correctly return false for a non global consensus assetId location', () => { - const result = assetDestIsBridge([`{"parents":"1","interior":"Here"}}`]); - - expect(result).toEqual(false); - }); - it('Should correctly return true for an Ethereum assetId location containing a global consenus junction', () => { - const result = assetDestIsBridge([ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - ]); - - expect(result).toEqual(true); - }); - it('Should correctly return true for a Kusama assetId location containing a global consensus junction', () => { - const result = assetDestIsBridge([`{"parents":"1","interior":{"x1":{"GlobalConsensus":"Kusama"}}}`]); - - expect(result).toEqual(true); - }); -}); diff --git a/src/createXcmTypes/util/assetDestIsBridge.ts b/src/createXcmTypes/util/assetDestIsBridge.ts deleted file mode 100644 index 709ae417..00000000 --- a/src/createXcmTypes/util/assetDestIsBridge.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -/** - * Determines if assetId locations are valid bridge transaction asset locations - * @param assetIds - * @returns boolean - */ -export const assetDestIsBridge = (assetIds: string[]): boolean => { - if (assetIds.length === 0) { - return false; - } - - for (const assetId of assetIds) { - if (!assetId.toLowerCase().includes('globalconsensus')) { - return false; - } - } - - return true; -}; diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts index 2766332c..00503d68 100644 --- a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts +++ b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts @@ -42,6 +42,3 @@ export const createDefaultXcmOnDestination = ( return defaultDestXcm; }; - -// TODO: do we need to include BuyExecution? -// BuyExecution { fees: remote_fees, weight_limit: t.args.weight_limit.clone() }, diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index b378ffbe..3b73e6e8 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -6,7 +6,6 @@ import { isEthereumAddress } from '@polkadot/util-crypto'; import { MAX_ASSETS_FOR_TRANSFER, RELAY_CHAIN_IDS } from '../consts'; import { XcmPalletName } from '../createXcmCalls/util/establishXcmPallet'; -// import { assetDestIsBridge } from '../createXcmTypes/util/assetDestIsBridge'; import { foreignAssetMultiLocationIsInCacheOrRegistry } from '../createXcmTypes/util/foreignAssetMultiLocationIsInCacheOrRegistry'; import { foreignAssetsMultiLocationExists } from '../createXcmTypes/util/foreignAssetsMultiLocationExists'; import { getGlobalConsensusSystemName } from '../createXcmTypes/util/getGlobalConsensusSystemName'; @@ -949,25 +948,28 @@ export const checkSystemToBridgeInputs = ( feesTransferType: string | undefined, remoteReserveFeesTransferTypeLocation: string | undefined, ) => { - if (!paysWithFeeDest) { - throw new BaseError('paysWithFeeDest input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - } - if (!assetTransferType) { - throw new BaseError('assetTransferType input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - } - if (assetTransferType === 'RemoteReserve' && !remoteReserveAssetTransferTypeLocation) { + if (assetTransferType && !paysWithFeeDest) { throw new BaseError( - 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', + 'paysWithFeeDest input is required for bridge transactions when assetTransferType is provided', BaseErrorsEnum.InvalidInput, ); } - if (!feesTransferType) { + // if (!assetTransferType) { + // throw new BaseError('assetTransferType input is required for bridge transactions', BaseErrorsEnum.InvalidInput); + // } + if (assetTransferType && assetTransferType === 'RemoteReserve' && !remoteReserveAssetTransferTypeLocation) { throw new BaseError( - 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions', + 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', BaseErrorsEnum.InvalidInput, ); } - if (feesTransferType === 'RemoteReserve' && !remoteReserveFeesTransferTypeLocation) { + // if (!feesTransferType) { + // throw new BaseError( + // 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions', + // BaseErrorsEnum.InvalidInput, + // ); + // } + if (feesTransferType && feesTransferType === 'RemoteReserve' && !remoteReserveFeesTransferTypeLocation) { throw new BaseError( 'remoteReserveFeeAssetTransferTypeLocation input is required for bridge transactions when fee asset transfer type is RemoteReserve', BaseErrorsEnum.InvalidInput, From cda636ee96c25bf9be88303577d42f7fd51b94bf Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 00:21:11 -0400 Subject: [PATCH 18/44] add tests for checkSystemToBridgeInputs --- .../reserve/assetHubMUSEToBifrost.ts | 59 +++++++++++++++ src/errors/checkXcmTxInputs.spec.ts | 72 +++++++++++++++---- src/errors/checkXcmTxInputs.ts | 9 --- 3 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts new file mode 100644 index 00000000..1c73c283 --- /dev/null +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts @@ -0,0 +1,59 @@ +/** + * 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 `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send MUSE (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`) + * from a Rococo Asset Hub (System Parachain) account + * to a Bifrost Polkadot (Parachain) testnet account, where the `xcmVersion` is set to 4, and there is no + * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * We provide a `paysWithFeeDest` asset location for MUSE which will be used to pay for fees on the destination chain. + * We also provide a value of `RemoteReserve` for the `assetTransferType` and `feeTransferType` options declaring a custom reserve location for both + * the `remoteReserveAssetTransferTypeLocation` and `remoteReserveFeesTransferTypeLocation` options. + * + * 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 { api, specName, chainName, safeXcmVersion } = await constructApiPromise( + 'wss://rococo-asset-hub-rpc.polkadot.io', + ); + const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { + chainName, + }); + + let callInfo: TxResult<'call'>; + try { + callInfo = await assetApi.createTransferTransaction( + `2030`, + '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', + [`{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`], + ['1000000000000'], + { + format: 'call', + xcmVersion: 4, + paysWithFeeDest: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', + }, + ); + + 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/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index a18c0aa9..6e473b38 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -12,7 +12,6 @@ import { checkAssetIdsAreOfSameAssetIdType, checkAssetIdsHaveNoDuplicates, checkAssetIdsLengthIsValid, - // checkAssetLocationsAreValidGlobalConsensusLocations, checkAssetsAmountMatch, checkIfNativeRelayChainAssetPresentInMultiAssetIdList, checkLiquidTokenTransferDirectionValidity, @@ -22,6 +21,7 @@ import { checkParaPrimaryAssetAssetIdsLength, checkRelayAmountsLength, checkRelayAssetIdLength, + checkSystemToBridgeInputs, checkXcmVersionIsValidForPaysWithFeeDest, checkXcmVersionIsValidForSystemToBridge, CheckXTokensPalletOriginIsNonForeignAssetTx, @@ -759,20 +759,66 @@ describe('checkXcmVersionIsValidForSystemToBridge', () => { }); }); -// describe('checkAssetLocationsAreValidGlobalConsensusLocations', () => { -// it('Should correctly throw an error when asset locations are found without a global consens junction', () => { -// const assetIds = [ -// `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, -// `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`, -// ]; +describe('checkSystemToBridgeInputs', () => { + it('Should correctly error when no paysWithFeeDest value is provided but assetTransferType is', () => { + const paysWithFeeDest = undefined; + const assetTransferType = 'RemoteReserve'; + const remoteReserveAssetTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; + const feesTransferType = 'RemoteReserve'; + const remoteReserveFeesTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; -// const err = () => checkAssetLocationsAreValidGlobalConsensusLocations(assetIds); + const err = () => + checkSystemToBridgeInputs( + paysWithFeeDest, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + ); + + expect(err).toThrow('paysWithFeeDest input is required for bridge transactions when assetTransferType is provided'); + }); + it('Should correctly throw an error when assetTransferType is RemoteReserve and no remoteReserveAssetTransferTypeLocation value is provided', () => { + const paysWithFeeDest = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; + const assetTransferType = 'RemoteReserve'; + const remoteReserveAssetTransferTypeLocation = undefined; + const feesTransferType = 'RemoteReserve'; + const remoteReserveFeesTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; + + const err = () => + checkSystemToBridgeInputs( + paysWithFeeDest, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + ); + + expect(err).toThrow( + 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', + ); + }); + it('Should correctly throw an error when feesTransferType is RemoteReserve and no remoteReserveFeesTransferTypeLocation value is provided', () => { + const paysWithFeeDest = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; + const assetTransferType = 'RemoteReserve'; + const remoteReserveAssetTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; + const feesTransferType = 'RemoteReserve'; + const remoteReserveFeesTransferTypeLocation = undefined; + + const err = () => + checkSystemToBridgeInputs( + paysWithFeeDest, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + ); -// expect(err).toThrow( -// 'SystemToBridge transactions require that all asset locations contain valid GlobalConsenus junctions. Received {"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}},{"parents":"1","interior":{"X1":{"Parachain":"1836"}}', -// ); -// }); -// }); + expect(err).toThrow( + 'remoteReserveFeeAssetTransferTypeLocation input is required for bridge transactions when fee asset transfer type is RemoteReserve', + ); + }); +}); describe('checkParaAssets', () => { it('Should correctly resolve when a valid symbol assetId is provided', async () => { diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index 3b73e6e8..e0b2b718 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -954,21 +954,12 @@ export const checkSystemToBridgeInputs = ( BaseErrorsEnum.InvalidInput, ); } - // if (!assetTransferType) { - // throw new BaseError('assetTransferType input is required for bridge transactions', BaseErrorsEnum.InvalidInput); - // } if (assetTransferType && assetTransferType === 'RemoteReserve' && !remoteReserveAssetTransferTypeLocation) { throw new BaseError( 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions when asset transfer type is RemoteReserve', BaseErrorsEnum.InvalidInput, ); } - // if (!feesTransferType) { - // throw new BaseError( - // 'remoteReserveAssetTransferTypeLocation input is required for bridge transactions', - // BaseErrorsEnum.InvalidInput, - // ); - // } if (feesTransferType && feesTransferType === 'RemoteReserve' && !remoteReserveFeesTransferTypeLocation) { throw new BaseError( 'remoteReserveFeeAssetTransferTypeLocation input is required for bridge transactions when fee asset transfer type is RemoteReserve', From 95489eecf87d86e14bdc4e479677b80d8ca508f1 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 01:07:44 -0400 Subject: [PATCH 19/44] update system to bridge integration tests update resolveAssetTransferType and createXcmVersionedAssetId --- src/AssetTransferApi.ts | 2 +- .../transferAssetsUsingTypeAndThen.ts | 10 +-- .../util/createXcmVersionedAssetId.ts | 8 +- .../util/resolveAssetTransferType.ts | 5 +- src/errors/checkXcmTxInputs.spec.ts | 13 ++++ .../AssetsTransferApi.spec.ts | 78 ++----------------- 6 files changed, 31 insertions(+), 85 deletions(-) diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index e5458d90..47a16d7e 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -723,7 +723,7 @@ export class AssetTransferApi { if (xcmDirection === Direction.ParaToRelay) { return AssetCallType.Reserve; } - // system to bridge -> remote reserve + // system to bridge -> reserve if (xcmDirection === Direction.SystemToBridge) { return AssetCallType.Reserve; } diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index 3985f5bc..a80cce78 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -9,7 +9,6 @@ import { createDefaultXcmOnDestination } from '../../createXcmTypes/util/createD import { createXcmOnDestBeneficiary } from '../../createXcmTypes/util/createXcmOnDestBeneficiary'; import { createXcmVersionedAssetId } from '../../createXcmTypes/util/createXcmVersionedAssetId'; import { resolveAssetTransferType } from '../../createXcmTypes/util/resolveAssetTransferType'; -import { BaseError, BaseErrorsEnum } from '../../errors'; import { normalizeArrToStr } from '../../util/normalizeArrToStr'; import type { CreateXcmCallOpts } from '../types'; import { establishXcmPallet } from '../util/establishXcmPallet'; @@ -37,13 +36,6 @@ export const transferAssetsUsingTypeAndThen = async ( customXcmOnDest: customXcmOnDestStr, } = opts; - if (!paysWithFeeDest || !assetTransferTypeStr || !feesTransferTypeStr) { - throw new BaseError( - 'transferAssetsUsingTypeAndThen: required bridge inputs not found', - BaseErrorsEnum.InvalidInput, - ); - } - const pallet = establishXcmPallet(api); const ext = api.tx[pallet].transferAssetsUsingTypeAndThen; const typeCreator = createXcmTypes[direction]; @@ -60,7 +52,7 @@ export const transferAssetsUsingTypeAndThen = async ( weightLimit, }); const assetTransferType = resolveAssetTransferType( - feesTransferTypeStr, + assetTransferTypeStr, xcmVersion, remoteReserveAssetTransferTypeLocation, ); diff --git a/src/createXcmTypes/util/createXcmVersionedAssetId.ts b/src/createXcmTypes/util/createXcmVersionedAssetId.ts index cd8c25c3..ce138b4c 100644 --- a/src/createXcmTypes/util/createXcmVersionedAssetId.ts +++ b/src/createXcmTypes/util/createXcmVersionedAssetId.ts @@ -4,7 +4,13 @@ import { BaseError, BaseErrorsEnum } from '../../errors'; import { resolveMultiLocation } from '../../util/resolveMultiLocation'; import { UnionXcmMultiLocation, XcmVersionedAssetId } from '../types'; -export const createXcmVersionedAssetId = (destFeesAssetId: string, xcmVersion: number): XcmVersionedAssetId => { +export const createXcmVersionedAssetId = ( + destFeesAssetId: string | undefined, + xcmVersion: number, +): XcmVersionedAssetId => { + if (!destFeesAssetId) { + throw new BaseError('resolveAssetTransferType: destFeesAssetId not found', BaseErrorsEnum.InvalidInput); + } if (xcmVersion < 3) { throw new BaseError('XcmVersion must be greater than 2', BaseErrorsEnum.InvalidXcmVersion); } diff --git a/src/createXcmTypes/util/resolveAssetTransferType.ts b/src/createXcmTypes/util/resolveAssetTransferType.ts index fc2504cc..9be6abe8 100644 --- a/src/createXcmTypes/util/resolveAssetTransferType.ts +++ b/src/createXcmTypes/util/resolveAssetTransferType.ts @@ -6,10 +6,13 @@ import { resolveMultiLocation } from '../../util/resolveMultiLocation'; import { UnionXcmMultiLocation } from '../types'; export const resolveAssetTransferType = ( - assetTransferType: string, + assetTransferType: string | undefined, xcmVersion: number, remoteTransferLocationStr?: string, ): AssetTransferType => { + if (!assetTransferType) { + throw new BaseError('resolveAssetTransferType: assetTransferType not found', BaseErrorsEnum.InvalidInput); + } if (xcmVersion < 3) { throw new BaseError('Bridge txs require XCM version 3 or higher', BaseErrorsEnum.InvalidXcmVersion); } diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index 6e473b38..61346b6d 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -19,6 +19,7 @@ import { checkParaAssets, checkParaPrimaryAssetAmountsLength, checkParaPrimaryAssetAssetIdsLength, + checkPaysWithFeeDestAssetIdIsInAssets, checkRelayAmountsLength, checkRelayAssetIdLength, checkSystemToBridgeInputs, @@ -819,6 +820,18 @@ describe('checkSystemToBridgeInputs', () => { ); }); }); +describe('checkPaysWithFeeDestAssetIdIsInAssets', () => { + it('Should correctly error when a paysWithFeeDestAsset is not found in the assetIds list', () => { + const assetIds = [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`]; + const paysWithFeeDest = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; + + const err = () => checkPaysWithFeeDestAssetIdIsInAssets(assetIds, paysWithFeeDest); + + expect(err).toThrow( + 'paysWithFeeDest asset must be present in assets to be transferred. Did not find {"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}} in {"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', + ); + }); +}); describe('checkParaAssets', () => { it('Should correctly resolve when a valid symbol assetId is provided', async () => { diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 09d911de..e1f02caa 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -247,12 +247,6 @@ describe('AssetTransferApi Integration Tests', () => { weightLimit: opts.weightLimit, xcmVersion, sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', - paysWithFeeDest: opts.paysWithFeeDest, - assetTransferType: opts.assetTransferType, - remoteReserveAssetTransferTypeLocation: opts.remoteReserveAssetTransferTypeLocation, - feesTransferType: opts.remoteReserveFeesTransferTypeLocation, - remoteReserveFeesTransferTypeLocation: opts.remoteReserveFeesTransferTypeLocation, - customXcmOnDest: opts.customXcmOnDest, }, ); }; @@ -274,16 +268,10 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: - '{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx).toEqual( - '0x1f0d03020109079edaa802030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee000300020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140003040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x1f0b03020109079edaa8020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee0000000001a10f411f', ); }); @@ -301,15 +289,10 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx.toHex()).toEqual( - '0x29011f0d0302010902030400020109020002286bee000300020109020003040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x05011f0b03020109020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { @@ -326,11 +309,6 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx.toRawType()).toEqual('Extrinsic'); @@ -352,15 +330,10 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx).toEqual( - '0x1f0d04020109020404020109020002286bee0004020109020004040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x1f0b04020109020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', ); }); it('Should correctly build a `transferAssets` payload for V4', async () => { @@ -377,15 +350,10 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx.toHex()).toEqual( - '0x21011f0d04020109050404020109050002286bee0004020109050004040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x01011f0b04020109050400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { @@ -402,11 +370,6 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: '{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); expect(res.tx.toRawType()).toEqual('Extrinsic'); @@ -427,40 +390,9 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, - paysWithFeeDest: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}`, }, ); - }).rejects.toThrow('paysWithFeeDest requires XCM version 3 or greater'); - }); - it('Should correctly error when a paysWithFeeDest is provided that does not exist in provided assetIds', async () => { - await expect(async () => { - await bridgeBaseSystemCreateTx( - systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, - [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], - 'submittable', - 4, - { - isLiquidTokenTransfer: false, - isForeignAssetsTransfer: true, - weightLimit: { - refTime: '1000', - proofSize: '2000', - }, - paysWithFeeDest: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: `{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}`, - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: `{"parents":"1","interior":{"X1":[{"Parachain":"1000"}]}}`, - }, - ); - }).rejects.toThrow( - 'paysWithFeeDest asset must be present in assets to be transferred. Did not find {"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}} in {"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}', - ); + }).rejects.toThrow('SystemToBridge transactions require XCM version 3 or greater'); }); }); describe('SystemToPara', () => { From 2f15edc910a4daa9e09c800fde8364b0ce6ca47e Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 01:24:56 -0400 Subject: [PATCH 20/44] update chainDestIsBridge check --- src/createXcmTypes/util/chainDestIsBridge.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/createXcmTypes/util/chainDestIsBridge.ts b/src/createXcmTypes/util/chainDestIsBridge.ts index d5592620..8d0d56f0 100644 --- a/src/createXcmTypes/util/chainDestIsBridge.ts +++ b/src/createXcmTypes/util/chainDestIsBridge.ts @@ -1,10 +1,18 @@ // Copyright 2024 Parity Technologies (UK) Ltd. +import { UnionXcmMultiLocation } from '../types'; + /** * Determines if the dest chain is a Global Consensus origin based on the value of its dest location * @param destLocation * @returns boolean */ export const chainDestIsBridge = (destLocation: string): boolean => { - return destLocation.toLowerCase().includes('globalconsensus'); + const location = JSON.parse(destLocation) as UnionXcmMultiLocation; + + if (location.interior.X1 && JSON.stringify(location.interior.X1).toLowerCase().includes('globalconsensus')) { + return true; + } + + return false; }; From 658211524e1ae33d5626c3d0ed3aebbb5b4ad762 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 01:34:44 -0400 Subject: [PATCH 21/44] add interior check to chainDestIsBridge --- src/createXcmTypes/util/chainDestIsBridge.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/createXcmTypes/util/chainDestIsBridge.ts b/src/createXcmTypes/util/chainDestIsBridge.ts index 8d0d56f0..abbece5b 100644 --- a/src/createXcmTypes/util/chainDestIsBridge.ts +++ b/src/createXcmTypes/util/chainDestIsBridge.ts @@ -10,7 +10,11 @@ import { UnionXcmMultiLocation } from '../types'; export const chainDestIsBridge = (destLocation: string): boolean => { const location = JSON.parse(destLocation) as UnionXcmMultiLocation; - if (location.interior.X1 && JSON.stringify(location.interior.X1).toLowerCase().includes('globalconsensus')) { + if ( + location.interior && + location.interior.X1 && + JSON.stringify(location.interior.X1).toLowerCase().includes('globalconsensus') + ) { return true; } From b08e7a58e4368f92ebf690b13d3363874418e884 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 02:03:50 -0400 Subject: [PATCH 22/44] update README --- README.md | 26 ++++++++++++++++++++++++++ src/types.ts | 14 +++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5a3311ae..5515aa31 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,32 @@ interface TransferArgsOpts { * Default is false. */ transferLiquidToken?: boolean; + /** + * The XCM `TransferType` used to transfer assets. + * Provided to construct `transferAssetsUsingTypeAndThen` transactions. + */ + assetTransferType?: string; + /** + * The RemoteReserve location for an XCM transfer. + * Should be provided when specifying an `assetTransferType` of `RemoteReserve`. + */ + remoteReserveAssetTransferTypeLocation?: string; + /** + * The XCM `TransferType` used to pay fees for an XCM transfer. + * Provided to construct `transferAssetsUsingTypeAndThen` transactions. + */ + feesTransferType?: string; + /** + * The RemoteReserve location for an XCM transfers' fees. + * Should be provided when specfying a `feesTransferType` of RemoteReserve. + */ + remoteReserveFeesTransferTypeLocation?: string; + /** + * Optional custom XCM message to be executed on destination chain. + * Should be provided if a custom xcm message is needed after transfering assets. + * Defaults to `Xcm(vec![DepositAsset { assets: Wild(AllCounted(assets.len())), beneficiary }])` + */ + customXcmOnDest?: string; } ``` diff --git a/src/types.ts b/src/types.ts index a2334937..a2873954 100644 --- a/src/types.ts +++ b/src/types.ts @@ -282,25 +282,29 @@ export interface TransferArgsOpts { */ transferLiquidToken?: boolean; /** - * The XCM `TransferType` used to transfer the `assets`. + * The XCM `TransferType` used to transfer assets. + * Provided to construct `transferAssetsUsingTypeAndThen` transactions. */ assetTransferType?: string; /** * The RemoteReserve location for an XCM transfer. - * Provided when speicifying an `assetTransferType` of RemoteReserve. + * Should be provided when specifying an `assetTransferType` of `RemoteReserve`. */ remoteReserveAssetTransferTypeLocation?: string; /** * The XCM `TransferType` used to pay fees for an XCM transfer. + * Provided to construct `transferAssetsUsingTypeAndThen` transactions. */ feesTransferType?: string; /** - * The RemoteReserve location for an XCM transfers fees. - * Provided when speicifying an `feesTransferType` of RemoteReserve. + * The RemoteReserve location for an XCM transfers' fees. + * Should be provided when specfying a `feesTransferType` of RemoteReserve. */ remoteReserveFeesTransferTypeLocation?: string; /** - * Optional custom XCM message to be executed on destination chain . + * Optional custom XCM message to be executed on destination chain. + * Should be provided if a custom xcm message is needed after transfering assets. + * Defaults to `Xcm(vec![DepositAsset { assets: Wild(AllCounted(assets.len())), beneficiary }])` */ customXcmOnDest?: string; } From 63d0931ece9602b65b6be5497f2f211558e10e9c Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 12:03:34 -0400 Subject: [PATCH 23/44] update global consensus destination location creation update tests --- README.md | 2 +- .../bridgeTransfers/assetHubKSMToPolkadot.ts | 2 +- src/consts.ts | 10 +++ .../transferAssetsUsingTypeAndThen.spec.ts | 4 +- src/createXcmTypes/SystemToBridge.spec.ts | 5 +- src/createXcmTypes/SystemToBridge.ts | 65 +++++++++++++------ ...getGlobalConsensusDestFromLocation.spec.ts | 59 +++++++++++------ .../getGlobalConsensusDestFromLocation.ts | 49 +++++++------- .../AssetsTransferApi.spec.ts | 6 +- 9 files changed, 129 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index 5515aa31..db2d4dc6 100644 --- a/README.md +++ b/README.md @@ -228,7 +228,7 @@ interface TransferArgsOpts { feesTransferType?: string; /** * The RemoteReserve location for an XCM transfers' fees. - * Should be provided when specfying a `feesTransferType` of RemoteReserve. + * Should be provided when specfying a `feesTransferType` of `RemoteReserve`. */ remoteReserveFeesTransferTypeLocation?: string; /** diff --git a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts index ebadf5e0..db183b75 100644 --- a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts +++ b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts @@ -25,7 +25,7 @@ const main = async () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [`{"parents":"1","interior":{"Here":""}}`], - ['1000000000000'], + ['100000000000'], { format: 'call', xcmVersion: 4, diff --git a/src/consts.ts b/src/consts.ts index ede99132..36b21939 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -76,3 +76,13 @@ export const JS_ENV = detectJsEnv(); * Supported consensus system chain names */ export const KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES = ['polkadot', 'kusama', 'westend', 'rococo', 'ethereum']; + +/** + * Global consensus locations for AssetHubs + */ +export const ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS = { + polkadot: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}', + kusama: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}', + westend: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}', + rococo: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}', +}; diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts index 75f8fb00..13384113 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts @@ -125,7 +125,7 @@ describe('transferAssetsUsingTypeAndThen', () => { }); expect(ext.toHex()).toBe( - '0x6501041f0d03020109020304000201090200070010a5d4e80303010100a10f0300020109020303010100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x7101041f0d030202090200a10f0304000201090200070010a5d4e80303010100a10f0300020109020303010100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); }); }); @@ -208,7 +208,7 @@ describe('transferAssetsUsingTypeAndThen', () => { }); expect(ext.toHex()).toBe( - '0x5d01041f0d040201090204040201090200070010a5d4e80304010100a10f04020109020304010100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x6901041f0d040202090200a10f04040201090200070010a5d4e80304010100a10f04020109020304010100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); }); }); diff --git a/src/createXcmTypes/SystemToBridge.spec.ts b/src/createXcmTypes/SystemToBridge.spec.ts index a0ad84e4..bc8a74a1 100644 --- a/src/createXcmTypes/SystemToBridge.spec.ts +++ b/src/createXcmTypes/SystemToBridge.spec.ts @@ -123,10 +123,13 @@ describe('SystemToBridge', () => { V4: { parents: 2, interior: { - X1: [ + X2: [ { GlobalConsensus: 'Kusama', }, + { + Parachain: '1000', + }, ], }, }, diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index 20945b7d..3a3d57eb 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -18,6 +18,7 @@ import { FungibleStrAssetType, FungibleStrMultiAsset, ICreateXcmType, + InteriorValue, UnionXcmMultiAssets, UnionXcmMultiLocation, XcmDestBeneficiary, @@ -78,33 +79,55 @@ export const SystemToBridge: ICreateXcmType = { * @param xcmVersion The accepted xcm version. */ createDest: (destId: string, xcmVersion: number): XcmDestBeneficiary => { - const destination = getGlobalConsensusDestFromLocation(destId, xcmVersion); + const destination = getGlobalConsensusDestFromLocation(destId); + let dest: XcmDestBeneficiary | undefined = undefined; if (xcmVersion === 3) { - /** - * Ensure that the `parents` field is `2` when sending - * from a system parachain to a GlobalConsensus system. - */ - return { - V3: { - parents: 2, - interior: { - X1: destination, + dest = + destination.interior && destination.interior.X1 + ? { + V3: { + parents: 2, + interior: { + X1: destination.interior.X1 as InteriorValue, + }, + }, + } + : { + V3: { + parents: 2, + interior: { + X2: destination.interior.X2 as InteriorValue, + }, + }, + }; + } else { + if (destination.interior && destination.interior.X1) { + dest = { + V4: { + parents: 2, + interior: { + X1: [destination.interior.X1 as XcmV4JunctionDestBeneficiary], + }, }, - }, - }; + }; + } else if (destination.interior && destination.interior.X2) { + dest = { + V4: { + parents: 2, + interior: { + X2: destination.interior.X2 as XcmV4JunctionDestBeneficiary[], + }, + }, + }; + } } - const X1 = [destination as XcmV4JunctionDestBeneficiary]; + if (!dest) { + throw new BaseError('Unable to create XCM Destination location', BaseErrorsEnum.InternalError); + } - return { - V4: { - parents: 2, - interior: { - X1, - }, - }, - }; + return dest; }, /** * Create a VersionedMultiAsset structured type. diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts index 3682f6f9..b967dbf9 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts @@ -1,53 +1,73 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import { InteriorValue } from '../types'; import { getGlobalConsensusDestFromLocation } from './getGlobalConsensusDestFromLocation'; describe('getGlobalConsensusDestFromLocation', () => { it('Should correctly retrieve the global consensus dest based on the location for Polkadot', () => { const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; - const xcmVersion = 4; - const expected: InteriorValue = { - GlobalConsensus: 'Polkadot', + const expected = { + parents: '2', + interior: { + X2: [ + { + GlobalConsensus: 'Polkadot', + }, + { + Parachain: '1000', + }, + ], + }, }; - const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + const result = getGlobalConsensusDestFromLocation(locationStr); expect(result).toEqual(expected); }); it('Should correctly retrieve the global consensus dest based on the location for Kusama', () => { const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; - const xcmVersion = 3; - const expected: InteriorValue = { - GlobalConsensus: 'Kusama', + const expected = { + parents: '2', + interior: { + X2: [ + { + GlobalConsensus: 'Kusama', + }, + { + Parachain: '1000', + }, + ], + }, }; - const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + const result = getGlobalConsensusDestFromLocation(locationStr); expect(result).toEqual(expected); }); it('Should correctly retrieve the global consensus dest based on the location for Ethereum', () => { - const locationStr = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`; - const xcmVersion = 4; + const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; - const expected: InteriorValue = { - GlobalConsensus: { - Ethereum: { - chainId: '11155111', + const expected = { + parents: '2', + interior: { + X1: { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, }, }, }; - const result = getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + const result = getGlobalConsensusDestFromLocation(locationStr); expect(result).toEqual(expected); }); it('Should correctly throw an error when a location is provided that does not contain a GlobalConsensus destination junction value', () => { const locationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; - const xcmVersion = 3; - const err = () => getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + const err = () => getGlobalConsensusDestFromLocation(locationStr); expect(err).toThrow( `Bridge transaction location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} must contain a valid GlobalConsensus Junction`, @@ -55,9 +75,8 @@ describe('getGlobalConsensusDestFromLocation', () => { }); it('Should correctly throw an error when a location is provided that does not contain a valid GlobalConsensus at the 0 index', () => { const locationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; - const xcmVersion = 4; - const err = () => getGlobalConsensusDestFromLocation(locationStr, xcmVersion); + const err = () => getGlobalConsensusDestFromLocation(locationStr); expect(err).toThrow( `Bridge transaction location interior {"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`, diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts index ed3c1c3a..dcb1bd56 100644 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts +++ b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts @@ -1,11 +1,10 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import type { AnyJson } from '@polkadot/types/types'; - +import { ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS } from '../../consts'; import { BaseError, BaseErrorsEnum } from '../../errors'; -import { InteriorKey, InteriorValue, UnionXcmMultiLocation } from '../types'; +import { UnionXcmMultiLocation } from '../types'; -export const getGlobalConsensusDestFromLocation = (locationStr: string, xcmVersion: number): InteriorValue => { +export const getGlobalConsensusDestFromLocation = (locationStr: string): UnionXcmMultiLocation => { if (!locationStr.toLowerCase().includes('globalconsensus')) { throw new BaseError( `Bridge transaction location ${locationStr} must contain a valid GlobalConsensus Junction`, @@ -13,28 +12,30 @@ export const getGlobalConsensusDestFromLocation = (locationStr: string, xcmVersi ); } - const assetLocation = JSON.parse(locationStr) as UnionXcmMultiLocation; - let globalConsensusDest: AnyJson | undefined; - - if (assetLocation.interior.X1) { - globalConsensusDest = assetLocation.interior.X1; - } else { - const interiorJunctionKey = Object.keys(assetLocation.interior)[0]; - globalConsensusDest = (assetLocation.interior[interiorJunctionKey] as InteriorKey)[0]; + let assetLocation = JSON.parse(locationStr) as UnionXcmMultiLocation; - if (!JSON.stringify(globalConsensusDest).toLowerCase().includes('globalconsensus')) { - throw new BaseError( - `Bridge transaction location interior ${JSON.stringify( - assetLocation.interior, - )} does not contain a GlobalConsensus Junction in the first index`, - BaseErrorsEnum.InternalError, - ); - } - } + if (assetLocation.interior && assetLocation.interior.X1) { + const globalConsensusDestStr = JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('polkadot') + ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['polkadot'] + : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('kusama') + ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['kusama'] + : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('westend') + ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['westend'] + : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('rococo') + ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['rococo'] + : undefined; - if (xcmVersion < 4) { - return globalConsensusDest as InteriorValue; + assetLocation = globalConsensusDestStr + ? (JSON.parse(globalConsensusDestStr) as UnionXcmMultiLocation) + : assetLocation; } else { - return globalConsensusDest as InteriorValue; + throw new BaseError( + `Bridge transaction location interior ${JSON.stringify( + assetLocation.interior, + )} does not contain a GlobalConsensus Junction in the first index`, + BaseErrorsEnum.InternalError, + ); } + + return assetLocation; }; diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index e1f02caa..11a99108 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -292,7 +292,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx.toHex()).toEqual( - '0x05011f0b03020109020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x11011f0b030202090200a10f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { @@ -333,7 +333,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx).toEqual( - '0x1f0b04020109020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', + '0x1f0b040202090200a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', ); }); it('Should correctly build a `transferAssets` payload for V4', async () => { @@ -353,7 +353,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx.toHex()).toEqual( - '0x01011f0b04020109050400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x0d011f0b040202090500a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { From 16efb177ab5336ed226521e3fea1e7260c252466 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 13:21:44 -0400 Subject: [PATCH 24/44] update assetHubROCToWestend example to create transferAssets call --- .../kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts | 2 +- .../rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts | 5 +++++ .../bridgeTransfers/assetHubWETHToEthereumSepolia.ts | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts index db183b75..08904b27 100644 --- a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts +++ b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts @@ -23,7 +23,7 @@ const main = async () => { try { callInfo = await assetApi.createTransferTransaction( `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, - '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', + '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', [`{"parents":"1","interior":{"Here":""}}`], ['100000000000'], { diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 3a097dd9..e381e5aa 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -29,6 +29,11 @@ const main = async () => { { format: 'call', xcmVersion: 4, + paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts index bcfd4baa..e12c2f5b 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWETHToEthereumSepolia.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) * from a Rococo Asset Hub (System Parachain) account * to an Ethereum Sepolia account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. From 6b1b9a361a33c5e3e427ad12a427c57557f5711c Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 13:22:40 -0400 Subject: [PATCH 25/44] update assetHubROCToWestend example --- .../assetHub/bridgeTransfers/assetHubROCToWestend.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index e381e5aa..53162abf 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) * from a Rococo Asset Hub (System Parachain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. @@ -29,11 +29,6 @@ const main = async () => { { format: 'call', xcmVersion: 4, - paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"1000"}}}', }, ); From 20b59e1dba6c9db1918b73e579522df371f705d9 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 18:08:00 -0400 Subject: [PATCH 26/44] update assetHubROCToWestend example to use LocalReserve as the assetTransferType --- .../assetHub/bridgeTransfers/assetHubROCToWestend.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 53162abf..c8512ab2 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -8,10 +8,13 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) * from a Rococo Asset Hub (System Parachain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. + * We provide values for the `assetTransferType` and `feesTransferType` options of `LocalReserve` declaring that the local AssetHub should be + * used as the reserve for the transferred asset(s) and fees. + * * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ @@ -29,6 +32,9 @@ const main = async () => { { format: 'call', xcmVersion: 4, + paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', + assetTransferType: 'LocalReserve', + feesTransferType: 'LocalReserve', }, ); From dc75c00b0eeee6045498b26037060f632f9c7d8c Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 15 May 2024 18:11:17 -0400 Subject: [PATCH 27/44] lint --- .../rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index c8512ab2..82c108d5 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -14,7 +14,7 @@ import { GREEN, PURPLE, RESET } from '../../../colors'; * the tx will allow unlimited weight to be used for fees. * We provide values for the `assetTransferType` and `feesTransferType` options of `LocalReserve` declaring that the local AssetHub should be * used as the reserve for the transferred asset(s) and fees. - * + * * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ From 8e53456628bf0abbfb0daec62f4ce7b4af479368 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 16 May 2024 08:12:49 -0400 Subject: [PATCH 28/44] update example --- .../assetHub/bridgeTransfers/assetHubROCToWestend.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 82c108d5..53162abf 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -8,13 +8,10 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send ROC (asset with location `{"parents":"1","interior":{"Here":""}}`) * from a Rococo Asset Hub (System Parachain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. - * We provide values for the `assetTransferType` and `feesTransferType` options of `LocalReserve` declaring that the local AssetHub should be - * used as the reserve for the transferred asset(s) and fees. - * * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ @@ -32,9 +29,6 @@ const main = async () => { { format: 'call', xcmVersion: 4, - paysWithFeeDest: '{"parents":"1","interior":{"Here":""}}', - assetTransferType: 'LocalReserve', - feesTransferType: 'LocalReserve', }, ); From 03ab6eac6854091c20aba23c8af1bbc6b6bfda16 Mon Sep 17 00:00:00 2001 From: marshacb Date: Thu, 16 May 2024 10:28:49 -0400 Subject: [PATCH 29/44] add relay to bridge direction update integration tests add unit tests --- src/AssetTransferApi.ts | 10 + .../transferAssetsUsingTypeAndThen.ts | 4 +- src/createXcmTypes/RelayToBridge.spec.ts | 211 +++++++++++++ src/createXcmTypes/RelayToBridge.ts | 293 ++++++++++++++++++ src/createXcmTypes/index.ts | 2 + .../util/createAssetLocations.spec.ts | 2 +- src/errors/checkXcmTxInputs.spec.ts | 18 +- src/errors/checkXcmTxInputs.ts | 25 +- .../AssetsTransferApi.spec.ts | 180 ++++++++++- .../adjustedMockRelayApiV1011000.ts | 73 +++++ src/testHelpers/metadata/westendV1011000.ts | 3 + src/testHelpers/mockRelayApiV1011000.ts | 6 + src/types.ts | 4 + 13 files changed, 814 insertions(+), 17 deletions(-) create mode 100644 src/createXcmTypes/RelayToBridge.spec.ts create mode 100644 src/createXcmTypes/RelayToBridge.ts create mode 100644 src/testHelpers/adjustedMockRelayApiV1011000.ts create mode 100644 src/testHelpers/metadata/westendV1011000.ts create mode 100644 src/testHelpers/mockRelayApiV1011000.ts diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index 47a16d7e..aaed6ccf 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -537,6 +537,10 @@ export class AssetTransferApi { return Direction.RelayToPara; } + if (api.query.paras && isDestBridge) { + return Direction.RelayToBridge; + } + /** * Check if the origin is a Parachain or Parathread */ @@ -1121,7 +1125,11 @@ export class AssetTransferApi { baseOpts: CreateXcmCallOpts, paysWithFeeDest?: string, ): Promise { + console.log('XCM PALLET', xcmPallet); + const { api } = baseArgs; + console.log('API TX', api.tx[xcmPallet]); + console.log('BASE OPTS', baseOpts.assetTransferType); let txMethod: Methods | undefined = undefined; @@ -1156,6 +1164,8 @@ export class AssetTransferApi { throw new BaseError(`Unable to resolve correct transfer call`, BaseErrorsEnum.InternalError); } + console.log('TX METHOD IS', txMethod) + if (!callExistsInRuntime(api, txMethod, xcmPallet)) { throw new BaseError( `Did not find ${txMethod} from pallet ${xcmPallet} in the current runtime`, diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts index a80cce78..573212de 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.ts @@ -56,13 +56,15 @@ export const transferAssetsUsingTypeAndThen = async ( xcmVersion, remoteReserveAssetTransferTypeLocation, ); + console.log('ASSETS TRANSFER TYPE', assetTransferType) const feeAssetTransferType = resolveAssetTransferType( feesTransferTypeStr, xcmVersion, remoteReserveFeesTransferTypeLocation, ); const remoteFeesId = createXcmVersionedAssetId(paysWithFeeDest, xcmVersion); - + console.log('REMOTE FEES ID', remoteFeesId); + const defaultDestXcm = createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion); const customXcmOnDest = customXcmOnDestStr ? (JSON.parse(customXcmOnDestStr) as AnyJson) : defaultDestXcm; diff --git a/src/createXcmTypes/RelayToBridge.spec.ts b/src/createXcmTypes/RelayToBridge.spec.ts new file mode 100644 index 00000000..16b1417e --- /dev/null +++ b/src/createXcmTypes/RelayToBridge.spec.ts @@ -0,0 +1,211 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { Registry } from '../registry'; +import { adjustedMockSystemApiV1011000 } from '../testHelpers/adjustedMockSystemApiV1011000'; +import { RelayToBridge } from './RelayToBridge'; + +describe('RelayToBridge', () => { + const registry = new Registry('rococo', {}); + const isForeignAssetsTransfer = true; + const isLiquidTokenTransfer = false; + describe('Beneficiary', () => { + it('Should work for V3', () => { + const beneficiary = RelayToBridge.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 3, + ); + + const expectedRes = { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V3 for an Ethereum Address', () => { + const beneficiary = RelayToBridge.createBeneficiary('0x96Bd611EbE3Af39544104e26764F4939924F6Ece', 3); + + const expectedRes = { + V3: { + parents: 0, + interior: { + X1: { + AccountKey20: { + key: '0x96Bd611EbE3Af39544104e26764F4939924F6Ece', + }, + }, + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const beneficiary = RelayToBridge.createBeneficiary( + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + 4, + ); + + const expectedRes = { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + }, + }, + ], + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + it('Should work for V4 for an Ethereum Address', () => { + const beneficiary = RelayToBridge.createBeneficiary('0x96Bd611EbE3Af39544104e26764F4939924F6Ece', 4); + + const expectedRes = { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountKey20: { + key: '0x96Bd611EbE3Af39544104e26764F4939924F6Ece', + }, + }, + ], + }, + }, + }; + + expect(beneficiary).toStrictEqual(expectedRes); + }); + }); + describe('Destination', () => { + it('Should work for V3', () => { + const destId = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + const destination = RelayToBridge.createDest(destId, 3); + + const expectedRes = { + V3: { + parents: 2, + interior: { + X1: { + GlobalConsensus: { + Ethereum: { + chainId: '11155111', + }, + }, + }, + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + it('Should work for V4', () => { + const destId = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + + const destination = RelayToBridge.createDest(destId, 4); + + const expectedRes = { + V4: { + parents: 2, + interior: { + X2: [ + { + GlobalConsensus: 'Kusama', + }, + { + Parachain: '1000', + }, + ], + }, + }, + }; + + expect(destination).toStrictEqual(expectedRes); + }); + }); + describe('Assets', () => { + it('Should work for V3', async () => { + const assets = await RelayToBridge.createAssets( + ['10000000000'], + 3, + 'rococo', + [`{"parents":"0","interior":{"Here":""}}`], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1011000, + }, + ); + + const expectedRes = { + V3: [ + { + id: { + Concrete: { + parents: 0, + interior: { + Here: '', + }, + }, + }, + fun: { + Fungible: '10000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + it('Should work for V4', async () => { + const assets = await RelayToBridge.createAssets( + ['10000000000'], + 4, + 'rococo', + [ + `{"parents":"0","interior":{"Here":""}}`, + ], + { + registry, + isForeignAssetsTransfer, + isLiquidTokenTransfer, + api: adjustedMockSystemApiV1011000, + }, + ); + + const expectedRes = { + V4: [ + { + id: { + parents: 0, + interior: { + Here: '' + }, + }, + fun: { + Fungible: '10000000000', + }, + }, + ], + }; + + expect(assets).toStrictEqual(expectedRes); + }); + }); +}); diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts new file mode 100644 index 00000000..f12b02a6 --- /dev/null +++ b/src/createXcmTypes/RelayToBridge.ts @@ -0,0 +1,293 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import type { ApiPromise } from '@polkadot/api'; +import { isEthereumAddress } from '@polkadot/util-crypto'; + +import { BaseError, BaseErrorsEnum } from '../errors'; +import type { Registry } from '../registry'; +import { RequireOnlyOne } from '../types'; +import { resolveMultiLocation } from '../util/resolveMultiLocation'; +import { validateNumber } from '../validate'; +import { + CreateWeightLimitOpts, + FungibleStrAsset, + FungibleStrAssetType, + FungibleStrMultiAsset, + ICreateXcmType, + InteriorValue, + UnionXcmMultiAssets, + UnionXcmMultiLocation, + XcmDestBeneficiary, + XcmV2Junctions, + XcmV3Junctions, + XcmV4JunctionDestBeneficiary, + XcmV4Junctions, + XcmWeight, +} from './types'; +import { dedupeAssets } from './util/dedupeAssets'; +import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; +import { getAssetId } from './util/getAssetId'; +import { getGlobalConsensusDestFromLocation } from './util/getGlobalConsensusDestFromLocation'; +import { isRelayNativeAsset } from './util/isRelayNativeAsset'; +import { sortAssetsAscending } from './util/sortAssetsAscending'; + +export const RelayToBridge: ICreateXcmType = { + /** + * Create a XcmVersionedMultiLocation structured 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 === 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 structured type for a destination. + * + * @param destId The chainId of the destination. + * @param xcmVersion The accepted xcm version. + */ + createDest: (destId: string, xcmVersion: number): XcmDestBeneficiary => { + const destination = getGlobalConsensusDestFromLocation(destId); + let dest: XcmDestBeneficiary | undefined = undefined; + + if (xcmVersion === 3) { + dest = + destination.interior && destination.interior.X1 + ? { + V3: { + parents: 2, + interior: { + X1: destination.interior.X1 as InteriorValue, + }, + }, + } + : { + V3: { + parents: 2, + interior: { + X2: destination.interior.X2 as InteriorValue, + }, + }, + }; + } else { + if (destination.interior && destination.interior.X1) { + dest = { + V4: { + parents: 2, + interior: { + X1: [destination.interior.X1 as XcmV4JunctionDestBeneficiary], + }, + }, + }; + } else if (destination.interior && destination.interior.X2) { + dest = { + V4: { + parents: 2, + interior: { + X2: destination.interior.X2 as XcmV4JunctionDestBeneficiary[], + }, + }, + }; + } + } + + if (!dest) { + throw new BaseError('Unable to create XCM Destination location', BaseErrorsEnum.InternalError); + } + + return dest; + }, + /** + * 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, + ): Promise => { + const multiAssets = []; + let multiAsset: FungibleStrAssetType; + + const amount = amounts[0]; + if (xcmVersion < 4) { + multiAsset = { + fun: { + Fungible: amount, + }, + id: { + Concrete: { + interior: { + Here: '', + }, + parents: 0, + }, + }, + }; + } else { + multiAsset = { + fun: { + Fungible: amount, + }, + id: { + interior: { + Here: '', + }, + parents: 0, + }, + }; + } + + multiAssets.push(multiAsset); + + + if (xcmVersion === 3) { + return Promise.resolve({ + V3: multiAssets as FungibleStrMultiAsset[], + }); + } else { + return Promise.resolve({ + V4: multiAssets 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 (_: ApiPromise): Promise => { + return await Promise.resolve(0); + }, +}; + +/** + * Create multiassets for SystemToBridge 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. + */ +export const createSystemToBridgeAssets = async ( + api: ApiPromise, + amounts: string[], + specName: string, + assets: string[], + registry: Registry, + xcmVersion: number, + isForeignAssetsTransfer: boolean, + isLiquidTokenTransfer: boolean, +): Promise => { + let multiAssets: FungibleStrAssetType[] = []; + let multiAsset: FungibleStrAssetType; + const palletId = fetchPalletInstanceId(api, isLiquidTokenTransfer, isForeignAssetsTransfer); + const systemChainId = registry.lookupChainIdBySpecName(specName); + + for (let i = 0; i < assets.length; i++) { + let assetId: string = assets[i]; + const amount = amounts[i]; + + const { tokens } = registry.currentRelayRegistry[systemChainId]; + + const isValidInt = validateNumber(assetId); + const isRelayNative = isRelayNativeAsset(tokens, assetId); + if (!isRelayNative && !isValidInt) { + assetId = await getAssetId(api, registry, assetId, specName, xcmVersion, isForeignAssetsTransfer); + } + + let assetLocation: UnionXcmMultiLocation; + + if (isForeignAssetsTransfer) { + assetLocation = resolveMultiLocation(assetId, xcmVersion); + } else { + const parents = isRelayNative ? 1 : 0; + const interior: RequireOnlyOne = isRelayNative + ? { Here: '' } + : { + X2: [{ PalletInstance: palletId }, { GeneralIndex: assetId }], + }; + + assetLocation = { + parents, + interior, + }; + } + + if (xcmVersion < 4) { + multiAsset = { + id: { + Concrete: assetLocation, + }, + fun: { + Fungible: amount, + }, + }; + } else { + multiAsset = { + id: assetLocation, + fun: { + Fungible: amount, + }, + }; + } + + multiAssets.push(multiAsset); + } + + multiAssets = sortAssetsAscending(multiAssets) as FungibleStrAssetType[]; + + const sortedAndDedupedMultiAssets = dedupeAssets(multiAssets) as FungibleStrAssetType[]; + + return sortedAndDedupedMultiAssets; +}; diff --git a/src/createXcmTypes/index.ts b/src/createXcmTypes/index.ts index 4d4121b6..c6935a8d 100644 --- a/src/createXcmTypes/index.ts +++ b/src/createXcmTypes/index.ts @@ -6,6 +6,7 @@ import { ParaToRelay } from './ParaToRelay'; import { ParaToSystem } from './ParaToSystem'; import { RelayToPara } from './RelayToPara'; import { RelayToSystem } from './RelayToSystem'; +import { RelayToBridge } from './RelayToBridge'; import { SystemToBridge } from './SystemToBridge'; import { SystemToPara } from './SystemToPara'; import { SystemToRelay } from './SystemToRelay'; @@ -23,6 +24,7 @@ export const createXcmTypes: ICreateXcmTypeLookup = { SystemToBridge, RelayToPara, RelayToSystem, + RelayToBridge, ParaToPara, ParaToRelay, ParaToSystem, diff --git a/src/createXcmTypes/util/createAssetLocations.spec.ts b/src/createXcmTypes/util/createAssetLocations.spec.ts index c35ee5c9..cf41d605 100644 --- a/src/createXcmTypes/util/createAssetLocations.spec.ts +++ b/src/createXcmTypes/util/createAssetLocations.spec.ts @@ -6,7 +6,7 @@ import { mockSystemApi } from '../../testHelpers/mockSystemApi'; import { createAssetLocations } from './createAssetLocations'; describe('createAssetLocations', () => { - describe('AssetHub Kusama', () => { + describe('Kusama AssetHub', () => { const registry = new Registry('statemine', {}); it('Should correctly create asset locations for XCM V4', async () => { diff --git a/src/errors/checkXcmTxInputs.spec.ts b/src/errors/checkXcmTxInputs.spec.ts index 61346b6d..c3a8c9bf 100644 --- a/src/errors/checkXcmTxInputs.spec.ts +++ b/src/errors/checkXcmTxInputs.spec.ts @@ -22,9 +22,9 @@ import { checkPaysWithFeeDestAssetIdIsInAssets, checkRelayAmountsLength, checkRelayAssetIdLength, - checkSystemToBridgeInputs, + checkBridgeTxInputs, checkXcmVersionIsValidForPaysWithFeeDest, - checkXcmVersionIsValidForSystemToBridge, + checkXcmVersionIsValidForBridgeTx, CheckXTokensPalletOriginIsNonForeignAssetTx, } from './checkXcmTxInputs'; @@ -751,16 +751,16 @@ describe('checkLiquidTokenTransferDirectionValidity', () => { }); }); -describe('checkXcmVersionIsValidForSystemToBridge', () => { +describe('checkXcmVersionIsValidForBridgeTx', () => { it('Should correctly throw an error when the xcm version is less than 3 for SystemToBridge direction', () => { const xcmVersion = 2; - const err = () => checkXcmVersionIsValidForSystemToBridge(xcmVersion); + const err = () => checkXcmVersionIsValidForBridgeTx(xcmVersion); - expect(err).toThrow('SystemToBridge transactions require XCM version 3 or greater'); + expect(err).toThrow('Bridge transactions require XCM version 3 or greater'); }); }); -describe('checkSystemToBridgeInputs', () => { +describe('checkBridgeTxInputs', () => { it('Should correctly error when no paysWithFeeDest value is provided but assetTransferType is', () => { const paysWithFeeDest = undefined; const assetTransferType = 'RemoteReserve'; @@ -769,7 +769,7 @@ describe('checkSystemToBridgeInputs', () => { const remoteReserveFeesTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; const err = () => - checkSystemToBridgeInputs( + checkBridgeTxInputs( paysWithFeeDest, assetTransferType, remoteReserveAssetTransferTypeLocation, @@ -787,7 +787,7 @@ describe('checkSystemToBridgeInputs', () => { const remoteReserveFeesTransferTypeLocation = '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}'; const err = () => - checkSystemToBridgeInputs( + checkBridgeTxInputs( paysWithFeeDest, assetTransferType, remoteReserveAssetTransferTypeLocation, @@ -807,7 +807,7 @@ describe('checkSystemToBridgeInputs', () => { const remoteReserveFeesTransferTypeLocation = undefined; const err = () => - checkSystemToBridgeInputs( + checkBridgeTxInputs( paysWithFeeDest, assetTransferType, remoteReserveAssetTransferTypeLocation, diff --git a/src/errors/checkXcmTxInputs.ts b/src/errors/checkXcmTxInputs.ts index e0b2b718..1bcb96da 100644 --- a/src/errors/checkXcmTxInputs.ts +++ b/src/errors/checkXcmTxInputs.ts @@ -923,10 +923,10 @@ export const checkAssetIdsAreOfSameAssetIdType = (assetIds: string[]) => { * @param xcmDirection * @param xcmVersion */ -export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { +export const checkXcmVersionIsValidForBridgeTx = (xcmVersion: number) => { if (xcmVersion && xcmVersion < 3) { throw new BaseError( - 'SystemToBridge transactions require XCM version 3 or greater', + 'Bridge transactions require XCM version 3 or greater', BaseErrorsEnum.InvalidXcmVersion, ); } @@ -941,7 +941,7 @@ export const checkXcmVersionIsValidForSystemToBridge = (xcmVersion: number) => { * @param feesTransferType * @param remoteReserveFeesTransferTypeLocation */ -export const checkSystemToBridgeInputs = ( +export const checkBridgeTxInputs = ( paysWithFeeDest: string | undefined, assetTransferType: string | undefined, remoteReserveAssetTransferTypeLocation: string | undefined, @@ -1178,6 +1178,21 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkRelayAmountsLength(amounts); } + if (direction === Direction.RelayToBridge) { + checkRelayAssetIdLength(assetIds); + checkRelayAmountsLength(amounts); + getGlobalConsensusSystemName(destChainId); + checkBridgeTxInputs( + paysWithFeeDest, + assetTransferType, + remoteReserveAssetTransferTypeLocation, + feesTransferType, + remoteReserveFeesTransferTypeLocation, + ); + checkPaysWithFeeDestAssetIdIsInAssets(assetIds, paysWithFeeDest); + checkXcmVersionIsValidForBridgeTx(xcmVersion); + } + if (direction === Direction.SystemToRelay) { checkRelayAssetIdLength(assetIds); checkRelayAmountsLength(amounts); @@ -1206,7 +1221,7 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch checkMultiLocationAmountsLength(amounts); checkAssetsAmountMatch(assetIds, amounts); getGlobalConsensusSystemName(destChainId); - checkSystemToBridgeInputs( + checkBridgeTxInputs( paysWithFeeDest, assetTransferType, remoteReserveAssetTransferTypeLocation, @@ -1214,7 +1229,7 @@ export const checkXcmTxInputs = async (baseArgs: XcmBaseArgsWithPallet, opts: Ch remoteReserveFeesTransferTypeLocation, ); checkPaysWithFeeDestAssetIdIsInAssets(assetIds, paysWithFeeDest); - checkXcmVersionIsValidForSystemToBridge(xcmVersion); + checkXcmVersionIsValidForBridgeTx(xcmVersion); } if (direction === Direction.ParaToSystem || direction === Direction.ParaToPara) { diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 11a99108..3f7867e7 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -6,12 +6,16 @@ import { adjustedMockRelayApi } from '../testHelpers/adjustedMockRelayApiV9420'; import { adjustedMockSystemApi } from '../testHelpers/adjustedMockSystemApiV1004000'; import { adjustedMockSystemApiV1011000 } from '../testHelpers/adjustedMockSystemApiV1011000'; import { adjustedMockWestendRelayApiV1007001 } from '../testHelpers/adjustedMockWestendRelayApiV1007001'; +import { adjustedMockRelayApiV1011000 } from '../testHelpers/adjustedMockRelayApiV1011000'; import type { Format, TxResult } from '../types'; const relayAssetsApi = new AssetTransferApi(adjustedMockRelayApi, 'kusama', 2, { registryType: 'NPM' }); const relayAssetsApiV1007001 = new AssetTransferApi(adjustedMockWestendRelayApiV1007001, 'westend', 2, { registryType: 'NPM', }); +const relayAssetsApiV1011000 = new AssetTransferApi(adjustedMockRelayApiV1011000, 'westend', 2, { + registryType: 'NPM', +}); const systemAssetsApi = new AssetTransferApi(adjustedMockSystemApi, 'statemine', 2, { registryType: 'NPM' }); const systemAssetsApiV1011000 = new AssetTransferApi(adjustedMockSystemApiV1011000, 'westmint', 2, { registryType: 'NPM', @@ -392,7 +396,7 @@ describe('AssetTransferApi Integration Tests', () => { }, }, ); - }).rejects.toThrow('SystemToBridge transactions require XCM version 3 or greater'); + }).rejects.toThrow('Bridge transactions require XCM version 3 or greater'); }); }); describe('SystemToPara', () => { @@ -1440,6 +1444,180 @@ describe('AssetTransferApi Integration Tests', () => { }); }); + describe('RelayToBridge', () => { + const bridgeBaseRelayCreateTx = async ( + ataAPI: AssetTransferApi, + destination: string, + assetIds: string[], + format: T, + xcmVersion: number, + opts: CreateXcmCallOpts, + ): Promise> => { + return await ataAPI.createTransferTransaction( + destination, + '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b', + assetIds, + ['1000000000'], + { + format, + weightLimit: opts.weightLimit, + xcmVersion, + sendersAddr: 'FBeL7DanUDs5SZrxZY1CizMaPgG9vZgJgvr52C2dg81SsF1', + paysWithFeeDest: opts.paysWithFeeDest, + assetTransferType: opts.assetTransferType, + remoteReserveAssetTransferTypeLocation: opts.remoteReserveAssetTransferTypeLocation, + feesTransferType: opts.feesTransferType, + remoteReserveFeesTransferTypeLocation: opts.remoteReserveFeesTransferTypeLocation + }, + ); + }; + + describe('V3', () => { + it('Should correctly build a transferAssets call for V3', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, + [ + `{"parents":"0","interior":{"Here":""}}`, + ], + 'call', + 3, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + expect(res.tx).toEqual( + '0x1f0b03020109079edaa8020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee0000000001a10f411f', + ); + }); + + it('Should correctly build a payload for a transferAssets for V3', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'payload', + 3, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + expect(res.tx.toHex()).toEqual( + '0x11011f0b030202090200a10f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + ); + }); + it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'submittable', + 3, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + expect(res.tx.toRawType()).toEqual('Extrinsic'); + }); + }); + + describe('V4', () => { + it('Should correctly build a `transferAssets` call extrinsic for V4', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'call', + 4, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + expect(res.tx).toEqual( + '0x1f0b040202090200a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', + ); + }); + it('Should correctly build a `transferAssets` payload for V4', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"1","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'payload', + 4, + { + paysWithFeeDest: `{"parents":"1","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":[{"Parachain":"1000"}]}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":[{"Parachain":"1000"}]}}', + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: false, + }, + ); + expect(res.tx.toHex()).toEqual( + '0x0d011f0b040202090500a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + ); + }); + it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { + const res = await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'submittable', + 4, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + expect(res.tx.toRawType()).toEqual('Extrinsic'); + }); + }); + it('Should correctly error when provided an XCM version less than 3', async () => { + await expect(async () => { + await bridgeBaseRelayCreateTx( + relayAssetsApiV1011000, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + [`{"parents":"0","interior":{"Here":""}}`], + 'submittable', + 2, + { + isLiquidTokenTransfer: false, + isForeignAssetsTransfer: true, + weightLimit: { + refTime: '1000', + proofSize: '2000', + }, + }, + ); + }).rejects.toThrow('Bridge transactions require XCM version 3 or greater'); + }); + }); + describe('RelayToPara', () => { const baseRelayCreateTx = async ( format: T, diff --git a/src/testHelpers/adjustedMockRelayApiV1011000.ts b/src/testHelpers/adjustedMockRelayApiV1011000.ts new file mode 100644 index 00000000..e24ca07e --- /dev/null +++ b/src/testHelpers/adjustedMockRelayApiV1011000.ts @@ -0,0 +1,73 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import type { ApiPromise } from '@polkadot/api'; +import type { Header } from '@polkadot/types/interfaces'; + +import { mockRelayApiV1011000 } from './mockRelayApiV1011000'; + +const getRelaySafeXcmVersion = () => + Promise.resolve().then(() => { + return mockRelayApiV1011000.registry.createType('Option', 2); + }); + +const getRelayRuntimeVersion = () => + Promise.resolve().then(() => { + return { + specName: mockRelayApiV1011000.registry.createType('Text', 'westend'), + specVersion: mockRelayApiV1011000.registry.createType('u32', 1007001), + }; + }); + +const getHeader = (): Promise
=> + Promise.resolve().then(() => + mockRelayApiV1011000.registry.createType('Header', { + number: mockRelayApiV1011000.registry.createType('Compact', 100), + parentHash: mockRelayApiV1011000.registry.createType('Hash'), + stateRoot: mockRelayApiV1011000.registry.createType('Hash'), + extrinsicsRoot: mockRelayApiV1011000.registry.createType('Hash'), + digest: mockRelayApiV1011000.registry.createType('Digest'), + }), + ); + +const accountNextIndex = () => mockRelayApiV1011000.registry.createType('u32', 10); + +export const adjustedMockRelayApiV1011000 = { + registry: mockRelayApiV1011000.registry, + rpc: { + state: { + getRuntimeVersion: getRelayRuntimeVersion, + }, + system: { + accountNextIndex: accountNextIndex, + }, + chain: { + getHeader: getHeader, + }, + }, + query: { + paras: {}, + xcmPallet: { + safeXcmVersion: getRelaySafeXcmVersion, + }, + }, + tx: { + xcmPallet: { + limitedReserveTransferAssets: mockRelayApiV1011000.tx['xcmPallet'].limitedReserveTransferAssets, + reserveTransferAssets: mockRelayApiV1011000.tx['xcmPallet'].reserveTransferAssets, + teleportAssets: mockRelayApiV1011000.tx['xcmPallet'].teleportAssets, + limitedTeleportAssets: mockRelayApiV1011000.tx['xcmPallet'].limitedTeleportAssets, + transferAssets: mockRelayApiV1011000.tx['xcmPallet'].transferAssets, + claimAssets: mockRelayApiV1011000.tx['xcmPallet'].claimAssets, + transferAssetsUsingTypeAndThen: mockRelayApiV1011000.tx['xcmPallet'].transferAssetsUsingTypeAndThen, + }, + balances: { + transfer: mockRelayApiV1011000.tx.balances.transfer, + transferKeepAlive: mockRelayApiV1011000.tx.balances.transferKeepAlive, + }, + }, + runtimeVersion: { + transactionVersion: mockRelayApiV1011000.registry.createType('u32', 24), + specVersion: mockRelayApiV1011000.registry.createType('u32', 1007001), + }, + genesisHash: mockRelayApiV1011000.registry.createType('BlockHash'), +} as unknown as ApiPromise; diff --git a/src/testHelpers/metadata/westendV1011000.ts b/src/testHelpers/metadata/westendV1011000.ts new file mode 100644 index 00000000..bda7e462 --- /dev/null +++ b/src/testHelpers/metadata/westendV1011000.ts @@ -0,0 +1,3 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +export const westendV1011000 = '0x6d6574610ec90d000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050000240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006300030000005060034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c01147068617365f907011450686173650001146576656e7454010445000118746f706963734d0301185665633c543e000054083c77657374656e645f72756e74696d653052756e74696d654576656e740001a41853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e646963657304007c017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0003002042616c616e636573040080017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000400485472616e73616374696f6e5061796d656e7404008801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e001a001c5374616b696e6704008c017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e000600204f6666656e6365730400a4015870616c6c65745f6f6666656e6365733a3a4576656e740007001c53657373696f6e0400ac015470616c6c65745f73657373696f6e3a3a4576656e740008001c4772616e6470610400b0015470616c6c65745f6772616e6470613a3a4576656e74000a001c5574696c6974790400c0015470616c6c65745f7574696c6974793a3a4576656e74001000204964656e746974790400cc017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e001100205265636f766572790400d4017c70616c6c65745f7265636f766572793a3a4576656e743c52756e74696d653e0012001c56657374696e670400d8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e001300245363686564756c65720400dc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00140020507265696d6167650400e8017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e001c00105375646f0400ec016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0015001450726f78790400f4017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e001600204d756c746973696704000101017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e00170068456c656374696f6e50726f76696465724d756c746950686173650400090101d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e00180024566f7465724c69737404001d0101f470616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d652c2070616c6c65745f626167735f6c6973743a3a496e7374616e6365313e0019003c4e6f6d696e6174696f6e506f6f6c7304002101019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e001d002c46617374556e7374616b6504003d01018c70616c6c65745f666173745f756e7374616b653a3a4576656e743c52756e74696d653e001e0040436f6e76696374696f6e566f74696e670400450101a070616c6c65745f636f6e76696374696f6e5f766f74696e673a3a4576656e743c52756e74696d653e001f00245265666572656e646104004901018070616c6c65745f7265666572656e64613a3a4576656e743c52756e74696d653e0020002457686974656c69737404008507018070616c6c65745f77686974656c6973743a3a4576656e743c52756e74696d653e00240020547265617375727904009907017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0025003450617261496e636c7573696f6e04009d07019070617261636861696e735f696e636c7573696f6e3a3a4576656e743c52756e74696d653e002c001450617261730400ad07015c70617261636861696e735f70617261733a3a4576656e74002f001048726d700400b107017c70617261636861696e735f68726d703a3a4576656e743c52756e74696d653e00330034506172617344697370757465730400b507018c70617261636861696e735f64697370757465733a3a4576656e743c52756e74696d653e003500684f6e44656d616e6441737369676e6d656e7450726f76696465720400c10701b470617261636861696e735f61737369676e65725f6f6e5f64656d616e643a3a4576656e743c52756e74696d653e003800245265676973747261720400c507017c70617261735f7265676973747261723a3a4576656e743c52756e74696d653e003c0014536c6f74730400c9070154736c6f74733a3a4576656e743c52756e74696d653e003d002041756374696f6e730400cd07016061756374696f6e733a3a4576656e743c52756e74696d653e003f002443726f77646c6f616e0400d107016463726f77646c6f616e3a3a4576656e743c52756e74696d653e0040003441737369676e6564536c6f74730400d507017861737369676e65645f736c6f74733a3a4576656e743c52756e74696d653e00410020436f726574696d650400d9070160636f726574696d653a3a4576656e743c52756e74696d653e0042002458636d50616c6c65740400dd07016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e006300304d65737361676551756575650400e507019070616c6c65745f6d6573736167655f71756575653a3a4576656e743c52756e74696d653e006400244173736574526174650400ed07018470616c6c65745f61737365745f726174653a3a4576656e743c52756e74696d653e0065002c526f6f7454657374696e670400f107018c70616c6c65745f726f6f745f74657374696e673a3a4576656e743c52756e74696d653e006600404964656e746974794d69677261746f720400f50701846964656e746974795f6d69677261746f723a3a4576656e743c52756e74696d653e00f80000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574800c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000880c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748c103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001481c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640c01147374617368000130543a3a4163636f756e7449640001106465737490017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000118616d6f756e7418013042616c616e63654f663c543e0001040d01546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e7420746f20746869732064657374696e6174696f6e2e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e94011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e744964000114707265667398013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e68536e617073686f74566f7465727353697a65457863656564656404011073697a6510010c753332000e0468566f746572732073697a65206c696d697420726561636865642e6c536e617073686f745461726765747353697a65457863656564656404011073697a6510010c753332000f046c546172676574732073697a65206c696d697420726561636865642e20466f7263654572610401106d6f6465a0011c466f7263696e670010047441206e657720666f72636520657261206d6f646520776173207365742e64436f6e74726f6c6c65724261746368446570726563617465640401206661696c7572657310010c753332001104a45265706f7274206f66206120636f6e74726f6c6c6572206261746368206465707265636174696f6e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657490083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000940c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000098083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e9c011c50657262696c6c00011c626c6f636b6564200110626f6f6c00009c0000069400a0083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000a40c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64a801104b696e6400012074696d65736c6f743801384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652ea8000003100000000800ac0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b00c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574b40134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b4000002b800b800000408bc3000bc0c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040004013c656432353531393a3a5075626c69630000c00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74c401384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40418526573756c7408045401c8044501680108084f6b0400c8000000000c4572720400680000010000c80000040000cc0c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001442c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e38417574686f726974794164646564040124617574686f72697479000130543a3a4163636f756e744964000a047c4120757365726e616d6520617574686f72697479207761732061646465642e40417574686f7269747952656d6f766564040124617574686f72697479000130543a3a4163636f756e744964000b04844120757365726e616d6520617574686f72697479207761732072656d6f7665642e2c557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d65d0012c557365726e616d653c543e000c04744120757365726e616d65207761732073657420666f72206077686f602e38557365726e616d655175657565640c010c77686f000130543a3a4163636f756e744964000120757365726e616d65d0012c557365726e616d653c543e00012865787069726174696f6e100144426c6f636b4e756d626572466f723c543e000d0419014120757365726e616d6520776173207175657565642c20627574206077686f60206d75737420616363657074206974207072696f7220746f206065787069726174696f6e602e48507265617070726f76616c4578706972656404011477686f7365000130543a3a4163636f756e744964000e043901412071756575656420757365726e616d6520706173736564206974732065787069726174696f6e20776974686f7574206265696e6720636c61696d656420616e64207761732072656d6f7665642e485072696d617279557365726e616d6553657408010c77686f000130543a3a4163636f756e744964000120757365726e616d65d0012c557365726e616d653c543e000f0401014120757365726e616d6520776173207365742061732061207072696d61727920616e642063616e206265206c6f6f6b65642075702066726f6d206077686f602e5c44616e676c696e67557365726e616d6552656d6f76656408010c77686f000130543a3a4163636f756e744964000120757365726e616d65d0012c557365726e616d653c543e0010085d01412064616e676c696e6720757365726e616d652028617320696e2c206120757365726e616d6520636f72726573706f6e64696e6720746f20616e206163636f756e742074686174206861732072656d6f766564206974736c6964656e746974792920686173206265656e2072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d40c3c70616c6c65745f7265636f766572791870616c6c6574144576656e740404540001183c5265636f766572794372656174656404011c6163636f756e74000130543a3a4163636f756e744964000004c841207265636f766572792070726f6365737320686173206265656e2073657420757020666f7220616e206163636f756e742e445265636f76657279496e697469617465640801306c6f73745f6163636f756e74000130543a3a4163636f756e74496400013c726573637565725f6163636f756e74000130543a3a4163636f756e744964000104290141207265636f766572792070726f6365737320686173206265656e20696e6974696174656420666f72206c6f7374206163636f756e742062792072657363756572206163636f756e742e3c5265636f76657279566f75636865640c01306c6f73745f6163636f756e74000130543a3a4163636f756e74496400013c726573637565725f6163636f756e74000130543a3a4163636f756e74496400011873656e646572000130543a3a4163636f756e744964000204590141207265636f766572792070726f6365737320666f72206c6f7374206163636f756e742062792072657363756572206163636f756e7420686173206265656e20766f756368656420666f722062792073656e6465722e385265636f76657279436c6f7365640801306c6f73745f6163636f756e74000130543a3a4163636f756e74496400013c726573637565725f6163636f756e74000130543a3a4163636f756e7449640003041d0141207265636f766572792070726f6365737320666f72206c6f7374206163636f756e742062792072657363756572206163636f756e7420686173206265656e20636c6f7365642e404163636f756e745265636f76657265640801306c6f73745f6163636f756e74000130543a3a4163636f756e74496400013c726573637565725f6163636f756e74000130543a3a4163636f756e74496400040401014c6f7374206163636f756e7420686173206265656e207375636365737366756c6c79207265636f76657265642062792072657363756572206163636f756e742e3c5265636f7665727952656d6f7665640401306c6f73745f6163636f756e74000130543a3a4163636f756e744964000504cc41207265636f766572792070726f6365737320686173206265656e2072656d6f76656420666f7220616e206163636f756e742e04304576656e747320747970652ed80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000124245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e000118726573756c74c401384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e2052657472795365741001107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e000118706572696f64100144426c6f636b4e756d626572466f723c543e00011c726574726965730801087538000304a0536574206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e38526574727943616e63656c6c65640801107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e000404ac43616e63656c206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e00050429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e0006043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e2c52657472794661696c65640801107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e0007085d0154686520676976656e207461736b2077617320756e61626c6520746f20626520726574726965642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b206f722074686572659c776173206e6f7420656e6f7567682077656967687420746f2072657363686564756c652069742e545065726d616e656e746c794f7665727765696768740801107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e401404f7074696f6e3c5461736b4e616d653e000804f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ee000000408101000e404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000e80c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736834011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736834011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736834011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ec0c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c74c401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c64f001504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c74c401384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f004184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000f40c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74c401384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065f80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578fc010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065f80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065f80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f8083c77657374656e645f72756e74696d652450726f7879547970650001240c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002001c5374616b696e67000300305375646f42616c616e636573000400444964656e746974794a756467656d656e740005002c43616e63656c50726f78790006001c41756374696f6e0007003c4e6f6d696e6174696f6e506f6f6c7300080000fc000005040001010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74c401384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e740501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740501083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c753332000009010c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d707574650d01013c456c656374696f6e436f6d707574650001186f726967696ef001504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564200110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c59017468652073746f72656420736f6c7574696f6e20776173207375626d697474656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d707574650d01013c456c656374696f6e436f6d7075746500011473636f726511010134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6d1501016050686173653c426c6f636b4e756d626572466f723c543e3e000108746f1501016050686173653c426c6f636b4e756d626572466f723c543e3e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d01089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400001101084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e636500001501089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e656404001901012828626f6f6c2c20426e2900020024456d657267656e6379000300001901000004082010001d010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d300120543a3a53636f7265000108746f300120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265300120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657421010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e740404540001481c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e6564200110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f737461746525010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f74f001504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e636572f001504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f72f001504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e742901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e94011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174653101019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e90506f6f6c436f6d6d697373696f6e436c61696d5065726d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e350101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e000e04c8506f6f6c20636f6d6d697373696f6e20636c61696d207065726d697373696f6e20686173206265656e20757064617465642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000f0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e644d696e42616c616e63654465666963697441646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001004c8546f70706564207570206465666963697420696e2066726f7a656e204544206f66207468652072657761726420706f6f6c2e604d696e42616c616e636545786365737341646a757374656408011c706f6f6c5f6964100118506f6f6c4964000118616d6f756e7418013042616c616e63654f663c543e001104bc436c61696d6564206578636573732066726f7a656e204544206f66206166207468652072657761726420706f6f6c2e04584576656e7473206f6620746869732070616c6c65742e2501085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000290104184f7074696f6e040454012d010108104e6f6e6500000010536f6d6504002d0100000100002d01000004089400003101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d6265720110000801306d61785f696e63726561736594011c50657262696c6c0001246d696e5f64656c617910012c426c6f636b4e756d6265720000350104184f7074696f6e0404540139010108104e6f6e6500000010536f6d650400390100000100003901085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7364436f6d6d697373696f6e436c61696d5065726d697373696f6e04244163636f756e74496401000108385065726d697373696f6e6c6573730000001c4163636f756e7404000001244163636f756e744964000100003d010c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144576656e7404045400011420556e7374616b65640801147374617368000130543a3a4163636f756e744964000118726573756c74c401384469737061746368526573756c740000045841207374616b65722077617320756e7374616b65642e1c536c61736865640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104190141207374616b65722077617320736c617368656420666f722072657175657374696e6720666173742d756e7374616b65207768696c7374206265696e67206578706f7365642e304261746368436865636b656404011065726173410101345665633c457261496e6465783e00020445014120626174636820776173207061727469616c6c7920636865636b656420666f722074686520676976656e20657261732c20627574207468652070726f6365737320646964206e6f742066696e6973682e34426174636846696e697368656404011073697a6510010c7533320003109c41206261746368206f66206120676976656e2073697a6520776173207465726d696e617465642e0055015468697320697320616c7761797320666f6c6c6f77732062792061206e756d626572206f662060556e7374616b656460206f722060536c617368656460206576656e74732c206d61726b696e672074686520656e64e86f66207468652062617463682e2041206e65772062617463682077696c6c20626520637265617465642075706f6e206e65787420626c6f636b2e34496e7465726e616c4572726f72000404e8416e20696e7465726e616c206572726f722068617070656e65642e204f7065726174696f6e732077696c6c20626520706175736564206e6f772e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744101000002100045010c6070616c6c65745f636f6e76696374696f6e5f766f74696e671870616c6c6574144576656e740804540004490001082444656c6567617465640800000130543a3a4163636f756e7449640000000130543a3a4163636f756e7449640000041d01416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e205c5b77686f2c207461726765745c5d2c556e64656c6567617465640400000130543a3a4163636f756e744964000104f4416e205c5b6163636f756e745c5d206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657449010c4070616c6c65745f7265666572656e64611870616c6c6574144576656e74080454000449000140245375626d69747465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e0114747261636bfc013c547261636b49644f663c542c20493e04250154686520747261636b2028616e6420627920657874656e73696f6e2070726f706f73616c206469737061746368206f726967696e29206f662074686973207265666572656e64756d2e012070726f706f73616c4d01014c426f756e64656443616c6c4f663c542c20493e04805468652070726f706f73616c20666f7220746865207265666572656e64756d2e00048041207265666572656e64756d20686173206265656e207375626d69747465642e544465636973696f6e4465706f736974506c616365640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e010494546865206465636973696f6e206465706f73697420686173206265656e20706c616365642e5c4465636973696f6e4465706f736974526566756e6465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e02049c546865206465636973696f6e206465706f73697420686173206265656e20726566756e6465642e384465706f736974536c617368656408010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e03046c41206465706f73697420686173206265656e20736c61736865642e3c4465636973696f6e53746172746564100114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e0114747261636bfc013c547261636b49644f663c542c20493e04250154686520747261636b2028616e6420627920657874656e73696f6e2070726f706f73616c206469737061746368206f726967696e29206f662074686973207265666572656e64756d2e012070726f706f73616c4d01014c426f756e64656443616c6c4f663c542c20493e04805468652070726f706f73616c20666f7220746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b85468652063757272656e742074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0404bc41207265666572656e64756d20686173206d6f76656420696e746f20746865206465636964696e672070686173652e38436f6e6669726d53746172746564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e050038436f6e6669726d41626f72746564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e060024436f6e6669726d6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0704210141207265666572656e64756d2068617320656e6465642069747320636f6e6669726d6174696f6e20706861736520616e6420697320726561647920666f7220617070726f76616c2e20417070726f766564040114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e08040d0141207265666572656e64756d20686173206265656e20617070726f76656420616e64206974732070726f706f73616c20686173206265656e207363686564756c65642e2052656a6563746564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0904ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2054696d65644f7574080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0a04d841207265666572656e64756d20686173206265656e2074696d6564206f757420776974686f7574206265696e6720646563696465642e2443616e63656c6c6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0b048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e184b696c6c6564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e011474616c6c7981070120543a3a54616c6c7904b05468652066696e616c2074616c6c79206f6620766f74657320696e2074686973207265666572656e64756d2e0c047441207265666572656e64756d20686173206265656e206b696c6c65642e645375626d697373696f6e4465706f736974526566756e6465640c0114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e010c77686f000130543a3a4163636f756e744964048c546865206163636f756e742077686f20706c6163656420746865206465706f7369742e0118616d6f756e7418013c42616c616e63654f663c542c20493e048454686520616d6f756e7420706c6163656420627920746865206163636f756e742e0d04a4546865207375626d697373696f6e206465706f73697420686173206265656e20726566756e6465642e2c4d65746164617461536574080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e01106861736834011c543a3a486173680438507265696d61676520686173682e0e049c4d6574616461746120666f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c6561726564080114696e64657810013c5265666572656e64756d496e6465780460496e646578206f6620746865207265666572656e64756d2e01106861736834011c543a3a486173680438507265696d61676520686173682e0f04ac4d6574616461746120666f722061207265666572656e64756d20686173206265656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744d0110346672616d655f737570706f72741874726169747324707265696d616765731c426f756e6465640804540151010448017907010c184c656761637904011068617368340124483a3a4f757470757400000018496e6c696e6504007d070134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368340124483a3a4f757470757400010c6c656e10010c753332000200005101083c77657374656e645f72756e74696d652c52756e74696d6543616c6c0001c01853797374656d0400550101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e00000010426162650400650101a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0001002454696d657374616d7004008d0101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400910101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0003002042616c616e6365730400a10101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0004001c5374616b696e670400b10101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0006001c53657373696f6e0400e50101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0008001c4772616e6470610400010201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000a001c5574696c69747904002d0201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e001000204964656e7469747904008d0201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e001100205265636f766572790400350301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265636f766572792c2052756e74696d653e0012001c56657374696e670400390301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e001300245363686564756c65720400410301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00140020507265696d6167650400490301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e001c00105375646f0400510301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0015001450726f78790400550301a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e001600204d756c746973696704005d0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e00170068456c656374696f6e50726f76696465724d756c746950686173650400650301fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e00180024566f7465724c6973740400590401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c566f7465724c6973742c2052756e74696d653e0019003c4e6f6d696e6174696f6e506f6f6c7304005d0401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001d002c46617374556e7374616b650400790401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46617374556e7374616b652c2052756e74696d653e001e0040436f6e76696374696f6e566f74696e6704007d0401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e76696374696f6e566f74696e672c2052756e74696d653e001f00245265666572656e64610400910401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265666572656e64612c2052756e74696d653e0020002457686974656c69737404009d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c57686974656c6973742c2052756e74696d653e0024002054726561737572790400a10401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e00250034436f6e66696775726174696f6e0400e50401c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e66696775726174696f6e2c2052756e74696d653e002a002c50617261735368617265640400090501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261735368617265642c2052756e74696d653e002b003450617261496e636c7573696f6e04000d0501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261496e636c7573696f6e2c2052756e74696d653e002c003050617261496e686572656e740400110501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261496e686572656e742c2052756e74696d653e002d0014506172617304009d0501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261732c2052756e74696d653e002f002c496e697469616c697a65720400a50501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e697469616c697a65722c2052756e74696d653e0030001048726d700400a90501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c48726d702c2052756e74696d653e00330034506172617344697370757465730400b10501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506172617344697370757465732c2052756e74696d653e003500345061726173536c617368696e670400b50501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5061726173536c617368696e672c2052756e74696d653e003600684f6e44656d616e6441737369676e6d656e7450726f76696465720400c50501fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f6e44656d616e6441737369676e6d656e7450726f76696465722c2052756e74696d653e003800245265676973747261720400c90501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265676973747261722c2052756e74696d653e003c0014536c6f74730400cd0501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c536c6f74732c2052756e74696d653e003d004050617261735375646f577261707065720400d10501d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261735375646f577261707065722c2052756e74696d653e003e002041756374696f6e730400d10601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41756374696f6e732c2052756e74696d653e003f002443726f77646c6f616e0400d90601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f77646c6f616e2c2052756e74696d653e0040003441737369676e6564536c6f74730400e50601c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41737369676e6564536c6f74732c2052756e74696d653e00410020436f726574696d650400ed0601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f726574696d652c2052756e74696d653e0042002458636d50616c6c65740400010701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d50616c6c65742c2052756e74696d653e006300304d657373616765517565756504003d0701c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d65737361676551756575652c2052756e74696d653e006400244173736574526174650400490701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4173736574526174652c2052756e74696d653e0065002c526f6f7454657374696e670400510701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c526f6f7454657374696e672c2052756e74696d653e0066001442656566790400550701a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42656566792c2052756e74696d653e00c800404964656e746974794d69677261746f720400750701d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974794d69677261746f722c2052756e74696d653e00f8000055010c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657330010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d73590101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973610101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e59010000025d01005d01000004083838006101000002380065010c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6669010190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6669010190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967810101504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6901084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572016d01084964017501001001206f6666656e646572750101084964000110736c6f7479010110536c6f7400013066697273745f6865616465726d0101184865616465720001347365636f6e645f6865616465726d01011848656164657200006d01102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368000014012c706172656e745f68617368340130486173683a3a4f75747075740001186e756d626572710101184e756d62657200012873746174655f726f6f74340130486173683a3a4f757470757400013c65787472696e736963735f726f6f74340130486173683a3a4f75747075740001186469676573743c011844696765737400007101000006100075010c4473705f636f6e73656e7375735f626162650c617070185075626c69630000040004013c737232353531393a3a5075626c696300007901084873705f636f6e73656e7375735f736c6f747310536c6f740000040030010c75363400007d01082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573610101305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000081010c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f720001040856310801046385010128287536342c2075363429000134616c6c6f7765645f736c6f747389010130416c6c6f776564536c6f7473000100008501000004083030008901084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f7473000200008d010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91010c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577950101504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577950101504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65200110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801c8011408496404000001244163636f756e74496400000014496e6465780400990101304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004009d0101205b75383b2032305d000400009901000006c8009d01000003140000000800a1010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000120507472616e736665725f616c6c6f775f646561746808011064657374950101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565a5010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365950101504163636f756e7449644c6f6f6b75704f663c543e00011064657374950101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565a5010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374950101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565a5010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374950101504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665200110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f950101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686fa90101445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f950101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565a5010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6ead01014c41646a7573746d656e74446972656374696f6e00011464656c7461a5010128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5010000061800a9010000020000ad010c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e63726561736500000020446563726561736500010000b101103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400017810626f6e6408011476616c7565a501013042616c616e63654f663c543e000114706179656590017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616ca501013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565a501013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200035c290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0055015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722469742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320506172616d65746572730051012d20606e756d5f736c617368696e675f7370616e736020696e6469636174657320746865206e756d626572206f66206d6574616461746120736c617368696e67207370616e7320746f20636c656172207768656e5501746869732063616c6c20726573756c747320696e206120636f6d706c6574652072656d6f76616c206f6620616c6c2074686520646174612072656c6174656420746f20746865207374617368206163636f756e742e3d01496e207468697320636173652c2074686520606e756d5f736c617368696e675f7370616e7360206d757374206265206c6172676572206f7220657175616c20746f20746865206e756d626572206f665d01736c617368696e67207370616e73206173736f636961746564207769746820746865207374617368206163636f756e7420696e20746865205b60536c617368696e675370616e73605d2073746f7261676520747970652c25016f7468657277697365207468652063616c6c2077696c6c206661696c2e205468652063616c6c20776569676874206973206469726563746c792070726f706f7274696f6e616c20746f54606e756d5f736c617368696e675f7370616e73602e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c6964617465040114707265667398013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473b50101645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f7061796565040114706179656590017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c657200083845012852652d29736574732074686520636f6e74726f6c6c6572206f66206120737461736820746f2074686520737461736820697473656c662e20546869732066756e6374696f6e2070726576696f75736c794d01616363657074656420612060636f6e74726f6c6c65726020617267756d656e7420746f207365742074686520636f6e74726f6c6c657220746f20616e206163636f756e74206f74686572207468616e207468655901737461736820697473656c662e20546869732066756e6374696f6e616c69747920686173206e6f77206265656e2072656d6f7665642c206e6f77206f6e6c792073657474696e672074686520636f6e74726f6c6c65728c746f207468652073746173682c206966206974206973206e6f7420616c72656164792e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e65777101010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616c7101010c753332000a1ce8496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f727320757020746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f72b901011c50657263656e74000b1c11015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f7220757020746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573a90101445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f200901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320506172616d65746572730045012d20606e756d5f736c617368696e675f7370616e73603a20526566657220746f20636f6d6d656e7473206f6e205b6043616c6c3a3a77697468647261775f756e626f6e646564605d20666f72206d6f72652064657461696c732e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573410101205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012341901506179206f7574206e6578742070616765206f6620746865207374616b65727320626568696e6420612076616c696461746f7220666f722074686520676976656e206572612e00e82d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e00490154686520726577617264207061796f757420636f756c6420626520706167656420696e20636173652074686572652061726520746f6f206d616e79206e6f6d696e61746f7273206261636b696e67207468655d016076616c696461746f725f7374617368602e20546869732063616c6c2077696c6c207061796f757420756e7061696420706167657320696e20616e20617363656e64696e67206f726465722e20546f20636c61696d2061b4737065636966696320706167652c2075736520607061796f75745f7374616b6572735f62795f70616765602e6000f0496620616c6c2070616765732061726520636c61696d65642c2069742072657475726e7320616e206572726f722060496e76616c696450616765602e187265626f6e6404011476616c7565a501013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014445d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e0034232320506172616d65746572730045012d20606e756d5f736c617368696e675f7370616e73603a20526566657220746f20636f6d6d656e7473206f6e205b6043616c6c3a3a77697468647261775f756e626f6e646564605d20666f72206d6f72652064657461696c732e106b69636b04010c77686fb50101645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731c01486d696e5f6e6f6d696e61746f725f626f6e64bd010158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e64bd010158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e74c1010134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e74c1010134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c64c5010144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6ec9010144436f6e6669674f703c50657262696c6c3e0001486d61785f7374616b65645f72657761726473c5010144436f6e6669674f703c50657263656e743e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f746865720401147374617368000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e657794011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e587061796f75745f7374616b6572735f62795f706167650c013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780001107061676510011050616765001a443101506179206f757420612070616765206f6620746865207374616b65727320626568696e6420612076616c696461746f7220666f722074686520676976656e2065726120616e6420706167652e00e82d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e31012d2060706167656020697320746865207061676520696e646578206f66206e6f6d696e61746f727320746f20706179206f757420776974682076616c7565206265747765656e203020616e64b02020606e756d5f6e6f6d696e61746f7273202f20543a3a4d61784578706f737572655061676553697a65602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e003d01496620612076616c696461746f7220686173206d6f7265207468616e205b60436f6e6669673a3a4d61784578706f737572655061676553697a65605d206e6f6d696e61746f7273206261636b696e6729017468656d2c207468656e20746865206c697374206f66206e6f6d696e61746f72732069732070616765642c207769746820656163682070616765206265696e672063617070656420617455015b60436f6e6669673a3a4d61784578706f737572655061676553697a65602e5d20496620612076616c696461746f7220686173206d6f7265207468616e206f6e652070616765206f66206e6f6d696e61746f72732c49017468652063616c6c206e6565647320746f206265206d61646520666f72206561636820706167652073657061726174656c7920696e206f7264657220666f7220616c6c20746865206e6f6d696e61746f727355016261636b696e6720612076616c696461746f7220746f207265636569766520746865207265776172642e20546865206e6f6d696e61746f727320617265206e6f7420736f72746564206163726f73732070616765736101616e6420736f2069742073686f756c64206e6f7420626520617373756d6564207468652068696768657374207374616b657220776f756c64206265206f6e2074686520746f706d6f7374207061676520616e642076696365490176657273612e204966207265776172647320617265206e6f7420636c61696d656420696e205b60436f6e6669673a3a486973746f72794465707468605d20657261732c207468657920617265206c6f73742e307570646174655f7061796565040128636f6e74726f6c6c6572000130543a3a4163636f756e744964001b18e04d6967726174657320616e206163636f756e742773206052657761726444657374696e6174696f6e3a3a436f6e74726f6c6c65726020746fa46052657761726444657374696e6174696f6e3a3a4163636f756e7428636f6e74726f6c6c657229602e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e003101546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966207468652060706179656560206973207375636365737366756c6c79206d696772617465642e686465707265636174655f636f6e74726f6c6c65725f626174636804012c636f6e74726f6c6c657273cd0101f4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6e74726f6c6c657273496e4465707265636174696f6e42617463683e001c1c5d01557064617465732061206261746368206f6620636f6e74726f6c6c6572206163636f756e747320746f20746865697220636f72726573706f6e64696e67207374617368206163636f756e7420696620746865792061726561016e6f74207468652073616d652e2049676e6f72657320616e7920636f6e74726f6c6c6572206163636f756e7473207468617420646f206e6f742065786973742c20616e6420646f6573206e6f74206f706572617465206966b874686520737461736820616e6420636f6e74726f6c6c65722061726520616c7265616479207468652073616d652e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e00b4546865206469737061746368206f726967696e206d7573742062652060543a3a41646d696e4f726967696e602e38726573746f72655f6c65646765721001147374617368000130543a3a4163636f756e7449640001406d617962655f636f6e74726f6c6c6572f001504f7074696f6e3c543a3a4163636f756e7449643e00012c6d617962655f746f74616cd10101504f7074696f6e3c42616c616e63654f663c543e3e00013c6d617962655f756e6c6f636b696e67d5010115014f7074696f6e3c426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a0a4d6178556e6c6f636b696e674368756e6b733e3e001d2c0501526573746f72657320746865207374617465206f662061206c656467657220776869636820697320696e20616e20696e636f6e73697374656e742073746174652e00dc54686520726571756972656d656e747320746f20726573746f72652061206c6564676572206172652074686520666f6c6c6f77696e673a642a2054686520737461736820697320626f6e6465643b206f720d012a20546865207374617368206973206e6f7420626f6e64656420627574206974206861732061207374616b696e67206c6f636b206c65667420626568696e643b206f7225012a204966207468652073746173682068617320616e206173736f636961746564206c656467657220616e642069747320737461746520697320696e636f6e73697374656e743b206f721d012a20496620746865206c6564676572206973206e6f7420636f72727570746564202a6275742a20697473207374616b696e67206c6f636b206973206f7574206f662073796e632e00610154686520606d617962655f2a6020696e70757420706172616d65746572732077696c6c206f76657277726974652074686520636f72726573706f6e64696e67206461746120616e64206d65746164617461206f662074686559016c6564676572206173736f6369617465642077697468207468652073746173682e2049662074686520696e70757420706172616d657465727320617265206e6f74207365742c20746865206c65646765722077696c6c9062652072657365742076616c7565732066726f6d206f6e2d636861696e2073746174652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb501000002950100b9010c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000bd01103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000c101103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000c501103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401b901010c104e6f6f700000000c5365740400b9010104540001001852656d6f766500020000c901103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540194010c104e6f6f700000000c5365740400940104540001001852656d6f766500020000cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a90101185665633c543e0000d10104184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000d50104184f7074696f6e04045401d9010108104e6f6e6500000010536f6d650400d9010000010000d9010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd01045300000400e10101185665633c543e0000dd01083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565a501011c42616c616e636500010c65726171010120457261496e6465780000e101000002dd0100e5010c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973e901011c543a3a4b65797300011470726f6f6638011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee901083c77657374656e645f72756e74696d652c53657373696f6e4b657973000018011c6772616e647061bc01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265750101c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000138706172615f76616c696461746f72ed0101e03c496e697469616c697a6572206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300013c706172615f61737369676e6d656e74f10101f03c5061726153657373696f6e496e666f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f76657279f50101fc3c417574686f72697479446973636f76657279206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630001146265656679f90101c83c4265656679206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000ed01104c706f6c6b61646f745f7072696d6974697665730876373476616c696461746f725f617070185075626c69630000040004013c737232353531393a3a5075626c69630000f101104c706f6c6b61646f745f7072696d6974697665730876373861737369676e6d656e745f617070185075626c69630000040004013c737232353531393a3a5075626c69630000f5010c5873705f617574686f726974795f646973636f766572790c617070185075626c69630000040004013c737232353531393a3a5075626c69630000f9010c4873705f636f6e73656e7375735f62656566793065636473615f63727970746f185075626c696300000400fd01013465636473613a3a5075626c69630000fd0100000321000000080001020c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66050201c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66050201c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0502085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480134044e0110000801187365745f6964300114536574496400013065717569766f636174696f6e0902014845717569766f636174696f6e3c482c204e3e00000902085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480134044e011001081c507265766f746504000d020139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d6974040021020141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100000d02084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401bc0456011102045301150200100130726f756e645f6e756d62657230010c7536340001206964656e74697479bc0108496400011466697273741d02011828562c2053290001187365636f6e641d02011828562c20532900001102084066696e616c6974795f6772616e6470611c507265766f74650804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e000015020c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e61747572650000040019020148656432353531393a3a5369676e6174757265000019020000034000000008001d020000040811021502002102084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401bc0456012502045301150200100130726f756e645f6e756d62657230010c7536340001206964656e74697479bc0108496400011466697273742902011828562c2053290001187365636f6e642902011828562c20532900002502084066696e616c6974795f6772616e64706124507265636f6d6d69740804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e000029020000040825021502002d020c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c733102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578fc010c75313600011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c733102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e35020154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c733102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31020000025101003502083c77657374656e645f72756e74696d65304f726967696e43616c6c65720001141873797374656d0400390201746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c4f726967696e7304003d02017470616c6c65745f637573746f6d5f6f726967696e733a3a4f726967696e0023004050617261636861696e734f726967696e04004102016470617261636861696e735f6f726967696e3a3a4f726967696e0029002458636d50616c6c657404004902014870616c6c65745f78636d3a3a4f726967696e00630010566f69640400890201410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f69640004000039020c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200003d02143c77657374656e645f72756e74696d6528676f7665726e616e63651c6f726967696e735470616c6c65745f637573746f6d5f6f726967696e73184f726967696e00016c305374616b696e6741646d696e000000245472656173757265720001003c46656c6c6f777368697041646d696e0002003047656e6572616c41646d696e0003003041756374696f6e41646d696e000400284c6561736541646d696e0005004c5265666572656e64756d43616e63656c6c6572000600405265666572656e64756d4b696c6c65720007002c536d616c6c5469707065720008002442696754697070657200090030536d616c6c5370656e646572000a00344d656469756d5370656e646572000b00284269675370656e646572000c004457686974656c697374656443616c6c6572000d004c46656c6c6f7773686970496e69746961746573000e001c46656c6c6f7773000f004446656c6c6f7773686970457870657274730010004446656c6c6f77736869704d6173746572730011003846656c6c6f77736869703144616e0012003846656c6c6f77736869703244616e0013003846656c6c6f77736869703344616e0014003846656c6c6f77736869703444616e0015003846656c6c6f77736869703544616e0016003846656c6c6f77736869703644616e0017003846656c6c6f77736869703744616e0018003846656c6c6f77736869703844616e0019003846656c6c6f77736869703944616e001a00004102106c706f6c6b61646f745f72756e74696d655f70617261636861696e73186f726967696e1870616c6c6574184f726967696e0001042450617261636861696e0400450201185061726149640000000045020c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665730849640000040010010c753332000049020c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d04004d0201204c6f636174696f6e00000020526573706f6e736504004d0201204c6f636174696f6e000100004d02102c73746167696e675f78636d087634206c6f636174696f6e204c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72510201244a756e6374696f6e7300005102102c73746167696e675f78636d087634246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400550201484172633c5b4a756e6374696f6e3b20315d3e00010008583204006d0201484172633c5b4a756e6374696f6e3b20325d3e0002000858330400710201484172633c5b4a756e6374696f6e3b20335d3e0003000858340400750201484172633c5b4a756e6374696f6e3b20345d3e0004000858350400790201484172633c5b4a756e6374696f6e3b20355d3e00050008583604007d0201484172633c5b4a756e6374696f6e3b20365d3e0006000858370400810201484172633c5b4a756e6374696f6e3b20375d3e0007000858380400850201484172633c5b4a756e6374696f6e3b20385d3e000800005502000003010000005902005902102c73746167696e675f78636d087634206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e04007101010c7533320000002c4163636f756e744964333208011c6e6574776f726b5d0201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b5d0201444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b5d0201444f7074696f6e3c4e6574776f726b49643e00010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400a5010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c697479080108696465020118426f647949640001107061727469020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400610201244e6574776f726b4964000900005d0204184f7074696f6e0404540161020108104e6f6e6500000010536f6d650400610200000100006102102c73746167696e675f78636d087634206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a00006502100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040048011c5b75383b20345d00010014496e64657804007101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900006902100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e747101010c753332000100204672616374696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c753332000400006d02000003020000005902007102000003030000005902007502000003040000005902007902000003050000005902007d02000003060000005902008102000003070000005902008502000003080000005902008902081c73705f636f726510566f6964000100008d020c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000158346164645f72656769737472617204011c6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e00001c7841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e307365745f6964656e74697479040110696e666f9102016c426f783c543a3a4964656e74697479496e666f726d6174696f6e3e000128290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e207365745f73756273040110737562731d0301645665633c28543a3a4163636f756e7449642c2044617461293e0002248c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e38636c6561725f6964656e746974790003203901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e44726571756573745f6a756467656d656e740801247265675f696e64657871010138526567697374726172496e64657800011c6d61785f666565a501013042616c616e63654f663c543e00044094526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005286843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e1c7365745f666565080114696e64657871010138526567697374726172496e64657800010c666565a501013042616c616e63654f663c543e00061c1901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e387365745f6163636f756e745f6964080114696e64657871010138526567697374726172496e64657800010c6e6577950101504163636f756e7449644c6f6f6b75704f663c543e00071cbc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e287365745f6669656c6473080114696e64657871010138526567697374726172496e6465780001186669656c6473300129013c543a3a4964656e74697479496e666f726d6174696f6e206173204964656e74697479496e666f726d6174696f6e50726f76696465723e3a3a0a4669656c64734964656e74696669657200081ca853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e4470726f766964655f6a756467656d656e741001247265675f696e64657871010138526567697374726172496e646578000118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e742503015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e7469747934011c543a3a4861736800093cb850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e5d012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f726d6174696f6e50726f7669646572605d20666f72207468617420746865206a756467656d656e742069732c202070726f76696465642e00b04e6f74653a204a756467656d656e747320646f206e6f74206170706c7920746f206120757365726e616d652e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e346b696c6c5f6964656e74697479040118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e000a30410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e1c6164645f73756208010c737562950101504163636f756e7449644c6f6f6b75704f663c543e000110646174619d02011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c737562950101504163636f756e7449644c6f6f6b75704f663c543e000110646174619d02011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c737562950101504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e586164645f757365726e616d655f617574686f726974790c0124617574686f72697479950101504163636f756e7449644c6f6f6b75704f663c543e00011873756666697838011c5665633c75383e000128616c6c6f636174696f6e10010c753332000f10550141646420616e20604163636f756e744964602077697468207065726d697373696f6e20746f206772616e7420757365726e616d65732077697468206120676976656e20607375666669786020617070656e6465642e00590154686520617574686f726974792063616e206772616e7420757020746f2060616c6c6f636174696f6e6020757365726e616d65732e20546f20746f7020757020746865697220616c6c6f636174696f6e2c2074686579490173686f756c64206a75737420697373756520286f7220726571756573742076696120676f7665726e616e6365292061206e657720606164645f757365726e616d655f617574686f72697479602063616c6c2e6472656d6f76655f757365726e616d655f617574686f72697479040124617574686f72697479950101504163636f756e7449644c6f6f6b75704f663c543e001004c452656d6f76652060617574686f72697479602066726f6d2074686520757365726e616d6520617574686f7269746965732e407365745f757365726e616d655f666f720c010c77686f950101504163636f756e7449644c6f6f6b75704f663c543e000120757365726e616d6538011c5665633c75383e0001247369676e6174757265290301704f7074696f6e3c543a3a4f6666636861696e5369676e61747572653e0011240d015365742074686520757365726e616d6520666f72206077686f602e204d7573742062652063616c6c6564206279206120757365726e616d6520617574686f726974792e00550154686520617574686f72697479206d757374206861766520616e2060616c6c6f636174696f6e602e2055736572732063616e20656974686572207072652d7369676e20746865697220757365726e616d6573206f7248616363657074207468656d206c617465722e003c557365726e616d6573206d7573743ad820202d204f6e6c7920636f6e7461696e206c6f776572636173652041534349492063686172616374657273206f72206469676974732e350120202d205768656e20636f6d62696e656420776974682074686520737566666978206f66207468652069737375696e6720617574686f72697479206265205f6c657373207468616e5f207468656020202020604d6178557365726e616d654c656e677468602e3c6163636570745f757365726e616d65040120757365726e616d65d0012c557365726e616d653c543e0012084d01416363657074206120676976656e20757365726e616d65207468617420616e2060617574686f7269747960206772616e7465642e205468652063616c6c206d75737420696e636c756465207468652066756c6c88757365726e616d652c20617320696e2060757365726e616d652e737566666978602e5c72656d6f76655f657870697265645f617070726f76616c040120757365726e616d65d0012c557365726e616d653c543e00130c610152656d6f766520616e206578706972656420757365726e616d6520617070726f76616c2e2054686520757365726e616d652077617320617070726f76656420627920616e20617574686f7269747920627574206e657665725501616363657074656420627920746865207573657220616e64206d757374206e6f77206265206265796f6e64206974732065787069726174696f6e2e205468652063616c6c206d75737420696e636c756465207468659c66756c6c20757365726e616d652c20617320696e2060757365726e616d652e737566666978602e507365745f7072696d6172795f757365726e616d65040120757365726e616d65d0012c557365726e616d653c543e0014043101536574206120676976656e20757365726e616d6520617320746865207072696d6172792e2054686520757365726e616d652073686f756c6420696e636c75646520746865207375666669782e6072656d6f76655f64616e676c696e675f757365726e616d65040120757365726e616d65d0012c557365726e616d653c543e001508550152656d6f7665206120757365726e616d65207468617420636f72726573706f6e647320746f20616e206163636f756e742077697468206e6f206964656e746974792e20457869737473207768656e20612075736572c067657473206120757365726e616d6520627574207468656e2063616c6c732060636c6561725f6964656e74697479602e04704964656e746974792070616c6c6574206465636c61726174696f6e2e91020c3c70616c6c65745f6964656e74697479186c6567616379304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c95020190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c61799d020110446174610001146c6567616c9d0201104461746100010c7765629d0201104461746100011072696f749d02011044617461000114656d61696c9d0201104461746100013c7067705f66696e6765727072696e74190301404f7074696f6e3c5b75383b2032305d3e000114696d6167659d0201104461746100011c747769747465729d02011044617461000095020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019902045300000400150301185665633c543e00009902000004089d029d02009d020c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e6500000010526177300400a1020000010010526177310400a5020000020010526177320400a9020000030010526177330400ad020000040010526177340400480000050010526177350400b1020000060010526177360400b5020000070010526177370400b9020000080010526177380400bd020000090010526177390400c10200000a001452617731300400c50200000b001452617731310400c90200000c001452617731320400cd0200000d001452617731330400d10200000e001452617731340400d50200000f001452617731350400d902000010001452617731360400a8000011001452617731370400dd02000012001452617731380400e102000013001452617731390400e5020000140014526177323004009d01000015001452617732310400e902000016001452617732320400ed02000017001452617732330400f102000018001452617732340400f502000019001452617732350400f90200001a001452617732360400fd0200001b001452617732370400010300001c001452617732380400050300001d001452617732390400090300001e0014526177333004000d0300001f001452617733310400110300002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c53686154687265653235360400040000250000a102000003000000000800a502000003010000000800a902000003020000000800ad02000003030000000800b102000003050000000800b502000003060000000800b902000003070000000800bd02000003080000000800c102000003090000000800c5020000030a0000000800c9020000030b0000000800cd020000030c0000000800d1020000030d0000000800d5020000030e0000000800d9020000030f0000000800dd02000003110000000800e102000003120000000800e502000003130000000800e902000003150000000800ed02000003160000000800f102000003170000000800f502000003180000000800f902000003190000000800fd020000031a000000080001030000031b000000080005030000031c000000080009030000031d00000008000d030000031e000000080011030000031f00000008001503000002990200190304184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100001d03000002210300210300000408009d020025030c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000290304184f7074696f6e040454012d030108104e6f6e6500000010536f6d6504002d0300000100002d03082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040019020148656432353531393a3a5369676e61747572650000001c53723235353139040019020148737232353531393a3a5369676e617475726500010014456364736104003103014065636473613a3a5369676e617475726500020000310300000341000000080035030c3c70616c6c65745f7265636f766572791870616c6c65741043616c6c0404540001243061735f7265636f766572656408011c6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000020a053656e6420612063616c6c207468726f7567682061207265636f7665726564206163636f756e742e001101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746fe462652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e002c506172616d65746572733a21012d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f752077616e7420746f206d616b6520612063616c6c206f6e2d626568616c662d6f662efc2d206063616c6c603a205468652063616c6c20796f752077616e7420746f206d616b65207769746820746865207265636f7665726564206163636f756e742e347365745f7265636f76657265640801106c6f7374950101504163636f756e7449644c6f6f6b75704f663c543e00011c72657363756572950101504163636f756e7449644c6f6f6b75704f663c543e0001201901416c6c6f7720524f4f5420746f2062797061737320746865207265636f766572792070726f6365737320616e642073657420616e20612072657363756572206163636f756e7470666f722061206c6f7374206163636f756e74206469726563746c792e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f524f4f545f2e002c506172616d65746572733ab42d20606c6f7374603a2054686520226c6f7374206163636f756e742220746f206265207265636f76657265642e19012d206072657363756572603a20546865202272657363756572206163636f756e74222077686963682063616e2063616c6c20617320746865206c6f7374206163636f756e742e3c6372656174655f7265636f766572790c011c667269656e6473a90101445665633c543a3a4163636f756e7449643e0001247468726573686f6c64fc010c75313600013064656c61795f706572696f64100144426c6f636b4e756d626572466f723c543e00024059014372656174652061207265636f7665727920636f6e66696775726174696f6e20666f7220796f7572206163636f756e742e2054686973206d616b657320796f7572206163636f756e74207265636f76657261626c652e002d015061796d656e743a2060436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732062616c616e6365450177696c6c20626520726573657276656420666f722073746f72696e6720746865207265636f7665727920636f6e66696775726174696f6e2e2054686973206465706f7369742069732072657475726e6564b8696e2066756c6c207768656e2074686520757365722063616c6c73206072656d6f76655f7265636f76657279602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a49012d2060667269656e6473603a2041206c697374206f6620667269656e647320796f7520747275737420746f20766f75636820666f72207265636f7665727920617474656d7074732e2053686f756c64206265a820206f72646572656420616e6420636f6e7461696e206e6f206475706c69636174652076616c7565732e59012d20607468726573686f6c64603a20546865206e756d626572206f6620667269656e64732074686174206d75737420766f75636820666f722061207265636f7665727920617474656d7074206265666f726520746865550120206163636f756e742063616e206265207265636f76657265642e2053686f756c64206265206c657373207468616e206f7220657175616c20746f20746865206c656e677468206f6620746865206c697374206f66282020667269656e64732e4d012d206064656c61795f706572696f64603a20546865206e756d626572206f6620626c6f636b732061667465722061207265636f7665727920617474656d707420697320696e697469616c697a65642074686174d020206e6565647320746f2070617373206265666f726520746865206163636f756e742063616e206265207265636f76657265642e44696e6974696174655f7265636f7665727904011c6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e00032ce8496e697469617465207468652070726f6365737320666f72207265636f766572696e672061207265636f76657261626c65206163636f756e742e0019015061796d656e743a20605265636f766572794465706f736974602062616c616e63652077696c6c20626520726573657276656420666f7220696e6974696174696e672074686521017265636f766572792070726f636573732e2054686973206465706f7369742077696c6c20616c7761797320626520726570617472696174656420746f20746865206163636f756e74b4747279696e6720746f206265207265636f76657265642e205365652060636c6f73655f7265636f76657279602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a41012d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e2054686973206163636f756e74206e6565647320746f206265cc20207265636f76657261626c652028692e652e20686176652061207265636f7665727920636f6e66696775726174696f6e292e38766f7563685f7265636f766572790801106c6f7374950101504163636f756e7449644c6f6f6b75704f663c543e00011c72657363756572950101504163636f756e7449644c6f6f6b75704f663c543e0004302501416c6c6f7720612022667269656e6422206f662061207265636f76657261626c65206163636f756e7420746f20766f75636820666f7220616e20616374697665207265636f766572796470726f6365737320666f722074686174206163636f756e742e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520612022667269656e642270666f7220746865207265636f76657261626c65206163636f756e742e002c506172616d65746572733ad02d20606c6f7374603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e59012d206072657363756572603a20546865206163636f756e7420747279696e6720746f2072657363756520746865206c6f7374206163636f756e74207468617420796f752077616e7420746f20766f75636820666f722e00210154686520636f6d62696e6174696f6e206f662074686573652074776f20706172616d6574657273206d75737420706f696e7420746f20616e20616374697665207265636f766572792070726f636573732e38636c61696d5f7265636f7665727904011c6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e000524f0416c6c6f772061207375636365737366756c207265736375657220746f20636c61696d207468656972207265636f7665726564206163636f756e742e002901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d757374206265206120227265736375657222190177686f20686173207375636365737366756c6c7920636f6d706c6574656420746865206163636f756e74207265636f766572792070726f636573733a20636f6c6c65637465642d01607468726573686f6c6460206f72206d6f726520766f75636865732c20776169746564206064656c61795f706572696f646020626c6f636b732073696e636520696e6974696174696f6e2e002c506172616d65746572733a5d012d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f20636c61696d20686173206265656e207375636365737366756c6c79207265636f7665726564206279182020796f752e38636c6f73655f7265636f7665727904011c72657363756572950101504163636f756e7449644c6f6f6b75704f663c543e00062c110141732074686520636f6e74726f6c6c6572206f662061207265636f76657261626c65206163636f756e742c20636c6f736520616e20616374697665207265636f766572796470726f6365737320666f7220796f7572206163636f756e742e001d015061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e2c20746865207265636f76657261626c65206163636f756e742077696c6c2072656365697665f4746865207265636f76657279206465706f73697420605265636f766572794465706f7369746020706c616365642062792074686520726573637565722e000101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061ec7265636f76657261626c65206163636f756e74207769746820616e20616374697665207265636f766572792070726f6365737320666f722069742e002c506172616d65746572733a0d012d206072657363756572603a20546865206163636f756e7420747279696e6720746f207265736375652074686973207265636f76657261626c65206163636f756e742e3c72656d6f76655f7265636f7665727900072c590152656d6f766520746865207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205265636f7665726564206163636f756e747320617265207374696c6c2061636365737369626c652e0011014e4f54453a205468652075736572206d757374206d616b65207375726520746f2063616c6c2060636c6f73655f7265636f7665727960206f6e20616c6c2061637469766505017265636f7665727920617474656d707473206265666f72652063616c6c696e6720746869732066756e6374696f6e20656c73652069742077696c6c206661696c2e0021015061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e20746865207265636f76657261626c65206163636f756e742077696c6c20756e72657365727665947468656972207265636f7665727920636f6e66696775726174696f6e206465706f7369742ef02860436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e647329000101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061e07265636f76657261626c65206163636f756e742028692e652e206861732061207265636f7665727920636f6e66696775726174696f6e292e4063616e63656c5f7265636f766572656404011c6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e00081cdc43616e63656c20746865206162696c69747920746f20757365206061735f7265636f76657265646020666f7220606163636f756e74602e001101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746fe462652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e002c506172616d65746572733a15012d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f75206172652061626c6520746f2063616c6c206f6e2d626568616c662d6f662e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39030c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001181076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c653d0301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365950101504163636f756e7449644c6f6f6b75704f663c543e000118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c653d0301b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e74666f7263655f72656d6f76655f76657374696e675f7363686564756c650801187461726765749501018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001387363686564756c655f696e64657810010c7533320005187c466f7263652072656d6f766520612076657374696e67207363686564756c6500c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00c82d2060746172676574603a20416e206163636f756e7420746861742068617320612076657374696e67207363686564756c6515012d20607363686564756c655f696e646578603a205468652076657374696e67207363686564756c6520696e64657820746861742073686f756c642062652072656d6f766564040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000041030c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000128207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963450301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963450301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963450301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963450301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e247365745f72657472790c01107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0006305901536574206120726574727920636f6e66696775726174696f6e20666f722061207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069742077696c6c5501626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c2069742473756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3c7365745f72657472795f6e616d65640c010869640401205461736b4e616d6500011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0007305d01536574206120726574727920636f6e66696775726174696f6e20666f722061206e616d6564207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069745d0177696c6c20626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c3069742073756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3063616e63656c5f72657472790401107461736be001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e000804a852656d6f7665732074686520726574727920636f6e66696775726174696f6e206f662061207461736b2e4863616e63656c5f72657472795f6e616d656404010869640401205461736b4e616d65000904bc43616e63656c2074686520726574727920636f6e66696775726174696f6e206f662061206e616d6564207461736b2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e450304184f7074696f6e04045401e00108104e6f6e6500000010536f6d650400e0000001000049030c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657338011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736834011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736834011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736834011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e38656e737572655f757064617465640401186861736865734d0301305665633c543a3a486173683e00040cc4456e7375726520746861742074686520612062756c6b206f66207072652d696d616765732069732075706772616465642e003d015468652063616c6c65722070617973206e6f20666565206966206174206c6561737420393025206f66207072652d696d616765732077657265207375636365737366756c6c7920757064617465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d03000002340051030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577950101504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686f950101504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55030c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c950101504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465950101504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465950101504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065f80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e646578fc010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572950101504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f80130543a3a50726f787954797065000114696e646578fc010c75313600011868656967687471010144426c6f636b4e756d626572466f723c543e0001246578745f696e6465787101010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c950101504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c950101504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465950101504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465950101504163636f756e7449644c6f6f6b75704f663c543e0001107265616c950101504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e590304184f7074696f6e04045401f80108104e6f6e6500000010536f6d650400f800000100005d030c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573a90101445665633c543a3a4163636f756e7449643e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64fc010c7531360001446f746865725f7369676e61746f72696573a90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74610301904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64fc010c7531360001446f746865725f7369676e61746f72696573a90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74610301904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64fc010c7531360001446f746865725f7369676e61746f72696573a90101445665633c543a3a4163636f756e7449643e00012474696d65706f696e740501017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e610304184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000065030c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e690301b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e65737339040158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f72653d0401544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f72747341040158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6e690301b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f746572735504012c4f7074696f6e3c7533323e0001446d617962655f6d61785f746172676574735504012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6903089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453016d03000c0120736f6c7574696f6e6d0301045300011473636f726511010134456c656374696f6e53636f7265000114726f756e6410010c75333200006d03083c77657374656e645f72756e74696d65544e706f73436f6d70616374536f6c7574696f6e31360000400118766f74657331710300000118766f746573327d0300000118766f74657333910300000118766f746573349d0300000118766f74657335a90300000118766f74657336b50300000118766f74657337c10300000118766f74657338cd0300000118766f74657339d9030000011c766f7465733130e5030000011c766f7465733131f1030000011c766f7465733132fd030000011c766f746573313309040000011c766f746573313415040000011c766f746573313521040000011c766f74657331362d04000000710300000275030075030000040871017903007903000006fc007d0300000281030081030000040c71018503790300850300000408790389030089030000068d03008d030c3473705f61726974686d65746963287065725f7468696e67731850657255313600000400fc010c7531360000910300000295030095030000040c710199037903009903000003020000008503009d03000002a10300a1030000040c7101a503790300a50300000303000000850300a903000002ad0300ad030000040c7101b103790300b10300000304000000850300b503000002b90300b9030000040c7101bd03790300bd0300000305000000850300c103000002c50300c5030000040c7101c903790300c90300000306000000850300cd03000002d10300d1030000040c7101d503790300d50300000307000000850300d903000002dd0300dd030000040c7101e103790300e10300000308000000850300e503000002e90300e9030000040c7101ed03790300ed0300000309000000850300f103000002f50300f5030000040c7101f903790300f9030000030a000000850300fd0300000201040001040000040c7101050479030005040000030b00000085030009040000020d04000d040000040c7101110479030011040000030c000000850300150400000219040019040000040c71011d047903001d040000030d000000850300210400000225040025040000040c7101290479030029040000030e0000008503002d0400000231040031040000040c7101350479030035040000030f0000008503003904089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f746572737101010c75333200011c746172676574737101010c75333200003d0404184f7074696f6e0404540111010108104e6f6e6500000010536f6d650400110100000100004104000002450400450400000408004904004904084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f746572734d0401845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e00004d04000002510400510400000408001800550404184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000059040c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c08045400044900010c1472656261670401286469736c6f6361746564950101504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572950101504163636f756e7449644c6f6f6b75704f663c543e000128d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f663501746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e2046656520697320706179656420627920746865206f726967696e20756e64657220616c6c3863697263756d7374616e6365732e00384f6e6c7920776f726b732069663a00942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e547075745f696e5f66726f6e745f6f665f6f7468657208011c68656176696572950101504163636f756e7449644c6f6f6b75704f663c543e00011c6c696768746572950101504163636f756e7449644c6f6f6b75704f663c543e00020c110153616d65206173205b6050616c6c65743a3a7075745f696e5f66726f6e745f6f66605d2c206275742069742063616e2062652063616c6c656420627920616e796f6e652e00c8466565206973207061696420627920746865206f726967696e20756e64657220616c6c2063697263756d7374616e6365732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d040c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c04045400015c106a6f696e080118616d6f756e74a501013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400002845015374616b652066756e64732077697468206120706f6f6c2e2054686520616d6f756e7420746f20626f6e64206973207472616e736665727265642066726f6d20746865206d656d62657220746f20746865dc706f6f6c73206163636f756e7420616e6420696d6d6564696174656c7920696e637265617365732074686520706f6f6c7320626f6e642e001823204e6f746500cc2a20416e206163636f756e742063616e206f6e6c792062652061206d656d626572206f6620612073696e676c6520706f6f6c2ed82a20416e206163636f756e742063616e6e6f74206a6f696e207468652073616d6520706f6f6c206d756c7469706c652074696d65732e41012a20546869732063616c6c2077696c6c202a6e6f742a206475737420746865206d656d626572206163636f756e742c20736f20746865206d656d626572206d7573742068617665206174206c65617374c82020606578697374656e7469616c206465706f736974202b20616d6f756e746020696e207468656972206163636f756e742ed02a204f6e6c79206120706f6f6c2077697468205b60506f6f6c53746174653a3a4f70656e605d2063616e206265206a6f696e656428626f6e645f657874726104011465787472616104015c426f6e6445787472613c42616c616e63654f663c543e3e00011c4501426f6e642060657874726160206d6f72652066756e64732066726f6d20606f726967696e6020696e746f2074686520706f6f6c20746f207768696368207468657920616c72656164792062656c6f6e672e0049014164646974696f6e616c2066756e64732063616e20636f6d652066726f6d206569746865722074686520667265652062616c616e6365206f6620746865206163636f756e742c206f662066726f6d207468659c616363756d756c6174656420726577617264732c20736565205b60426f6e644578747261605d2e003d01426f6e64696e672065787472612066756e647320696d706c69657320616e206175746f6d61746963207061796f7574206f6620616c6c2070656e64696e6720726577617264732061732077656c6c2e09015365652060626f6e645f65787472615f6f746865726020746f20626f6e642070656e64696e672072657761726473206f6620606f7468657260206d656d626572732e30636c61696d5f7061796f757400022055014120626f6e646564206d656d6265722063616e20757365207468697320746f20636c61696d207468656972207061796f7574206261736564206f6e20746865207265776172647320746861742074686520706f6f6c610168617320616363756d756c617465642073696e6365207468656972206c61737420636c61696d6564207061796f757420284f522073696e6365206a6f696e696e6720696620746869732069732074686569722066697273743d0174696d6520636c61696d696e672072657761726473292e20546865207061796f75742077696c6c206265207472616e7366657272656420746f20746865206d656d6265722773206163636f756e742e004901546865206d656d6265722077696c6c206561726e20726577617264732070726f2072617461206261736564206f6e20746865206d656d62657273207374616b65207673207468652073756d206f6620746865d06d656d6265727320696e2074686520706f6f6c73207374616b652e205265776172647320646f206e6f742022657870697265222e0041015365652060636c61696d5f7061796f75745f6f746865726020746f20636c61696d2072657761726473206f6e20626568616c66206f6620736f6d6520606f746865726020706f6f6c206d656d6265722e18756e626f6e640801386d656d6265725f6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e7473a501013042616c616e63654f663c543e00037c4501556e626f6e6420757020746f2060756e626f6e64696e675f706f696e747360206f662074686520606d656d6265725f6163636f756e746027732066756e64732066726f6d2074686520706f6f6c2e2049744501696d706c696369746c7920636f6c6c65637473207468652072657761726473206f6e65206c6173742074696d652c2073696e6365206e6f7420646f696e6720736f20776f756c64206d65616e20736f6d656c7265776172647320776f756c6420626520666f726665697465642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00ac2320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463682e005d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e205468697320697320726566657265656420746f30202061732061206b69636b2ef42a2054686520706f6f6c2069732064657374726f79696e6720616e6420746865206d656d626572206973206e6f7420746865206465706f7369746f722e55012a2054686520706f6f6c2069732064657374726f79696e672c20746865206d656d62657220697320746865206465706f7369746f7220616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001101232320436f6e646974696f6e7320666f72207065726d697373696f6e65642064697370617463682028692e652e207468652063616c6c657220697320616c736f2074686548606d656d6265725f6163636f756e7460293a00882a205468652063616c6c6572206973206e6f7420746865206465706f7369746f722e55012a205468652063616c6c657220697320746865206465706f7369746f722c2074686520706f6f6c2069732064657374726f79696e6720616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001823204e6f7465001d0149662074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f20756e626f6e6420776974682074686520706f6f6c206163636f756e742c51015b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d2063616e2062652063616c6c656420746f2074727920616e64206d696e696d697a6520756e6c6f636b696e67206368756e6b732e5901546865205b605374616b696e67496e746572666163653a3a756e626f6e64605d2077696c6c20696d706c696369746c792063616c6c205b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d5501746f2074727920746f2066726565206368756e6b73206966206e6563657373617279202869652e20696620756e626f756e64207761732063616c6c656420616e64206e6f20756e6c6f636b696e67206368756e6b73610161726520617661696c61626c65292e20486f77657665722c206974206d6179206e6f7420626520706f737369626c6520746f2072656c65617365207468652063757272656e7420756e6c6f636b696e67206368756e6b732c5d01696e20776869636820636173652c2074686520726573756c74206f6620746869732063616c6c2077696c6c206c696b656c792062652074686520604e6f4d6f72654368756e6b7360206572726f722066726f6d207468653c7374616b696e672073797374656d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c753332000418550143616c6c206077697468647261775f756e626f6e6465646020666f722074686520706f6f6c73206163636f756e742e20546869732063616c6c2063616e206265206d61646520627920616e79206163636f756e742e004101546869732069732075736566756c2069662074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f2063616c6c2060756e626f6e64602c20616e6420736f6d65610163616e20626520636c6561726564206279207769746864726177696e672e20496e2074686520636173652074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b732c2074686520757365725101776f756c642070726f6261626c792073656520616e206572726f72206c696b6520604e6f4d6f72654368756e6b736020656d69747465642066726f6d20746865207374616b696e672073797374656d207768656e5c7468657920617474656d707420746f20756e626f6e642e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74950101504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200054c5501576974686472617720756e626f6e6465642066756e64732066726f6d20606d656d6265725f6163636f756e74602e204966206e6f20626f6e6465642066756e64732063616e20626520756e626f6e6465642c20616e486572726f722069732072657475726e65642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00a82320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463680009012a2054686520706f6f6c20697320696e2064657374726f79206d6f646520616e642074686520746172676574206973206e6f7420746865206465706f7369746f722e31012a205468652074617267657420697320746865206465706f7369746f7220616e6420746865792061726520746865206f6e6c79206d656d62657220696e207468652073756220706f6f6c732e0d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e00982320436f6e646974696f6e7320666f72207065726d697373696f6e656420646973706174636800e82a205468652063616c6c6572206973207468652074617267657420616e64207468657920617265206e6f7420746865206465706f7369746f722e001823204e6f746500ec4966207468652074617267657420697320746865206465706f7369746f722c2074686520706f6f6c2077696c6c2062652064657374726f7965642e18637265617465100118616d6f756e74a501013042616c616e63654f663c543e000110726f6f74950101504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72950101504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572950101504163636f756e7449644c6f6f6b75704f663c543e000644744372656174652061206e65772064656c65676174696f6e20706f6f6c2e002c2320417267756d656e74730055012a2060616d6f756e7460202d2054686520616d6f756e74206f662066756e647320746f2064656c656761746520746f2074686520706f6f6c2e205468697320616c736f2061637473206f66206120736f7274206f664d0120206465706f7369742073696e63652074686520706f6f6c732063726561746f722063616e6e6f742066756c6c7920756e626f6e642066756e647320756e74696c2074686520706f6f6c206973206265696e6730202064657374726f7965642e51012a2060696e64657860202d204120646973616d626967756174696f6e20696e64657820666f72206372656174696e6720746865206163636f756e742e204c696b656c79206f6e6c792075736566756c207768656ec020206372656174696e67206d756c7469706c6520706f6f6c7320696e207468652073616d652065787472696e7369632ed42a2060726f6f7460202d20546865206163636f756e7420746f20736574206173205b60506f6f6c526f6c65733a3a726f6f74605d2e0d012a20606e6f6d696e61746f7260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a6e6f6d696e61746f72605d2efc2a2060626f756e63657260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a626f756e636572605d2e001823204e6f7465006101496e206164646974696f6e20746f2060616d6f756e74602c207468652063616c6c65722077696c6c207472616e7366657220746865206578697374656e7469616c206465706f7369743b20736f207468652063616c6c65720d016e656564732061742068617665206174206c656173742060616d6f756e74202b206578697374656e7469616c5f6465706f73697460207472616e7366657261626c652e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e74a501013042616c616e63654f663c543e000110726f6f74950101504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72950101504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572950101504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c4964000718ec4372656174652061206e65772064656c65676174696f6e20706f6f6c207769746820612070726576696f75736c79207573656420706f6f6c206964002c2320417267756d656e7473009873616d6520617320606372656174656020776974682074686520696e636c7573696f6e206f66782a2060706f6f6c5f696460202d2060412076616c696420506f6f6c49642e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273a90101445665633c543a3a4163636f756e7449643e0008307c4e6f6d696e617465206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6c28726f6f7420726f6c652e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e001823204e6f7465005d01496e206164646974696f6e20746f20612060726f6f7460206f7220606e6f6d696e61746f726020726f6c65206f6620606f726967696e602c20706f6f6c2773206465706f7369746f72206e6565647320746f2068617665f86174206c6561737420606465706f7369746f725f6d696e5f626f6e646020696e2074686520706f6f6c20746f207374617274206e6f6d696e6174696e672e247365745f737461746508011c706f6f6c5f6964100118506f6f6c4964000114737461746525010124506f6f6c5374617465000928745365742061206e657720737461746520666f722074686520706f6f6c2e0055014966206120706f6f6c20697320616c726561647920696e20746865206044657374726f79696e67602073746174652c207468656e20756e646572206e6f20636f6e646974696f6e2063616e20697473207374617465346368616e676520616761696e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206569746865723a00dc312e207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686520706f6f6c2c5d01322e2069662074686520706f6f6c20636f6e646974696f6e7320746f206265206f70656e20617265204e4f54206d6574202861732064657363726962656420627920606f6b5f746f5f62655f6f70656e60292c20616e6439012020207468656e20746865207374617465206f662074686520706f6f6c2063616e206265207065726d697373696f6e6c6573736c79206368616e67656420746f206044657374726f79696e67602e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746138011c5665633c75383e000a10805365742061206e6577206d6574616461746120666f722074686520706f6f6c2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686514706f6f6c2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e6465040158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6465040158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c7369040134436f6e6669674f703c7533323e00012c6d61785f6d656d6265727369040134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c69040134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6e6d040144436f6e6669674f703c50657262696c6c3e000b2c410155706461746520636f6e66696775726174696f6e7320666f7220746865206e6f6d696e6174696f6e20706f6f6c732e20546865206f726967696e20666f7220746869732063616c6c206d757374206265605b60436f6e6669673a3a41646d696e4f726967696e605d2e002c2320417267756d656e747300a02a20606d696e5f6a6f696e5f626f6e6460202d20536574205b604d696e4a6f696e426f6e64605d2eb02a20606d696e5f6372656174655f626f6e6460202d20536574205b604d696e437265617465426f6e64605d2e842a20606d61785f706f6f6c7360202d20536574205b604d6178506f6f6c73605d2ea42a20606d61785f6d656d6265727360202d20536574205b604d6178506f6f6c4d656d62657273605d2ee42a20606d61785f6d656d626572735f7065725f706f6f6c60202d20536574205b604d6178506f6f6c4d656d62657273506572506f6f6c605d2ee02a2060676c6f62616c5f6d61785f636f6d6d697373696f6e60202d20536574205b60476c6f62616c4d6178436f6d6d697373696f6e605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f7471040158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f7271040158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e63657271040158436f6e6669674f703c543a3a4163636f756e7449643e000c1c745570646174652074686520726f6c6573206f662074686520706f6f6c2e003d0154686520726f6f7420697320746865206f6e6c7920656e7469747920746861742063616e206368616e676520616e79206f662074686520726f6c65732c20696e636c7564696e6720697473656c662cb86578636c7564696e6720746865206465706f7369746f722c2077686f2063616e206e65766572206368616e67652e005101497420656d69747320616e206576656e742c206e6f74696679696e6720554973206f662074686520726f6c65206368616e67652e2054686973206576656e742069732071756974652072656c6576616e7420746f1d016d6f737420706f6f6c206d656d6265727320616e6420746865792073686f756c6420626520696e666f726d6564206f66206368616e67657320746f20706f6f6c20726f6c65732e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d40704368696c6c206f6e20626568616c66206f662074686520706f6f6c2e004101546865206469737061746368206f726967696e206f6620746869732063616c6c2063616e206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6ca0726f6f7420726f6c652c2073616d65206173205b6050616c6c65743a3a6e6f6d696e617465605d2e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00ac2320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463683a59012a205768656e20706f6f6c206465706f7369746f7220686173206c657373207468616e20604d696e4e6f6d696e61746f72426f6e6460207374616b65642c206f74686572776973652020706f6f6c206d656d626572735c202061726520756e61626c6520746f20756e626f6e642e009c2320436f6e646974696f6e7320666f72207065726d697373696f6e65642064697370617463683ad82a205468652063616c6c6572206861732061206e6f6d696e61746f72206f7220726f6f7420726f6c65206f662074686520706f6f6c2e490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e40626f6e645f65787472615f6f746865720801186d656d626572950101504163636f756e7449644c6f6f6b75704f663c543e00011465787472616104015c426f6e6445787472613c42616c616e63654f663c543e3e000e245501606f726967696e6020626f6e64732066756e64732066726f6d206065787472616020666f7220736f6d6520706f6f6c206d656d62657220606d656d6265726020696e746f207468656972207265737065637469766518706f6f6c732e004901606f726967696e602063616e20626f6e642065787472612066756e64732066726f6d20667265652062616c616e6365206f722070656e64696e672072657761726473207768656e20606f726967696e203d3d1c6f74686572602e004501496e207468652063617365206f6620606f726967696e20213d206f74686572602c20606f726967696e602063616e206f6e6c7920626f6e642065787472612070656e64696e672072657761726473206f661501606f7468657260206d656d6265727320617373756d696e67207365745f636c61696d5f7065726d697373696f6e20666f722074686520676976656e206d656d626572206973c0605065726d697373696f6e6c657373436f6d706f756e6460206f7220605065726d697373696f6e6c657373416c6c602e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e7504013c436c61696d5065726d697373696f6e000f1c4901416c6c6f7773206120706f6f6c206d656d62657220746f20736574206120636c61696d207065726d697373696f6e20746f20616c6c6f77206f7220646973616c6c6f77207065726d697373696f6e6c65737360626f6e64696e6720616e64207769746864726177696e672e002c2320417267756d656e747300782a20606f726967696e60202d204d656d626572206f66206120706f6f6c2eb82a20607065726d697373696f6e60202d20546865207065726d697373696f6e20746f206265206170706c6965642e48636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010100101606f726967696e602063616e20636c61696d207061796f757473206f6e20736f6d6520706f6f6c206d656d62657220606f7468657260277320626568616c662e005501506f6f6c206d656d62657220606f7468657260206d7573742068617665206120605065726d697373696f6e6c657373576974686472617760206f7220605065726d697373696f6e6c657373416c6c6020636c61696da87065726d697373696f6e20666f7220746869732063616c6c20746f206265207375636365737366756c2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6e2901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e001114745365742074686520636f6d6d697373696f6e206f66206120706f6f6c2e5501426f7468206120636f6d6d697373696f6e2070657263656e7461676520616e64206120636f6d6d697373696f6e207061796565206d7573742062652070726f766964656420696e20746865206063757272656e74605d017475706c652e2057686572652061206063757272656e7460206f6620604e6f6e65602069732070726f76696465642c20616e792063757272656e7420636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e004d012d204966206120604e6f6e656020697320737570706c69656420746f20606e65775f636f6d6d697373696f6e602c206578697374696e6720636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e94011c50657262696c6c0012149453657420746865206d6178696d756d20636f6d6d697373696f6e206f66206120706f6f6c2e0039012d20496e697469616c206d61782063616e2062652073657420746f20616e79206050657262696c6c602c20616e64206f6e6c7920736d616c6c65722076616c75657320746865726561667465722e35012d2043757272656e7420636f6d6d697373696f6e2077696c6c206265206c6f776572656420696e20746865206576656e7420697420697320686967686572207468616e2061206e6577206d6178342020636f6d6d697373696f6e2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f726174653101019c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e001310a85365742074686520636f6d6d697373696f6e206368616e6765207261746520666f72206120706f6f6c2e003d01496e697469616c206368616e67652072617465206973206e6f7420626f756e6465642c20776865726561732073756273657175656e7420757064617465732063616e206f6e6c79206265206d6f7265747265737472696374697665207468616e207468652063757272656e742e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400141464436c61696d2070656e64696e6720636f6d6d697373696f6e2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e6564206279207468652060726f6f746020726f6c65206f662074686520706f6f6c2e2050656e64696e675d01636f6d6d697373696f6e2069732070616964206f757420616e6420616464656420746f20746f74616c20636c61696d656420636f6d6d697373696f6e602e20546f74616c2070656e64696e6720636f6d6d697373696f6e78697320726573657420746f207a65726f2e207468652063757272656e742e4c61646a7573745f706f6f6c5f6465706f73697404011c706f6f6c5f6964100118506f6f6c496400151cec546f70207570207468652064656669636974206f7220776974686472617720746865206578636573732045442066726f6d2074686520706f6f6c2e0051015768656e206120706f6f6c20697320637265617465642c2074686520706f6f6c206465706f7369746f72207472616e736665727320454420746f2074686520726577617264206163636f756e74206f66207468655501706f6f6c2e204544206973207375626a65637420746f206368616e676520616e64206f7665722074696d652c20746865206465706f73697420696e2074686520726577617264206163636f756e74206d61792062655101696e73756666696369656e7420746f20636f766572207468652045442064656669636974206f662074686520706f6f6c206f7220766963652d76657273612077686572652074686572652069732065786365737331016465706f73697420746f2074686520706f6f6c2e20546869732063616c6c20616c6c6f777320616e796f6e6520746f2061646a75737420746865204544206465706f736974206f6620746865f4706f6f6c2062792065697468657220746f7070696e67207570207468652064656669636974206f7220636c61696d696e6720746865206578636573732e7c7365745f636f6d6d697373696f6e5f636c61696d5f7065726d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001287065726d697373696f6e350101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e001610cc536574206f722072656d6f7665206120706f6f6c277320636f6d6d697373696f6e20636c61696d207065726d697373696f6e2e00610144657465726d696e65732077686f2063616e20636c61696d2074686520706f6f6c27732070656e64696e6720636f6d6d697373696f6e2e204f6e6c79207468652060526f6f746020726f6c65206f662074686520706f6f6cc869732061626c6520746f20636f6e66696775726520636f6d6d697373696f6e20636c61696d207065726d697373696f6e732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6104085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100006504085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200006904085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200006d04085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540194010c104e6f6f700000000c5365740400940104540001001852656d6f7665000200007104085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200007504085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000079040c4c70616c6c65745f666173745f756e7374616b651870616c6c65741043616c6c04045400010c5472656769737465725f666173745f756e7374616b65000068885265676973746572206f6e6573656c6620666f7220666173742d756e7374616b652e00482323204469737061746368204f726967696e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265202a7369676e65642a2062792077686f65766572206973207065726d697474656420746f2063616c6cf0756e626f6e642066756e647320627920746865207374616b696e672073797374656d2e20536565205b60436f6e6669673a3a5374616b696e67605d2e002823232044657461696c73003901546865207374617368206173736f636961746564207769746820746865206f726967696e206d7573742068617665206e6f206f6e676f696e6720756e6c6f636b696e67206368756e6b732e2049665d017375636365737366756c2c20746869732077696c6c2066756c6c7920756e626f6e6420616e64206368696c6c207468652073746173682e205468656e2c2069742077696c6c20656e71756575652074686520737461736880746f20626520636865636b656420696e206675727468657220626c6f636b732e0051014966206279207468652074696d6520746869732069732063616c6c65642c207468652073746173682069732061637475616c6c7920656c696769626c6520666f7220666173742d756e7374616b652c207468656e450174686579206172652067756172616e7465656420746f2072656d61696e20656c696769626c652c2062656361757365207468652063616c6c2077696c6c206368696c6c207468656d2061732077656c6c2e003d0149662074686520636865636b20776f726b732c2074686520656e74697265207374616b696e6720646174612069732072656d6f7665642c20692e652e207468652073746173682069732066756c6c7924756e7374616b65642e005d0149662074686520636865636b206661696c732c207468652073746173682072656d61696e73206368696c6c656420616e642077616974696e6720666f72206265696e6720756e626f6e64656420617320696e20776974686101746865206e6f726d616c207374616b696e672073797374656d2c206275742074686579206c6f73652070617274206f6620746865697220756e626f6e64696e67206368756e6b732064756520746f20636f6e73756d696e675874686520636861696e2773207265736f75726365732e00242323204576656e7473000901536f6d65206576656e74732066726f6d20746865207374616b696e6720616e642063757272656e63792073797374656d206d6967687420626520656d69747465642e2864657265676973746572000148a444657265676973746572206f6e6573656c662066726f6d2074686520666173742d756e7374616b652e00482323204469737061746368204f726967696e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265202a7369676e65642a2062792077686f65766572206973207065726d697474656420746f2063616c6cf0756e626f6e642066756e647320627920746865207374616b696e672073797374656d2e20536565205b60436f6e6669673a3a5374616b696e67605d2e002823232044657461696c73006101546869732069732075736566756c206966206f6e6520697320726567697374657265642c207468657920617265207374696c6c2077616974696e672c20616e642074686579206368616e6765207468656972206d696e642e0059014e6f7465207468617420746865206173736f636961746564207374617368206973207374696c6c2066756c6c7920756e626f6e64656420616e64206368696c6c6564206173206120636f6e73657175656e6365206f66590163616c6c696e67205b6050616c6c65743a3a72656769737465725f666173745f756e7374616b65605d2e205468657265666f72652c20746869732073686f756c642070726f6261626c7920626520666f6c6c6f776564b0627920612063616c6c20746f20607265626f6e646020696e20746865207374616b696e672073797374656d2e00242323204576656e7473000901536f6d65206576656e74732066726f6d20746865207374616b696e6720616e642063757272656e63792073797374656d206d6967687420626520656d69747465642e1c636f6e74726f6c040134657261735f746f5f636865636b100120457261496e64657800023494436f6e74726f6c20746865206f7065726174696f6e206f6620746869732070616c6c65742e00482323204469737061746368204f726967696e000d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205b60436f6e6669673a3a436f6e74726f6c4f726967696e605d2e002823232044657461696c7300410143616e2073657420746865206e756d626572206f66206572617320746f20636865636b2070657220626c6f636b2c20616e6420706f74656e7469616c6c79206f746865722061646d696e20776f726b2e00242323204576656e747300a44e6f206576656e74732061726520656d69747465642066726f6d20746869732064697370617463682e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d040c6070616c6c65745f636f6e76696374696f6e5f766f74696e671870616c6c65741043616c6c08045400044900011810766f7465080128706f6c6c5f696e64657871010144506f6c6c496e6465784f663c542c20493e000110766f7465810401704163636f756e74566f74653c42616c616e63654f663c542c20493e3e0000241901566f746520696e206120706f6c6c2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00c82d2060706f6c6c5f696e646578603a2054686520696e646578206f662074686520706f6c6c20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e0015015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f6620706f6c6c732074686520766f7465722068617320766f746564206f6e2e2064656c6567617465100114636c617373fc0134436c6173734f663c542c20493e000108746f950101504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e89040128436f6e76696374696f6e00011c62616c616e636518013c42616c616e63654f663c542c20493e00015c4d0144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e7420666f72206168706172746963756c617220636c617373206f6620706f6c6c732e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72450120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f766564207468726f7567684c202020206072656d6f76655f766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e5d012d2060636c617373603a2054686520636c617373206f6620706f6c6c7320746f2064656c65676174652e20546f2064656c6567617465206d756c7469706c6520636c61737365732c206d756c7469706c652063616c6c73802020746f20746869732066756e6374696f6e206172652072657175697265642e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e0025015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f6620706f6c6c732074686520766f7465722064656c65676174696e6720746f206861734d012020766f746564206f6e2e2057656967687420697320696e697469616c6c792063686172676564206173206966206d6178696d756d20766f7465732c2062757420697320726566756e646564206c617465722e28756e64656c6567617465040114636c617373fc0134436c6173734f663c542c20493e0002384d01556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e7420666f72206120706172746963756c617220636c617373206f6620706f6c6c732e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f6409016f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e207761732069737375656420686173207061737365642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e00f02d2060636c617373603a2054686520636c617373206f6620706f6c6c7320746f2072656d6f7665207468652064656c65676174696f6e2066726f6d2e0050456d6974732060556e64656c656761746564602e0025015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f6620706f6c6c732074686520766f7465722064656c65676174696e6720746f206861734d012020766f746564206f6e2e2057656967687420697320696e697469616c6c792063686172676564206173206966206d6178696d756d20766f7465732c2062757420697320726566756e646564206c617465722e18756e6c6f636b080114636c617373fc0134436c6173734f663c542c20493e000118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e0003245d0152656d6f766520746865206c6f636b20636175736564206279207072696f7220766f74696e672f64656c65676174696e672077686963682068617320657870697265642077697468696e206120706172746963756c617218636c6173732e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00a02d2060636c617373603a2054686520636c617373206f6620706f6c6c7320746f20756e6c6f636b2eb82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465080114636c6173738d0401544f7074696f6e3c436c6173734f663c542c20493e3e000114696e646578100144506f6c6c496e6465784f663c542c20493e0004746452656d6f7665206120766f746520666f72206120706f6c6c2e000c49663a702d2074686520706f6c6c207761732063616e63656c6c65642c206f72642d2074686520706f6c6c206973206f6e676f696e672c206f72782d2074686520706f6c6c2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e009049662c20686f77657665722c2074686520706f6c6c2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465707265676973746572656420666f7220706f6c6c2060696e646578602e00dc2d2060696e646578603a2054686520696e646578206f6620706f6c6c206f662074686520766f746520746f2062652072656d6f7665642e55012d2060636c617373603a204f7074696f6e616c20706172616d657465722c20696620676976656e20697420696e646963617465732074686520636c617373206f662074686520706f6c6c2e20466f7220706f6c6c73f02020776869636820686176652066696e6973686564206f72206172652063616e63656c6c65642c2074686973206d7573742062652060536f6d65602e0045015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f6620706f6c6c7320746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f74650c0118746172676574950101504163636f756e7449644c6f6f6b75704f663c543e000114636c617373fc0134436c6173734f663c542c20493e000114696e646578100144506f6c6c496e6465784f663c542c20493e0005406452656d6f7665206120766f746520666f72206120706f6c6c2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c250165697468657220626563617573652074686520706f6c6c207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f73742074686520706f6c6c206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e0061012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f7220706f6c6c28202060696e646578602edc2d2060696e646578603a2054686520696e646578206f6620706f6c6c206f662074686520766f746520746f2062652072656d6f7665642e842d2060636c617373603a2054686520636c617373206f662074686520706f6c6c2e0045015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f6620706f6c6c7320746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81040c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f74652c4163636f756e74566f7465041c42616c616e63650118010c205374616e64617264080110766f746585040110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e63650001003053706c69744162737461696e0c010c61796518011c42616c616e636500010c6e617918011c42616c616e636500011c6162737461696e18011c42616c616e63650002000085040c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f746510566f7465000004000800000089040c6070616c6c65745f636f6e76696374696f6e5f766f74696e6728636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b65643678000600008d0404184f7074696f6e04045401fc0108104e6f6e6500000010536f6d650400fc000001000091040c4070616c6c65745f7265666572656e64611870616c6c65741043616c6c080454000449000124187375626d69740c013c70726f706f73616c5f6f726967696e3502015c426f783c50616c6c6574734f726967696e4f663c543e3e00012070726f706f73616c4d01014c426f756e64656443616c6c4f663c542c20493e000140656e6163746d656e745f6d6f6d656e749504017c446973706174636854696d653c426c6f636b4e756d626572466f723c543e3e000024b050726f706f73652061207265666572656e64756d206f6e20612070726976696c6567656420616374696f6e2e0059012d20606f726967696e603a206d75737420626520605375626d69744f726967696e6020616e6420746865206163636f756e74206d757374206861766520605375626d697373696f6e4465706f736974602066756e6473302020617661696c61626c652e2d012d206070726f706f73616c5f6f726967696e603a20546865206f726967696e2066726f6d207768696368207468652070726f706f73616c2073686f756c642062652065786563757465642e6c2d206070726f706f73616c603a205468652070726f706f73616c2e15012d2060656e6163746d656e745f6d6f6d656e74603a20546865206d6f6d656e742074686174207468652070726f706f73616c2073686f756c6420626520656e61637465642e0048456d69747320605375626d6974746564602e58706c6163655f6465636973696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e646578000120ac506f737420746865204465636973696f6e204465706f73697420666f722061207265666572656e64756d2e0039012d20606f726967696e603a206d75737420626520605369676e65646020616e6420746865206163636f756e74206d75737420686176652066756e647320617661696c61626c6520666f7220746865a020207265666572656e64756d277320747261636b2773204465636973696f6e204465706f7369742e51012d2060696e646578603a2054686520696e646578206f6620746865207375626d6974746564207265666572656e64756d2077686f7365204465636973696f6e204465706f7369742069732079657420746f206265242020706f737465642e0078456d69747320604465636973696f6e4465706f736974506c61636564602e5c726566756e645f6465636973696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e64657800021c2901526566756e6420746865204465636973696f6e204465706f73697420666f72206120636c6f736564207265666572656e64756d206261636b20746f20746865206465706f7369746f722e009c2d20606f726967696e603a206d75737420626520605369676e656460206f722060526f6f74602e4d012d2060696e646578603a2054686520696e646578206f66206120636c6f736564207265666572656e64756d2077686f7365204465636973696f6e204465706f73697420686173206e6f7420796574206265656e2c2020726566756e6465642e0080456d69747320604465636973696f6e4465706f736974526566756e646564602e1863616e63656c040114696e64657810013c5265666572656e64756d496e6465780003187443616e63656c20616e206f6e676f696e67207265666572656e64756d2e009c2d20606f726967696e603a206d75737420626520746865206043616e63656c4f726967696e602edc2d2060696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2062652063616e63656c6c65642e0048456d697473206043616e63656c6c6564602e106b696c6c040114696e64657810013c5265666572656e64756d496e646578000418d043616e63656c20616e206f6e676f696e67207265666572656e64756d20616e6420736c61736820746865206465706f736974732e00942d20606f726967696e603a206d7573742062652074686520604b696c6c4f726967696e602edc2d2060696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2062652063616e63656c6c65642e0090456d69747320604b696c6c65646020616e6420604465706f736974536c6173686564602e406e756467655f7265666572656e64756d040114696e64657810013c5265666572656e64756d496e6465780005101d01416476616e63652061207265666572656e64756d206f6e746f20697473206e657874206c6f676963616c2073746174652e204f6e6c79207573656420696e7465726e616c6c792e006c2d20606f726967696e603a206d7573742062652060526f6f74602ea42d2060696e646578603a20746865207265666572656e64756d20746f20626520616476616e6365642e486f6e655f66657765725f6465636964696e67040114747261636bfc013c547261636b49644f663c542c20493e0006240901416476616e6365206120747261636b206f6e746f20697473206e657874206c6f676963616c2073746174652e204f6e6c79207573656420696e7465726e616c6c792e006c2d20606f726967696e603a206d7573742062652060526f6f74602e902d2060747261636b603a2074686520747261636b20746f20626520616476616e6365642e005101416374696f6e206974656d20666f72207768656e207468657265206973206e6f77206f6e65206665776572207265666572656e64756d20696e20746865206465636964696e6720706861736520616e64207468651501604465636964696e67436f756e7460206973206e6f742079657420757064617465642e2054686973206d65616e7320746861742077652073686f756c64206569746865723a25012d20626567696e206465636964696e6720616e6f74686572207265666572656e64756d2028616e64206c6561766520604465636964696e67436f756e746020616c6f6e65293b206f72702d2064656372656d656e7420604465636964696e67436f756e74602e64726566756e645f7375626d697373696f6e5f6465706f736974040114696e64657810013c5265666572656e64756d496e64657800071c3101526566756e6420746865205375626d697373696f6e204465706f73697420666f72206120636c6f736564207265666572656e64756d206261636b20746f20746865206465706f7369746f722e009c2d20606f726967696e603a206d75737420626520605369676e656460206f722060526f6f74602e55012d2060696e646578603a2054686520696e646578206f66206120636c6f736564207265666572656e64756d2077686f7365205375626d697373696f6e204465706f73697420686173206e6f7420796574206265656e2c2020726566756e6465642e0088456d69747320605375626d697373696f6e4465706f736974526566756e646564602e307365745f6d65746164617461080114696e64657810013c5265666572656e64756d496e6465780001286d617962655f686173689904013c4f7074696f6e3c543a3a486173683e00081c98536574206f7220636c656172206d65746164617461206f662061207265666572656e64756d2e002c506172616d65746572733a45012d20606f726967696e603a204d75737420626520605369676e65646020627920612063726561746f72206f662061207265666572656e64756d206f7220627920616e796f6e6520746f20636c65617220619020206d65746164617461206f6620612066696e6973686564207265666572656e64756d2e0d012d2060696e646578603a202054686520696e646578206f662061207265666572656e64756d20746f20736574206f7220636c656172206d6574616461746120666f722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e950410346672616d655f737570706f727418747261697473207363686564756c6530446973706174636854696d65042c426c6f636b4e756d62657201100108084174040010012c426c6f636b4e756d626572000000144166746572040010012c426c6f636b4e756d62657200010000990404184f7074696f6e04045401340108104e6f6e6500000010536f6d6504003400000100009d040c4070616c6c65745f77686974656c6973741870616c6c65741043616c6c0404540001103877686974656c6973745f63616c6c04012463616c6c5f6861736834011c543a3a486173680000005c72656d6f76655f77686974656c69737465645f63616c6c04012463616c6c5f6861736834011c543a3a486173680001006464697370617463685f77686974656c69737465645f63616c6c0c012463616c6c5f6861736834011c543a3a4861736800014063616c6c5f656e636f6465645f6c656e10010c75333200014c63616c6c5f7765696768745f7769746e6573732801185765696768740002009c64697370617463685f77686974656c69737465645f63616c6c5f776974685f707265696d61676504011063616c6c5101017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000300040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea1040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001243470726f706f73655f7370656e6408011476616c7565a501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279950101504163636f756e7449644c6f6f6b75704f663c543e0000409850757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c73610141206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642eb049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e003823232320436f6d706c6578697479182d204f28312900242323204576656e747300a0456d697473205b604576656e743a3a50726f706f736564605d206966207375636365737366756c2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f69647101013450726f706f73616c496e64657800013c6052656a65637420612070726f706f736564207370656e642e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c7394546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e003823232320436f6d706c6578697479182d204f28312900242323204576656e747300a0456d697473205b604576656e743a3a52656a6563746564605d206966207375636365737366756c2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f69647101013450726f706f73616c496e6465780002444c417070726f766520612070726f706f73616c2e00482323204469737061746368204f726967696e00884d757374206265205b60436f6e6669673a3a417070726f76654f726967696e605d2e002823232044657461696c73004d0141742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c646465706f7369742077696c6c2062652072657475726e65642e003823232320436f6d706c657869747920202d204f2831292e00242323204576656e747300a44e6f206576656e74732061726520656d69747465642066726f6d20746869732064697370617463682e2c7370656e645f6c6f63616c080118616d6f756e74a501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279950101504163636f756e7449644c6f6f6b75704f663c543e000344b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e00482323204469737061746368204f726967696e0045014d757374206265205b60436f6e6669673a3a5370656e644f726967696e605d207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e002c2323232044657461696c7345014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e003823232320506172616d657465727341012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e00242323204576656e747300b4456d697473205b604576656e743a3a5370656e64417070726f766564605d206966207375636365737366756c2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f69647101013450726f706f73616c496e6465780004542d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c7300c0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e003823232320506172616d6574657273a02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c003823232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c730028232323204572726f727345012d205b604572726f723a3a50726f706f73616c4e6f74417070726f766564605d3a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686551012020617070726f76616c2071756575652c20692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468655901202070726f706f73616c20646f6573206e6f7420657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f766564542020696e2074686520666972737420706c6163652e147370656e6410012861737365745f6b696e64a5040144426f783c543a3a41737365744b696e643e000118616d6f756e74a5010150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279c5040178426f783c42656e65666963696172794c6f6f6b75704f663c542c20493e3e00012876616c69645f66726f6d550401644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000568b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e00482323204469737061746368204f726967696e001d014d757374206265205b60436f6e6669673a3a5370656e644f726967696e605d207769746820746865206053756363657373602076616c7565206265696e67206174206c65617374550160616d6f756e7460206f66206061737365745f6b696e646020696e20746865206e61746976652061737365742e2054686520616d6f756e74206f66206061737365745f6b696e646020697320636f6e766572746564d4666f7220617373657274696f6e207573696e6720746865205b60436f6e6669673a3a42616c616e6365436f6e766572746572605d2e002823232044657461696c7300490143726561746520616e20617070726f766564207370656e6420666f72207472616e7366657272696e6720612073706563696669632060616d6f756e7460206f66206061737365745f6b696e646020746f2061610164657369676e617465642062656e65666963696172792e20546865207370656e64206d75737420626520636c61696d6564207573696e672074686520607061796f75746020646973706174636861626c652077697468696e74746865205b60436f6e6669673a3a5061796f7574506572696f64605d2e003823232320506172616d657465727315012d206061737365745f6b696e64603a20416e20696e64696361746f72206f662074686520737065636966696320617373657420636c61737320746f206265207370656e742e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602eb82d206062656e6566696369617279603a205468652062656e6566696369617279206f6620746865207370656e642e55012d206076616c69645f66726f6d603a2054686520626c6f636b206e756d6265722066726f6d20776869636820746865207370656e642063616e20626520636c61696d65642e2049742063616e20726566657220746f1901202074686520706173742069662074686520726573756c74696e67207370656e6420686173206e6f74207965742065787069726564206163636f7264696e6720746f20746865450120205b60436f6e6669673a3a5061796f7574506572696f64605d2e20496620604e6f6e65602c20746865207370656e642063616e20626520636c61696d656420696d6d6564696174656c792061667465722c2020617070726f76616c2e00242323204576656e747300c8456d697473205b604576656e743a3a41737365745370656e64417070726f766564605d206966207375636365737366756c2e187061796f7574040114696e6465781001285370656e64496e64657800064c38436c61696d2061207370656e642e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c730055015370656e6473206d75737420626520636c61696d65642077697468696e20736f6d652074656d706f72616c20626f756e64732e2041207370656e64206d617920626520636c61696d65642077697468696e206f6e65d45b60436f6e6669673a3a5061796f7574506572696f64605d2066726f6d20746865206076616c69645f66726f6d6020626c6f636b2e5501496e2063617365206f662061207061796f7574206661696c7572652c20746865207370656e6420737461747573206d75737420626520757064617465642077697468207468652060636865636b5f73746174757360dc646973706174636861626c65206265666f7265207265747279696e672077697468207468652063757272656e742066756e6374696f6e2e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e74730090456d697473205b604576656e743a3a50616964605d206966207375636365737366756c2e30636865636b5f737461747573040114696e6465781001285370656e64496e64657800074c2901436865636b2074686520737461747573206f6620746865207370656e6420616e642072656d6f76652069742066726f6d207468652073746f726167652069662070726f6365737365642e00482323204469737061746368204f726967696e003c4d757374206265207369676e65642e002823232044657461696c730001015468652073746174757320636865636b20697320612070726572657175697369746520666f72207265747279696e672061206661696c6564207061796f75742e490149662061207370656e64206861732065697468657220737563636565646564206f7220657870697265642c2069742069732072656d6f7665642066726f6d207468652073746f726167652062792074686973ec66756e6374696f6e2e20496e207375636820696e7374616e6365732c207472616e73616374696f6e20666565732061726520726566756e6465642e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e747300f8456d697473205b604576656e743a3a5061796d656e744661696c6564605d20696620746865207370656e64207061796f757420686173206661696c65642e0101456d697473205b604576656e743a3a5370656e6450726f636573736564605d20696620746865207370656e64207061796f75742068617320737563636565642e28766f69645f7370656e64040114696e6465781001285370656e64496e6465780008407c566f69642070726576696f75736c7920617070726f766564207370656e642e00482323204469737061746368204f726967696e00844d757374206265205b60436f6e6669673a3a52656a6563744f726967696e605d2e002823232044657461696c73001d0141207370656e6420766f6964206973206f6e6c7920706f737369626c6520696620746865207061796f757420686173206e6f74206265656e20617474656d70746564207965742e003823232320506172616d65746572736c2d2060696e646578603a20546865207370656e6420696e6465782e00242323204576656e747300c0456d697473205b604576656e743a3a41737365745370656e64566f69646564605d206966207375636365737366756c2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5040c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e14696d706c735c56657273696f6e65644c6f63617461626c6541737365740001080856330801206c6f636174696f6ea904014478636d3a3a76333a3a4c6f636174696f6e00012061737365745f6964bd04014078636d3a3a76333a3a417373657449640003000856340801206c6f636174696f6e4d02014478636d3a3a76343a3a4c6f636174696f6e00012061737365745f6964c104014078636d3a3a76343a3a4173736574496400040000a904102c73746167696e675f78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72ad0401244a756e6374696f6e730000ad04100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b10401204a756e6374696f6e0001000858320800b10401204a756e6374696f6e0000b10401204a756e6374696f6e0002000858330c00b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0003000858341000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0004000858351400b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0005000858361800b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0006000858371c00b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0007000858382000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e0000b10401204a756e6374696f6e00080000b104100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e04007101010c7533320000002c4163636f756e744964333208011c6e6574776f726bb50401444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bb50401444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bb50401444f7074696f6e3c4e6574776f726b49643e00010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400a5010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c697479080108696465020118426f647949640001107061727469020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400b90401244e6574776f726b496400090000b50404184f7074696f6e04045401b9040108104e6f6e6500000010536f6d650400b9040000010000b904100c78636d087633206a756e6374696f6e244e6574776f726b496400012c24427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657230010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090040506f6c6b61646f7442756c6c6574696e000a0000bd04100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400a90401344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000c104102c73746167696e675f78636d0876341461737365741c41737365744964000004004d0201204c6f636174696f6e0000c504080c78636d4456657273696f6e65644c6f636174696f6e00010c0856320400c904014476323a3a4d756c74694c6f636174696f6e0001000856330400a904014476333a3a4d756c74694c6f636174696f6e00030008563404004d02013076343a3a4c6f636174696f6e00040000c904100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72cd0401244a756e6374696f6e730000cd04100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400d10401204a756e6374696f6e0001000858320800d10401204a756e6374696f6e0000d10401204a756e6374696f6e0002000858330c00d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0003000858341000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0004000858351400d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0005000858361800d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0006000858371c00d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0007000858382000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e0000d10401204a756e6374696f6e00080000d104100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e04007101010c7533320000002c4163636f756e744964333208011c6e6574776f726bd50401244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bd50401244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bd50401244e6574776f726b496400010c6b65799d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400a5010110753132380005002847656e6572616c4b65790400d90401805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964dd040118426f6479496400011070617274e1040120426f64795061727400080000d5040c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400d90401805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000d9040c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003801185665633c543e0000dd040c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400d90401805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e64657804007101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000e1040c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e747101010c753332000100204672616374696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6d7101010c75333200011464656e6f6d7101010c75333200040000e504106c706f6c6b61646f745f72756e74696d655f70617261636861696e7334636f6e66696775726174696f6e1870616c6c65741043616c6c0404540001c07c7365745f76616c69646174696f6e5f757067726164655f636f6f6c646f776e04010c6e6577100144426c6f636b4e756d626572466f723c543e00000490536574207468652076616c69646174696f6e207570677261646520636f6f6c646f776e2e707365745f76616c69646174696f6e5f757067726164655f64656c617904010c6e6577100144426c6f636b4e756d626572466f723c543e00010484536574207468652076616c69646174696f6e20757067726164652064656c61792e647365745f636f64655f726574656e74696f6e5f706572696f6404010c6e6577100144426c6f636b4e756d626572466f723c543e000204d05365742074686520616363657074616e636520706572696f6420666f7220616e20696e636c756465642063616e6469646174652e447365745f6d61785f636f64655f73697a6504010c6e657710010c753332000304dc53657420746865206d61782076616c69646174696f6e20636f64652073697a6520666f7220696e636f6d696e672075706772616465732e407365745f6d61785f706f765f73697a6504010c6e657710010c753332000404c453657420746865206d617820504f5620626c6f636b2073697a6520666f7220696e636f6d696e672075706772616465732e587365745f6d61785f686561645f646174615f73697a6504010c6e657710010c7533320005049453657420746865206d6178206865616420646174612073697a6520666f722070617261732e487365745f636f726574696d655f636f72657304010c6e657710010c753332000610ac53657420746865206e756d626572206f6620636f726574696d6520657865637574696f6e20636f7265732e0051014e4f54453a2074686174207468697320636f6e66696775726174696f6e206973206d616e616765642062792074686520636f726574696d6520636861696e2e204f6e6c79206d616e75616c6c79206368616e6765b0746869732c20696620796f75207265616c6c79206b6e6f77207768617420796f752061726520646f696e6721747365745f6d61785f617661696c6162696c6974795f74696d656f75747304010c6e657710010c753332000704410153657420746865206d6178206e756d626572206f662074696d6573206120636c61696d206d61792074696d656f7574206f6e206120636f7265206265666f7265206974206973206162616e646f6e6564707365745f67726f75705f726f746174696f6e5f6672657175656e637904010c6e6577100144426c6f636b4e756d626572466f723c543e000804d0536574207468652070617261636861696e2076616c696461746f722d67726f757020726f746174696f6e206672657175656e6379747365745f70617261735f617661696c6162696c6974795f706572696f6404010c6e6577100144426c6f636b4e756d626572466f723c543e000904985365742074686520617661696c6162696c69747920706572696f6420666f722070617261732e607365745f7363686564756c696e675f6c6f6f6b616865616404010c6e657710010c753332000b04390153657420746865207363686564756c696e67206c6f6f6b61686561642c20696e206578706563746564206e756d626572206f6620626c6f636b73206174207065616b207468726f7567687075742e6c7365745f6d61785f76616c696461746f72735f7065725f636f726504010c6e65775504012c4f7074696f6e3c7533323e000c04ec53657420746865206d6178696d756d206e756d626572206f662076616c696461746f727320746f2061737369676e20746f20616e7920636f72652e487365745f6d61785f76616c696461746f727304010c6e65775504012c4f7074696f6e3c7533323e000d040d0153657420746865206d6178696d756d206e756d626572206f662076616c696461746f727320746f2075736520696e2070617261636861696e20636f6e73656e7375732e487365745f646973707574655f706572696f6404010c6e657710013053657373696f6e496e646578000e040d0153657420746865206469737075746520706572696f642c20696e206e756d626572206f662073657373696f6e7320746f206b65657020666f722064697370757465732eb47365745f646973707574655f706f73745f636f6e636c7573696f6e5f616363657074616e63655f706572696f6404010c6e6577100144426c6f636b4e756d626572466f723c543e000f04c853657420746865206469737075746520706f737420636f6e636c7573696f6e20616363657074616e636520706572696f642e447365745f6e6f5f73686f775f736c6f747304010c6e657710010c753332001208f853657420746865206e6f2073686f7720736c6f74732c20696e206e756d626572206f66206e756d626572206f6620636f6e73656e73757320736c6f74732e4c4d757374206265206174206c6561737420312e507365745f6e5f64656c61795f7472616e6368657304010c6e657710010c7533320013049c5365742074686520746f74616c206e756d626572206f662064656c6179207472616e636865732e787365745f7a65726f74685f64656c61795f7472616e6368655f776964746804010c6e657710010c7533320014048c53657420746865207a65726f74682064656c6179207472616e6368652077696474682e507365745f6e65656465645f617070726f76616c7304010c6e657710010c753332001504dc53657420746865206e756d626572206f662076616c696461746f7273206e656564656420746f20617070726f7665206120626c6f636b2e707365745f72656c61795f7672665f6d6f64756c6f5f73616d706c657304010c6e657710010c753332001604590153657420746865206e756d626572206f662073616d706c657320746f20646f206f6620746865206052656c61795652464d6f64756c6f6020617070726f76616c2061737369676e6d656e7420637269746572696f6e2e687365745f6d61785f7570776172645f71756575655f636f756e7404010c6e657710010c7533320017042d015365747320746865206d6178696d756d206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174206f6e63652e647365745f6d61785f7570776172645f71756575655f73697a6504010c6e657710010c7533320018084d015365747320746865206d6178696d756d20746f74616c2073697a65206f66206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174146f6e63652e747365745f6d61785f646f776e776172645f6d6573736167655f73697a6504010c6e657710010c7533320019049c5365742074686520637269746963616c20646f776e77617264206d6573736167652073697a652e6c7365745f6d61785f7570776172645f6d6573736167655f73697a6504010c6e657710010c753332001b042d015365747320746865206d6178696d756d2073697a65206f6620616e20757077617264206d65737361676520746861742063616e2062652073656e7420627920612063616e6469646174652ea07365745f6d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746504010c6e657710010c753332001c0405015365747320746865206d6178696d756d206e756d626572206f66206d65737361676573207468617420612063616e6469646174652063616e20636f6e7461696e2e647365745f68726d705f6f70656e5f726571756573745f74746c04010c6e657710010c753332001d0435015365747320746865206e756d626572206f662073657373696f6e7320616674657220776869636820616e2048524d50206f70656e206368616e6e656c207265717565737420657870697265732e5c7365745f68726d705f73656e6465725f6465706f73697404010c6e657718011c42616c616e6365001e045101536574732074686520616d6f756e74206f662066756e64732074686174207468652073656e6465722073686f756c642070726f7669646520666f72206f70656e696e6720616e2048524d50206368616e6e656c2e687365745f68726d705f726563697069656e745f6465706f73697404010c6e657718011c42616c616e6365001f086101536574732074686520616d6f756e74206f662066756e647320746861742074686520726563697069656e742073686f756c642070726f7669646520666f7220616363657074696e67206f70656e696e6720616e2048524d50206368616e6e656c2e747365745f68726d705f6368616e6e656c5f6d61785f636170616369747904010c6e657710010c7533320020041d015365747320746865206d6178696d756d206e756d626572206f66206d6573736167657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e7c7365745f68726d705f6368616e6e656c5f6d61785f746f74616c5f73697a6504010c6e657710010c75333200210451015365747320746865206d6178696d756d20746f74616c2073697a65206f66206d6573736167657320696e20627974657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e9c7365745f68726d705f6d61785f70617261636861696e5f696e626f756e645f6368616e6e656c7304010c6e657710010c75333200220449015365747320746865206d6178696d756d206e756d626572206f6620696e626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206163636570742e847365745f68726d705f6368616e6e656c5f6d61785f6d6573736167655f73697a6504010c6e657710010c7533320024043d015365747320746865206d6178696d756d2073697a65206f662061206d657373616765207468617420636f756c6420657665722062652070757420696e746f20616e2048524d50206368616e6e656c2ea07365745f68726d705f6d61785f70617261636861696e5f6f7574626f756e645f6368616e6e656c7304010c6e657710010c75333200250445015365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206f70656e2e987365745f68726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746504010c6e657710010c75333200270435015365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206d657373616765732063616e2062652073656e7420627920612063616e6469646174652e487365745f7076665f766f74696e675f74746c04010c6e657710013053657373696f6e496e646578002a04510153657420746865206e756d626572206f662073657373696f6e206368616e676573206166746572207768696368206120505646207072652d636865636b696e6720766f74696e672069732072656a65637465642e907365745f6d696e696d756d5f76616c69646174696f6e5f757067726164655f64656c617904010c6e6577100144426c6f636b4e756d626572466f723c543e002b1055015365747320746865206d696e696d756d2064656c6179206265747765656e20616e6e6f756e63696e6720746865207570677261646520626c6f636b20666f7220612070617261636861696e20756e74696c2074686554757067726164652074616b696e6720706c6163652e00390153656520746865206669656c6420646f63756d656e746174696f6e20666f7220696e666f726d6174696f6e20616e6420636f6e73747261696e747320666f7220746865206e65772076616c75652e707365745f6279706173735f636f6e73697374656e63795f636865636b04010c6e6577200110626f6f6c002c084d0153657474696e67207468697320746f20747275652077696c6c2064697361626c6520636f6e73697374656e637920636865636b7320666f722074686520636f6e66696775726174696f6e20736574746572732e4455736520776974682063617574696f6e2e607365745f6173796e635f6261636b696e675f706172616d7304010c6e6577e90401484173796e634261636b696e67506172616d73002d04a053657420746865206173796e6368726f6e6f7573206261636b696e6720706172616d65746572732e4c7365745f6578656375746f725f706172616d7304010c6e6577ed0401384578656375746f72506172616d73002e047053657420505646206578656375746f7220706172616d65746572732e587365745f6f6e5f64656d616e645f626173655f66656504010c6e657718011c42616c616e6365002f04a453657420746865206f6e2064656d616e6420287061726174687265616473292062617365206665652e747365745f6f6e5f64656d616e645f6665655f766172696162696c69747904010c6e657794011c50657262696c6c003004c053657420746865206f6e2064656d616e6420287061726174687265616473292066656520766172696162696c6974792e707365745f6f6e5f64656d616e645f71756575655f6d61785f73697a6504010c6e657710010c753332003104bc53657420746865206f6e2064656d616e642028706172617468726561647329207175657565206d61782073697a652e987365745f6f6e5f64656d616e645f7461726765745f71756575655f7574696c697a6174696f6e04010c6e657794011c50657262696c6c003204c053657420746865206f6e2064656d616e6420287061726174687265616473292066656520766172696162696c6974792e447365745f6f6e5f64656d616e645f74746c04010c6e6577100144426c6f636b4e756d626572466f723c543e003304d853657420746865206f6e2064656d616e6420287061726174687265616473292074746c20696e2074686520636c61696d71756575652e647365745f6d696e696d756d5f6261636b696e675f766f74657304010c6e657710010c753332003404a053657420746865206d696e696d756d206261636b696e6720766f746573207468726573686f6c642e407365745f6e6f64655f66656174757265080114696e646578080108753800011476616c7565200110626f6f6c003504645365742f556e7365742061206e6f646520666561747572652e687365745f617070726f76616c5f766f74696e675f706172616d7304010c6e657701050150417070726f76616c566f74696e67506172616d730036046c53657420617070726f76616c2d766f74696e672d706172616d732e507365745f7363686564756c65725f706172616d7304010c6e6577050501885363686564756c6572506172616d733c426c6f636b4e756d626572466f723c543e3e00370454536574207363686564756c65722d706172616d732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee904104c706f6c6b61646f745f7072696d697469766573087637346173796e635f6261636b696e67484173796e634261636b696e67506172616d73000008014c6d61785f63616e6469646174655f646570746810010c753332000150616c6c6f7765645f616e6365737472795f6c656e10010c7533320000ed04104c706f6c6b61646f745f7072696d6974697665730876373c6578656375746f725f706172616d73384578656375746f72506172616d7300000400f10401485665633c4578656375746f72506172616d3e0000f104000002f50400f504104c706f6c6b61646f745f7072696d6974697665730876373c6578656375746f725f706172616d73344578656375746f72506172616d00011c384d61784d656d6f72795061676573040010010c7533320001003c537461636b4c6f676963616c4d6178040010010c75333200020038537461636b4e61746976654d6178040010010c75333200030050507265636865636b696e674d61784d656d6f7279040030010c753634000400385076665072657054696d656f75740800f904012c507666507265704b696e64000030010c753634000500385076664578656354696d656f75740800fd04012c507666457865634b696e64000030010c753634000600445761736d45787442756c6b4d656d6f727900070000f9040c4c706f6c6b61646f745f7072696d6974697665730876372c507666507265704b696e6400010820507265636865636b0000001c5072657061726500010000fd040c4c706f6c6b61646f745f7072696d6974697665730876372c507666457865634b696e640001081c4261636b696e6700000020417070726f76616c0001000001050c4c706f6c6b61646f745f7072696d69746976657308763750417070726f76616c566f74696e67506172616d73000004016c6d61785f617070726f76616c5f636f616c657363655f636f756e7410010c753332000005050c4c706f6c6b61646f745f7072696d697469766573207673746167696e673c5363686564756c6572506172616d73042c426c6f636b4e756d6265720110002c016067726f75705f726f746174696f6e5f6672657175656e637910012c426c6f636b4e756d62657200016470617261735f617661696c6162696c6974795f706572696f6410012c426c6f636b4e756d62657200015c6d61785f76616c696461746f72735f7065725f636f72655504012c4f7074696f6e3c7533323e0001246c6f6f6b616865616410010c7533320001246e756d5f636f72657310010c7533320001646d61785f617661696c6162696c6974795f74696d656f75747310010c7533320001606f6e5f64656d616e645f71756575655f6d61785f73697a6510010c7533320001886f6e5f64656d616e645f7461726765745f71756575655f7574696c697a6174696f6e94011c50657262696c6c0001646f6e5f64656d616e645f6665655f766172696162696c69747994011c50657262696c6c0001486f6e5f64656d616e645f626173655f66656518011c42616c616e636500010c74746c10012c426c6f636b4e756d62657200000905106c706f6c6b61646f745f72756e74696d655f70617261636861696e73187368617265641870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0d05106c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1105106c706f6c6b61646f745f72756e74696d655f70617261636861696e733870617261735f696e686572656e741870616c6c65741043616c6c04045400010414656e746572040110646174611505019050617261636861696e73496e686572656e74446174613c486561646572466f723c543e3e0000043101456e7465722074686520706172617320696e686572656e742e20546869732077696c6c2070726f63657373206269746669656c647320616e64206261636b65642063616e646964617465732e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15050c4c706f6c6b61646f745f7072696d69746976657308763730496e686572656e7444617461040c484452016d01001001246269746669656c647319050190556e636865636b65645369676e6564417661696c6162696c6974794269746669656c64730001446261636b65645f63616e646964617465733505017c5665633c4261636b656443616e6469646174653c4844523a3a486173683e3e0001206469737075746573790501604d756c74694469737075746553746174656d656e74536574000134706172656e745f6865616465726d01010c484452000019050000021d05001d05104c706f6c6b61646f745f7072696d697469766573087637187369676e65643c556e636865636b65645369676e6564081c5061796c6f61640121052c5265616c5061796c6f6164012105000c011c7061796c6f61642105011c5061796c6f616400013c76616c696461746f725f696e6465782d05013856616c696461746f72496e6465780001247369676e61747572653105014856616c696461746f725369676e6174757265000021050c4c706f6c6b61646f745f7072696d69746976657308763750417661696c6162696c6974794269746669656c64000004002505017c4269745665633c75382c206269747665633a3a6f726465723a3a4c7362303e000025050000070829050029050c18626974766563146f72646572104c736230000000002d050c4c706f6c6b61646f745f7072696d6974697665730876373856616c696461746f72496e6465780000040010010c75333200003105104c706f6c6b61646f745f7072696d6974697665730876373476616c696461746f725f617070245369676e61747572650000040019020148737232353531393a3a5369676e61747572650000350500000239050039050c4c706f6c6b61646f745f7072696d6974697665730876373c4261636b656443616e6469646174650404480134000c012463616e6469646174653d050170436f6d6d697474656443616e646964617465526563656970743c483e00013876616c69646974795f766f746573710501605665633c56616c69646974794174746573746174696f6e3e00014476616c696461746f725f696e64696365732505017c4269745665633c75382c206269747665633a3a6f726465723a3a4c7362303e00003d050c4c706f6c6b61646f745f7072696d69746976657308763764436f6d6d697474656443616e6469646174655265636569707404044801340008012864657363726970746f724105015843616e64696461746544657363726970746f723c483e00012c636f6d6d69746d656e74735105015043616e646964617465436f6d6d69746d656e7473000041050c4c706f6c6b61646f745f7072696d6974697665730876374c43616e64696461746544657363726970746f7204044801340024011c706172615f696445020108496400013072656c61795f706172656e7434010448000120636f6c6c61746f7245050128436f6c6c61746f7249640001787065727369737465645f76616c69646174696f6e5f646174615f6861736834011048617368000120706f765f6861736834011048617368000130657261737572655f726f6f74340110486173680001247369676e617475726549050144436f6c6c61746f725369676e6174757265000124706172615f686561643401104861736800015076616c69646174696f6e5f636f64655f686173684d05014856616c69646174696f6e436f64654861736800004505104c706f6c6b61646f745f7072696d69746976657308763730636f6c6c61746f725f617070185075626c69630000040004013c737232353531393a3a5075626c696300004905104c706f6c6b61646f745f7072696d69746976657308763730636f6c6c61746f725f617070245369676e61747572650000040019020148737232353531393a3a5369676e617475726500004d050c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665734856616c69646174696f6e436f6465486173680000040034011048617368000051050c4c706f6c6b61646f745f7072696d6974697665730876375043616e646964617465436f6d6d69746d656e747304044e01100018013c7570776172645f6d65737361676573550501385570776172644d6573736167657300014c686f72697a6f6e74616c5f6d6573736167657359050148486f72697a6f6e74616c4d6573736167657300014c6e65775f76616c69646174696f6e5f636f6465650501584f7074696f6e3c56616c69646174696f6e436f64653e000124686561645f646174616d050120486561644461746100016c70726f6365737365645f646f776e776172645f6d6573736167657310010c75333200013868726d705f77617465726d61726b1001044e000055050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540138045300000400610101185665633c543e000059050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d05045300000400610501185665633c543e00005d050860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401450200080124726563697069656e744502010849640001106461746138015073705f7374643a3a7665633a3a5665633c75383e000061050000025d0500650504184f7074696f6e0404540169050108104e6f6e6500000010536f6d6504006905000001000069050c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665733856616c69646174696f6e436f64650000040038011c5665633c75383e00006d050c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665732048656164446174610000040038011c5665633c75383e0000710500000275050075050c4c706f6c6b61646f745f7072696d6974697665730876374c56616c69646974794174746573746174696f6e00010820496d706c6963697404003105014856616c696461746f725369676e6174757265000100204578706c6963697404003105014856616c696461746f725369676e61747572650002000079050000027d05007d050c4c706f6c6b61646f745f7072696d6974697665730876374c4469737075746553746174656d656e7453657400000c013863616e6469646174655f686173688105013443616e6469646174654861736800011c73657373696f6e10013053657373696f6e496e64657800012873746174656d656e7473850501ec5665633c284469737075746553746174656d656e742c2056616c696461746f72496e6465782c2056616c696461746f725369676e6174757265293e000081050860706f6c6b61646f745f636f72655f7072696d6974697665733443616e6469646174654861736800000400340110486173680000850500000289050089050000040c8d052d053105008d050c4c706f6c6b61646f745f7072696d697469766573087637404469737075746553746174656d656e740001081456616c696404009105016456616c69644469737075746553746174656d656e744b696e640000001c496e76616c696404009905016c496e76616c69644469737075746553746174656d656e744b696e640001000091050c4c706f6c6b61646f745f7072696d6974697665730876376456616c69644469737075746553746174656d656e744b696e64000114204578706c696369740000003c4261636b696e675365636f6e646564040034011048617368000100304261636b696e6756616c696404003401104861736800020040417070726f76616c436865636b696e6700030088417070726f76616c436865636b696e674d756c7469706c6543616e646964617465730400950501485665633c43616e646964617465486173683e00040000950500000281050099050c4c706f6c6b61646f745f7072696d6974697665730876376c496e76616c69644469737075746553746174656d656e744b696e64000104204578706c69636974000000009d05106c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261731870616c6c65741043616c6c04045400012458666f7263655f7365745f63757272656e745f636f646508011070617261450201185061726149640001206e65775f636f64656905013856616c69646174696f6e436f6465000004f8536574207468652073746f7261676520666f72207468652070617261636861696e2076616c69646174696f6e20636f646520696d6d6564696174656c792e58666f7263655f7365745f63757272656e745f6865616408011070617261450201185061726149640001206e65775f686561646d05012048656164446174610001040101536574207468652073746f7261676520666f72207468652063757272656e742070617261636861696e2068656164206461746120696d6d6564696174656c792e6c666f7263655f7363686564756c655f636f64655f757067726164650c011070617261450201185061726149640001206e65775f636f64656905013856616c69646174696f6e436f646500014c72656c61795f706172656e745f6e756d626572100144426c6f636b4e756d626572466f723c543e0002042d015363686564756c6520616e207570677261646520617320696620697420776173207363686564756c656420696e2074686520676976656e2072656c617920706172656e7420626c6f636b2e4c666f7263655f6e6f74655f6e65775f6865616408011070617261450201185061726149640001206e65775f686561646d05012048656164446174610003041d014e6f74652061206e657720626c6f636b206865616420666f7220706172612077697468696e2074686520636f6e74657874206f66207468652063757272656e7420626c6f636b2e48666f7263655f71756575655f616374696f6e040110706172614502011850617261496400040cf850757420612070617261636861696e206469726563746c7920696e746f20746865206e6578742073657373696f6e277320616374696f6e2071756575652ef457652063616e277420717565756520697420616e7920736f6f6e6572207468616e207468697320776974686f757420676f696e6720696e746f2074686538696e697469616c697a65722e2e2e6c6164645f747275737465645f76616c69646174696f6e5f636f646504013c76616c69646174696f6e5f636f64656905013856616c69646174696f6e436f6465000538a041646473207468652076616c69646174696f6e20636f646520746f207468652073746f726167652e00590154686520636f64652077696c6c206e6f7420626520616464656420696620697420697320616c72656164792070726573656e742e204164646974696f6e616c6c792c20696620505646207072652d636865636b696e67e069732072756e6e696e6720666f72207468617420636f64652c2069742077696c6c20626520696e7374616e746c792061636365707465642e0051014f74686572776973652c2074686520636f64652077696c6c20626520616464656420696e746f207468652073746f726167652e204e6f746520746861742074686520636f64652077696c6c2062652061646465646101696e746f2073746f726167652077697468207265666572656e636520636f756e7420302e205468697320697320746f206163636f756e74207468652066616374207468617420746865726520617265206e6f2075736572734d01666f72207468697320636f6465207965742e205468652063616c6c65722077696c6c206861766520746f206d616b6520737572652074686174207468697320636f6465206576656e7475616c6c79206765747349017573656420627920736f6d652070617261636861696e206f722072656d6f7665642066726f6d207468652073746f7261676520746f2061766f69642073746f72616765206c65616b732e20466f722074686549016c61747465722070726566657220746f20757365207468652060706f6b655f756e757365645f76616c69646174696f6e5f636f64656020646973706174636861626c6520746f207261772073746f72616765346d616e6970756c6174696f6e2e005101546869732066756e6374696f6e206973206d61696e6c79206d65616e7420746f206265207573656420666f7220757067726164696e672070617261636861696e73207468617420646f206e6f7420666f6c6c6f77090174686520676f2d6168656164207369676e616c207768696c652074686520505646207072652d636865636b696e67206665617475726520697320656e61626c65642e6c706f6b655f756e757365645f76616c69646174696f6e5f636f646504015076616c69646174696f6e5f636f64655f686173684d05014856616c69646174696f6e436f646548617368000614250152656d6f7665207468652076616c69646174696f6e20636f64652066726f6d207468652073746f726167652069666620746865207265666572656e636520636f756e7420697320302e0059015468697320697320626574746572207468616e2072656d6f76696e67207468652073746f72616765206469726563746c792c20626563617573652069742077696c6c206e6f742072656d6f76652074686520636f6465410174686174207761732073756464656e6c7920676f74207573656420627920736f6d652070617261636861696e207768696c65207468697320646973706174636861626c65207761732070656e64696e67306469737061746368696e672e6c696e636c7564655f7076665f636865636b5f73746174656d656e7408011073746d74a1050144507666436865636b53746174656d656e740001247369676e61747572653105014856616c696461746f725369676e61747572650007085501496e636c7564657320612073746174656d656e7420666f72206120505646207072652d636865636b696e6720766f74652e20506f74656e7469616c6c792c2066696e616c697a65732074686520766f746520616e644101656e616374732074686520726573756c747320696620746861742077617320746865206c61737420766f7465206265666f726520616368696576696e67207468652073757065726d616a6f726974792e74666f7263655f7365745f6d6f73745f726563656e745f636f6e74657874080110706172614502011850617261496400011c636f6e74657874100144426c6f636b4e756d626572466f723c543e0008040101536574207468652073746f7261676520666f72207468652063757272656e742070617261636861696e2068656164206461746120696d6d6564696174656c792e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea1050c4c706f6c6b61646f745f7072696d69746976657308763744507666436865636b53746174656d656e740000100118616363657074200110626f6f6c00011c7375626a6563744d05014856616c69646174696f6e436f64654861736800013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c76616c696461746f725f696e6465782d05013856616c696461746f72496e6465780000a505106c706f6c6b61646f745f72756e74696d655f70617261636861696e732c696e697469616c697a65721870616c6c65741043616c6c04045400010434666f7263655f617070726f766504011475705f746f10012c426c6f636b4e756d62657200000c390149737375652061207369676e616c20746f2074686520636f6e73656e73757320656e67696e6520746f20666f726369626c79206163742061732074686f75676820616c6c2070617261636861696e5101626c6f636b7320696e20616c6c2072656c617920636861696e20626c6f636b7320757020746f20616e6420696e636c7564696e672074686520676976656e206e756d62657220696e207468652063757272656e74a0636861696e206172652076616c696420616e642073686f756c642062652066696e616c697a65642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea905106c706f6c6b61646f745f72756e74696d655f70617261636861696e731068726d701870616c6c65741043616c6c04045400012c5868726d705f696e69745f6f70656e5f6368616e6e656c0c0124726563697069656e744502011850617261496400015470726f706f7365645f6d61785f636170616369747910010c75333200016470726f706f7365645f6d61785f6d6573736167655f73697a6510010c7533320000284d01496e697469617465206f70656e696e672061206368616e6e656c2066726f6d20612070617261636861696e20746f206120676976656e20726563697069656e74207769746820676976656e206368616e6e656c2c706172616d65746572732e0059012d206070726f706f7365645f6d61785f636170616369747960202d2073706563696669657320686f77206d616e79206d657373616765732063616e20626520696e20746865206368616e6e656c206174206f6e63652e2d012d206070726f706f7365645f6d61785f6d6573736167655f73697a6560202d2073706563696669657320746865206d6178696d756d2073697a65206f6620746865206d657373616765732e0011015468657365206e756d62657273206172652061207375626a65637420746f207468652072656c61792d636861696e20636f6e66696775726174696f6e206c696d6974732e005101546865206368616e6e656c2063616e206265206f70656e6564206f6e6c792061667465722074686520726563697069656e7420636f6e6669726d7320697420616e64206f6e6c79206f6e20612073657373696f6e1c6368616e67652e6068726d705f6163636570745f6f70656e5f6368616e6e656c04011873656e6465724502011850617261496400010cf041636365707420612070656e64696e67206f70656e206368616e6e656c20726571756573742066726f6d2074686520676976656e2073656e6465722e00f4546865206368616e6e656c2077696c6c206265206f70656e6564206f6e6c79206f6e20746865206e6578742073657373696f6e20626f756e646172792e4868726d705f636c6f73655f6368616e6e656c0401286368616e6e656c5f6964ad05013448726d704368616e6e656c49640002105501496e69746961746520756e696c61746572616c20636c6f73696e67206f662061206368616e6e656c2e20546865206f726967696e206d75737420626520656974686572207468652073656e646572206f722074686598726563697069656e7420696e20746865206368616e6e656c206265696e6720636c6f7365642e00c054686520636c6f737572652063616e206f6e6c792068617070656e206f6e20612073657373696f6e206368616e67652e40666f7263655f636c65616e5f68726d700c0110706172614502011850617261496400012c6e756d5f696e626f756e6410010c7533320001306e756d5f6f7574626f756e6410010c75333200031c5d01546869732065787472696e7369632074726967676572732074686520636c65616e7570206f6620616c6c207468652048524d502073746f72616765206974656d73207468617420612070617261206d617920686176652e49014e6f726d616c6c7920746869732068617070656e73206f6e6365207065722073657373696f6e2c20627574207468697320616c6c6f777320796f7520746f20747269676765722074686520636c65616e757094696d6d6564696174656c7920666f7220612073706563696669632070617261636861696e2e0051014e756d626572206f6620696e626f756e6420616e64206f7574626f756e64206368616e6e656c7320666f7220607061726160206d7573742062652070726f7669646564206173207769746e65737320646174612e00904f726967696e206d7573742062652074686520604368616e6e656c4d616e61676572602e5c666f7263655f70726f636573735f68726d705f6f70656e0401206368616e6e656c7310010c753332000420a4466f7263652070726f636573732048524d50206f70656e206368616e6e656c2072657175657374732e0055014966207468657265206172652070656e64696e672048524d50206f70656e206368616e6e656c2072657175657374732c20796f752063616e2075736520746869732066756e6374696f6e20746f2070726f6365737388616c6c206f662074686f736520726571756573747320696d6d6564696174656c792e000901546f74616c206e756d626572206f66206f70656e696e67206368616e6e656c73206d7573742062652070726f7669646564206173207769746e65737320646174612e00904f726967696e206d7573742062652074686520604368616e6e656c4d616e61676572602e60666f7263655f70726f636573735f68726d705f636c6f73650401206368616e6e656c7310010c753332000520a8466f7263652070726f636573732048524d5020636c6f7365206368616e6e656c2072657175657374732e0059014966207468657265206172652070656e64696e672048524d5020636c6f7365206368616e6e656c2072657175657374732c20796f752063616e2075736520746869732066756e6374696f6e20746f2070726f6365737388616c6c206f662074686f736520726571756573747320696d6d6564696174656c792e000901546f74616c206e756d626572206f6620636c6f73696e67206368616e6e656c73206d7573742062652070726f7669646564206173207769746e65737320646174612e00904f726967696e206d7573742062652074686520604368616e6e656c4d616e61676572602e6068726d705f63616e63656c5f6f70656e5f726571756573740801286368616e6e656c5f6964ad05013448726d704368616e6e656c49640001346f70656e5f726571756573747310010c7533320006205d01546869732063616e63656c7320612070656e64696e67206f70656e206368616e6e656c20726571756573742e2049742063616e2062652063616e63656c656420627920656974686572206f66207468652073656e64657219016f722074686520726563697069656e7420666f72207468617420726571756573742e20546865206f726967696e206d75737420626520656974686572206f662074686f73652e005d015468652063616e63656c6c6174696f6e2068617070656e7320696d6d6564696174656c792e204974206973206e6f7420706f737369626c6520746f2063616e63656c20746865207265717565737420696620697420697344616c72656164792061636365707465642e005901546f74616c206e756d626572206f66206f70656e2072657175657374732028692e652e206048726d704f70656e4368616e6e656c52657175657374734c6973746029206d7573742062652070726f7669646564206173347769746e65737320646174612e5c666f7263655f6f70656e5f68726d705f6368616e6e656c10011873656e64657245020118506172614964000124726563697069656e74450201185061726149640001306d61785f636170616369747910010c7533320001406d61785f6d6573736167655f73697a6510010c75333200072061014f70656e2061206368616e6e656c2066726f6d2061206073656e6465726020746f20612060726563697069656e74602060506172614964602e20416c74686f756768206f70656e656420627920676f7665726e616e63652c410174686520606d61785f63617061636974796020616e6420606d61785f6d6573736167655f73697a656020617265207374696c6c207375626a65637420746f207468652052656c617920436861696e277348636f6e66696775726564206c696d6974732e004d01457870656374656420757365206973207768656e206f6e652028616e64206f6e6c79206f6e6529206f66207468652060506172614964607320696e766f6c76656420696e20746865206368616e6e656c206973c0676f7665726e6564206279207468652073797374656d2c20652e672e20612073797374656d2070617261636861696e2e00904f726967696e206d7573742062652074686520604368616e6e656c4d616e61676572602e6065737461626c6973685f73797374656d5f6368616e6e656c08011873656e64657245020118506172614964000124726563697069656e7445020118506172614964000830510145737461626c69736820616e2048524d50206368616e6e656c206265747765656e2074776f2073797374656d20636861696e732e20496620746865206368616e6e656c20646f6573206e6f7420616c7265616479510165786973742c20746865207472616e73616374696f6e20666565732077696c6c20626520726566756e64656420746f207468652063616c6c65722e205468652073797374656d20646f6573206e6f742074616b6559016465706f7369747320666f72206368616e6e656c73206265747765656e2073797374656d20636861696e732c20616e64206175746f6d61746963616c6c79207365747320746865206d657373616765206e756d6265721901616e642073697a65206c696d69747320746f20746865206d6178696d756d20616c6c6f77656420627920746865206e6574776f726b277320636f6e66696775726174696f6e2e0028417267756d656e74733a00942d206073656e646572603a20412073797374656d20636861696e2c2060506172614964602ea02d2060726563697069656e74603a20412073797374656d20636861696e2c2060506172614964602e005501416e79207369676e6564206f726967696e2063616e2063616c6c20746869732066756e6374696f6e2c20627574205f626f74685f20696e70757473204d5553542062652073797374656d20636861696e732e204966c0746865206368616e6e656c20646f6573206e6f74206578697374207965742c207468657265206973206e6f206665652e54706f6b655f6368616e6e656c5f6465706f7369747308011873656e64657245020118506172614964000124726563697069656e7445020118506172614964000924510155706461746520746865206465706f736974732068656c6420666f7220616e2048524d50206368616e6e656c20746f20746865206c61746573742060436f6e66696775726174696f6e602e204368616e6e656c73b0776974682073797374656d20636861696e7320646f206e6f7420726571756972652061206465706f7369742e0028417267756d656e74733a00782d206073656e646572603a204120636861696e2c2060506172614964602e842d2060726563697069656e74603a204120636861696e2c2060506172614964602e00a4416e79207369676e6564206f726967696e2063616e2063616c6c20746869732066756e6374696f6e2e7465737461626c6973685f6368616e6e656c5f776974685f73797374656d04014c7461726765745f73797374656d5f636861696e45020118506172614964000a1c390145737461626c6973682061206269646972656374696f6e616c2048524d50206368616e6e656c206265747765656e20612070617261636861696e20616e6420612073797374656d20636861696e2e0028417267756d656e74733a00c82d20607461726765745f73797374656d5f636861696e603a20412073797374656d20636861696e2c2060506172614964602e00b0546865206f726967696e206e6565647320746f206265207468652070617261636861696e206f726967696e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead050c74706f6c6b61646f745f70617261636861696e5f7072696d697469766573287072696d6974697665733448726d704368616e6e656c4964000008011873656e646572450201084964000124726563697069656e744502010849640000b105106c706f6c6b61646f745f72756e74696d655f70617261636861696e732064697370757465731870616c6c65741043616c6c04045400010438666f7263655f756e667265657a65000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb505146c706f6c6b61646f745f72756e74696d655f70617261636861696e7320646973707574657320736c617368696e671870616c6c65741043616c6c040454000104707265706f72745f646973707574655f6c6f73745f756e7369676e6564080134646973707574655f70726f6f66b9050144426f783c4469737075746550726f6f663e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f66000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb905104c706f6c6b61646f745f7072696d69746976657308763720736c617368696e67304469737075746550726f6f66000010012474696d655f736c6f74bd050140446973707574657354696d65536c6f740001106b696e64c105014c536c617368696e674f6666656e63654b696e6400013c76616c696461746f725f696e6465782d05013856616c696461746f72496e64657800013076616c696461746f725f6964ed01012c56616c696461746f7249640000bd05104c706f6c6b61646f745f7072696d69746976657308763720736c617368696e6740446973707574657354696d65536c6f74000008013473657373696f6e5f696e64657810013053657373696f6e496e64657800013863616e6469646174655f686173688105013443616e646964617465486173680000c105104c706f6c6b61646f745f7072696d69746976657308763720736c617368696e674c536c617368696e674f6666656e63654b696e6400010828466f72496e76616c696400000030416761696e737456616c696400010000c505106c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e641870616c6c65741043616c6c0404540001085c706c6163655f6f726465725f616c6c6f775f64656174680801286d61785f616d6f756e7418013042616c616e63654f663c543e00011c706172615f6964450201185061726149640000409443726561746520612073696e676c65206f6e2064656d616e6420636f7265206f726465722e490157696c6c20757365207468652073706f7420707269636520666f72207468652063757272656e7420626c6f636b20616e642077696c6c207265617020746865206163636f756e74206966206e65656465642e002c506172616d65746572733a39012d20606f726967696e603a205468652073656e646572206f66207468652063616c6c2c2066756e64732077696c6c2062652077697468647261776e2066726f6d2074686973206163636f756e742e49012d20606d61785f616d6f756e74603a20546865206d6178696d756d2062616c616e636520746f2077697468647261772066726f6d20746865206f726967696e20746f20706c61636520616e206f726465722e0d012d2060706172615f6964603a204120605061726149646020746865206f726967696e2077616e747320746f2070726f7669646520626c6f636b737061636520666f722e001c4572726f72733ae42d2060496e73756666696369656e7442616c616e6365603a2066726f6d207468652043757272656e637920696d706c656d656e746174696f6e442d2060496e76616c696450617261496460342d2060517565756546756c6c60802d206053706f7450726963654869676865725468616e4d6178416d6f756e7460001c4576656e74733a4c2d206053706f744f72646572506c616365646058706c6163655f6f726465725f6b6565705f616c6976650801286d61785f616d6f756e7418013042616c616e63654f663c543e00011c706172615f696445020118506172614964000140610153616d6520617320746865205b60706c6163655f6f726465725f616c6c6f775f6465617468605d2853656c663a3a706c6163655f6f726465725f616c6c6f775f6465617468292063616c6c202c2062757420776974682061dc636865636b207468617420706c6163696e6720746865206f726465722077696c6c206e6f74207265617020746865206163636f756e742e002c506172616d65746572733a39012d20606f726967696e603a205468652073656e646572206f66207468652063616c6c2c2066756e64732077696c6c2062652077697468647261776e2066726f6d2074686973206163636f756e742e49012d20606d61785f616d6f756e74603a20546865206d6178696d756d2062616c616e636520746f2077697468647261772066726f6d20746865206f726967696e20746f20706c61636520616e206f726465722e0d012d2060706172615f6964603a204120605061726149646020746865206f726967696e2077616e747320746f2070726f7669646520626c6f636b737061636520666f722e001c4572726f72733ae42d2060496e73756666696369656e7442616c616e6365603a2066726f6d207468652043757272656e637920696d706c656d656e746174696f6e442d2060496e76616c696450617261496460342d2060517565756546756c6c60802d206053706f7450726963654869676865725468616e4d6178416d6f756e7460001c4576656e74733a4c2d206053706f744f72646572506c6163656460040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec905105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3c70617261735f7265676973747261721870616c6c65741043616c6c0404540001242072656769737465720c010869644502011850617261496400013067656e657369735f686561646d050120486561644461746100013c76616c69646174696f6e5f636f64656905013856616c69646174696f6e436f6465000050f852656769737465722068656164206461746120616e642076616c69646174696f6e20636f646520666f72206120726573657276656420506172612049642e0030232320417267756d656e7473c02d20606f726967696e603a204d7573742062652063616c6c6564206279206120605369676e656460206f726967696e2e2d012d20606964603a2054686520706172612049442e204d757374206265206f776e65642f6d616e616765642062792074686520606f726967696e60207369676e696e67206163636f756e742e01012d206067656e657369735f68656164603a205468652067656e6573697320686561642064617461206f66207468652070617261636861696e2f7468726561642e25012d206076616c69646174696f6e5f636f6465603a2054686520696e697469616c2076616c69646174696f6e20636f6465206f66207468652070617261636861696e2f7468726561642e00402323204465706f736974732f466565730901546865206163636f756e74207769746820746865206f726967696e6174696e67207369676e6174757265206d75737420726573657276652061206465706f7369742e004d01546865206465706f73697420697320726571756972656420746f20636f7665722074686520636f737473206173736f63696174656420776974682073746f72696e67207468652067656e657369732068656164746461746120616e64207468652076616c69646174696f6e20636f64652e310154686973206163636f756e747320666f722074686520706f74656e7469616c20746f2073746f72652076616c69646174696f6e20636f6465206f6620612073697a6520757020746f20746865dc606d61785f636f64655f73697a65602c20617320646566696e656420696e2074686520636f6e66696775726174696f6e2070616c6c6574001d01416e797468696e6720616c72656164792072657365727665642070726576696f75736c7920666f7220746869732070617261204944206973206163636f756e74656420666f722e00242323204576656e7473d454686520605265676973746572656460206576656e7420697320656d697474656420696e2063617365206f6620737563636573732e38666f7263655f726567697374657214010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e00010869644502011850617261496400013067656e657369735f686561646d050120486561644461746100013c76616c69646174696f6e5f636f64656905013856616c69646174696f6e436f6465000118dc466f7263652074686520726567697374726174696f6e206f6620612050617261204964206f6e207468652072656c617920636861696e2e00b8546869732066756e6374696f6e206d7573742062652063616c6c6564206279206120526f6f74206f726967696e2e001901546865206465706f7369742074616b656e2063616e2062652073706563696669656420666f72207468697320726567697374726174696f6e2e20416e79206050617261496460190163616e20626520726567697374657265642c20696e636c7564696e67207375622d3130303020494473207768696368206172652053797374656d2050617261636861696e732e2864657265676973746572040108696445020118506172614964000210050144657265676973746572206120506172612049642c2066726565696e6720616c6c206461746120616e642072657475726e696e6720616e79206465706f7369742e0051015468652063616c6c6572206d75737420626520526f6f742c2074686520607061726160206f776e65722c206f72207468652060706172616020697473656c662e205468652070617261206d75737420626520616e506f6e2d64656d616e642070617261636861696e2e10737761700801086964450201185061726149640001146f74686572450201185061726149640003304101537761702061206c6561736520686f6c64696e672070617261636861696e207769746820616e6f746865722070617261636861696e2c20656974686572206f6e2d64656d616e64206f72206c6561736520686f6c64696e672e000101546865206f726967696e206d75737420626520526f6f742c2074686520607061726160206f776e65722c206f72207468652060706172616020697473656c662e00610154686520737761702077696c6c2068617070656e206f6e6c7920696620746865726520697320616c726561647920616e206f70706f7369746520737761702070656e64696e672e204966207468657265206973206e6f742c590174686520737761702077696c6c2062652073746f72656420696e207468652070656e64696e67207377617073206d61702c20726561647920666f722061206c6174657220636f6e6669726d61746f727920737761702e005d01546865206050617261496460732072656d61696e206d617070656420746f207468652073616d652068656164206461746120616e6420636f646520736f2065787465726e616c20636f64652063616e2072656c79206f6e3d01605061726149646020746f2062652061206c6f6e672d7465726d206964656e746966696572206f662061206e6f74696f6e616c202270617261636861696e222e20486f77657665722c20746865697235017363686564756c696e6720696e666f2028692e652e2077686574686572207468657927726520616e206f6e2d64656d616e642070617261636861696e206f72206c6561736520686f6c64696e67150170617261636861696e292c2061756374696f6e20696e666f726d6174696f6e20616e64207468652061756374696f6e206465706f736974206172652073776974636865642e2c72656d6f76655f6c6f636b04011070617261450201185061726149640004100d0152656d6f76652061206d616e61676572206c6f636b2066726f6d206120706172612e20546869732077696c6c20616c6c6f7720746865206d616e61676572206f662061350170726576696f75736c79206c6f636b6564207061726120746f2064657265676973746572206f7220737761702061207061726120776974686f7574207573696e6720676f7665726e616e63652e00dc43616e206f6e6c792062652063616c6c65642062792074686520526f6f74206f726967696e206f72207468652070617261636861696e2e1c72657365727665000544945265736572766520612050617261204964206f6e207468652072656c617920636861696e2e004d01546869732066756e6374696f6e2077696c6c20726573657276652061206e6577205061726120496420746f206265206f776e65642f6d616e6167656420627920746865206f726967696e206163636f756e742e6101546865206f726967696e206163636f756e742069732061626c6520746f2072656769737465722068656164206461746120616e642076616c69646174696f6e20636f6465207573696e67206072656769737465726020746f590163726561746520616e206f6e2d64656d616e642070617261636861696e2e205573696e672074686520536c6f74732070616c6c65742c20616e206f6e2d64656d616e642070617261636861696e2063616e207468656ea4626520757067726164656420746f2061206c6561736520686f6c64696e672070617261636861696e2e0030232320417267756d656e747355012d20606f726967696e603a204d7573742062652063616c6c6564206279206120605369676e656460206f726967696e2e204265636f6d657320746865206d616e616765722f6f776e6572206f6620746865206e6577282020706172612049442e00402323204465706f736974732f466565732101546865206f726967696e206d75737420726573657276652061206465706f736974206f662060506172614465706f7369746020666f722074686520726567697374726174696f6e2e00242323204576656e747359015468652060526573657276656460206576656e7420697320656d697474656420696e2063617365206f6620737563636573732c2077686963682070726f76696465732074686520494420726573657276656420666f72107573652e206164645f6c6f636b040110706172614502011850617261496400061409014164642061206d616e61676572206c6f636b2066726f6d206120706172612e20546869732077696c6c2070726576656e7420746865206d616e61676572206f662061887061726120746f2064657265676973746572206f722073776170206120706172612e00490143616e2062652063616c6c656420627920526f6f742c207468652070617261636861696e2c206f72207468652070617261636861696e206d616e61676572206966207468652070617261636861696e20697324756e6c6f636b65642e547363686564756c655f636f64655f7570677261646508011070617261450201185061726149640001206e65775f636f64656905013856616c69646174696f6e436f646500072c745363686564756c6520612070617261636861696e20757067726164652e005501546869732077696c6c206b69636b206f6666206120636865636b206f6620606e65775f636f64656020627920616c6c2076616c696461746f72732e20416674657220746865206d616a6f72697479206f6620746865550176616c696461746f72732068617665207265706f72746564206f6e207468652076616c6964697479206f662074686520636f64652c2074686520636f64652077696c6c2065697468657220626520656e616374656455016f722074686520757067726164652077696c6c2062652072656a65637465642e2049662074686520636f64652077696c6c20626520656e61637465642c207468652063757272656e7420636f6465206f66207468655d0170617261636861696e2077696c6c206265206f7665727772697474656e206469726563746c792e2054686973206d65616e73207468617420616e7920506f562077696c6c20626520636865636b656420627920746869735d016e657720636f64652e205468652070617261636861696e20697473656c662077696c6c206e6f7420626520696e666f726d6564206578706c696369746c792074686174207468652076616c69646174696f6e20636f646530686173206368616e6765642e00490143616e2062652063616c6c656420627920526f6f742c207468652070617261636861696e2c206f72207468652070617261636861696e206d616e61676572206966207468652070617261636861696e20697324756e6c6f636b65642e407365745f63757272656e745f6865616408011070617261450201185061726149640001206e65775f686561646d050120486561644461746100081084536574207468652070617261636861696e27732063757272656e7420686561642e00490143616e2062652063616c6c656420627920526f6f742c207468652070617261636861696e2c206f72207468652070617261636861696e206d616e61676572206966207468652070617261636861696e20697324756e6c6f636b65642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd05105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e14736c6f74731870616c6c65741043616c6c04045400010c2c666f7263655f6c6561736514011070617261450201185061726149640001186c6561736572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000130706572696f645f626567696e1001404c65617365506572696f644f663c543e000130706572696f645f636f756e741001404c65617365506572696f644f663c543e0000104d014a757374206120636f6e6e65637420696e746f2074686520606c656173655f6f7574602063616c6c2c20696e206361736520526f6f742077616e747320746f20666f72636520736f6d65206c6561736520746ffc68617070656e20696e646570656e64656e746c79206f6620616e79206f74686572206f6e2d636861696e206d656368616e69736d20746f207573652069742e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e40636c6561725f616c6c5f6c6561736573040110706172614502011850617261496400010c4d01436c65617220616c6c206c656173657320666f72206120506172612049642c20726566756e64696e6720616e79206465706f73697473206261636b20746f20746865206f726967696e616c206f776e6572732e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e3c747269676765725f6f6e626f617264040110706172614502011850617261496400021c250154727920746f206f6e626f61726420612070617261636861696e2074686174206861732061206c6561736520666f72207468652063757272656e74206c6561736520706572696f642e004501546869732066756e6374696f6e2063616e2062652075736566756c2069662074686572652077617320736f6d6520737461746520697373756520776974682061207061726120746861742073686f756c64390168617665206f6e626f61726465642c206275742077617320756e61626c6520746f2e204173206c6f6e67206173207468657920686176652061206c6561736520706572696f642c2077652063616e6c6c6574207468656d206f6e626f6172642066726f6d20686572652e00cc4f726967696e206d757374206265207369676e65642c206275742063616e2062652063616c6c656420627920616e796f6e652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed105105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e4870617261735f7375646f5f777261707065721870616c6c65741043616c6c040454000118747375646f5f7363686564756c655f706172615f696e697469616c697a6508010869644502011850617261496400011c67656e65736973d505013c5061726147656e65736973417267730000140d015363686564756c652061207061726120746f20626520696e697469616c697a656420617420746865207374617274206f6620746865206e6578742073657373696f6e2e004d01546869732073686f756c64206f6e6c79206265207573656420666f722054455354494e4720616e64206e6f74206f6e2050524f44554354494f4e20636861696e732e204974206175746f6d61746963616c6c79490161737369676e7320436f726574696d6520746f2074686520636861696e20616e6420696e6372656173657320746865206e756d626572206f6620636f7265732e20546875732c207468657265206973206e6f8072756e6e696e6720636f726574696d6520636861696e2072657175697265642e687375646f5f7363686564756c655f706172615f636c65616e757004010869644502011850617261496400010409015363686564756c652061207061726120746f20626520636c65616e656420757020617420746865207374617274206f6620746865206e6578742073657373696f6e2e807375646f5f7363686564756c655f706172617468726561645f757067726164650401086964450201185061726149640002041d01557067726164652061207061726174687265616420286f6e2d64656d616e642070617261636861696e2920746f2061206c6561736520686f6c64696e672070617261636861696e847375646f5f7363686564756c655f70617261636861696e5f646f776e6772616465040108696445020118506172614964000304f4446f776e67726164652061206c6561736520686f6c64696e672070617261636861696e20746f20616e206f6e2d64656d616e642070617261636861696e5c7375646f5f71756575655f646f776e776172645f78636d08010869644502011850617261496400010c78636dd9050178426f783c78636d3a3a6f70617175653a3a56657273696f6e656458636d3e0004109853656e64206120646f776e776172642058434d20746f2074686520676976656e20706172612e00510154686520676976656e2070617261636861696e2073686f756c6420657869737420616e6420746865207061796c6f61642073686f756c64206e6f74206578636565642074686520707265636f6e66696775726564a073697a652060636f6e6669672e6d61785f646f776e776172645f6d6573736167655f73697a65602e6c7375646f5f65737461626c6973685f68726d705f6368616e6e656c10011873656e64657245020118506172614964000124726563697069656e74450201185061726149640001306d61785f636170616369747910010c7533320001406d61785f6d6573736167655f73697a6510010c7533320005100101466f72636566756c6c792065737461626c6973682061206368616e6e656c2066726f6d207468652073656e64657220746f2074686520726563697069656e742e00550154686973206973206571756976616c656e7420746f2073656e64696e6720616e206048726d703a3a68726d705f696e69745f6f70656e5f6368616e6e656c602065787472696e73696320666f6c6c6f776564206279846048726d703a3a68726d705f6163636570745f6f70656e5f6368616e6e656c602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5050c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261733c5061726147656e657369734172677300000c013067656e657369735f686561646d050120486561644461746100013c76616c69646174696f6e5f636f64656905013856616c69646174696f6e436f6465000124706172615f6b696e64200120506172614b696e640000d905080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856320400dd05015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304002906015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404008906015076343a3a58636d3c52756e74696d6543616c6c3e00040000dd050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400e10501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000e105000002e50500e5050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c00017034576974686472617741737365740400e905012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e905012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e905012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736501060120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e736665724173736574080118617373657473e905012c4d756c746941737365747300012c62656e6566696369617279c90401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e905012c4d756c746941737365747300011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c15060168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400cd040154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374c90401344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473190601404d756c7469417373657446696c7465720001286d61785f6173736574737101010c75333200012c62656e6566696369617279c90401344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473190601404d756c7469417373657446696c7465720001286d61785f6173736574737101010c75333200011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e000e003445786368616e6765417373657408011067697665190601404d756c7469417373657446696c74657200011c72656365697665e905012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473190601404d756c7469417373657446696c74657200011c72657365727665c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473190601404d756c7469417373657446696c74657200011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374c90401344d756c74694c6f636174696f6e000118617373657473190601404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573f10501284d756c746941737365740001307765696768745f6c696d69742506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400dd05014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400dd05014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e905012c4d756c74694173736574730001187469636b6574c90401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000e905100c78636d087632286d756c746961737365742c4d756c746941737365747300000400ed05013c5665633c4d756c746941737365743e0000ed05000002f10500f105100c78636d087632286d756c74696173736574284d756c7469417373657400000801086964f505011c4173736574496400010c66756ef905012c46756e676962696c6974790000f505100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400c90401344d756c74694c6f636174696f6e000000204162737472616374040038011c5665633c75383e00010000f905100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400a5010110753132380000002c4e6f6e46756e6769626c650400fd0501344173736574496e7374616e636500010000fd05100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400a50101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400bd02011c5b75383b20385d0003001c417272617931360400a801205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040038011c5665633c75383e0006000001060c0c78636d08763220526573706f6e7365000110104e756c6c000000184173736574730400e905012c4d756c74694173736574730001003c457865637574696f6e526573756c740400050601504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000050604184f7074696f6e0404540109060108104e6f6e6500000010536f6d65040009060000010000090600000408100d06000d06100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404003001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c650019000011060c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000015060c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e00001906100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400e905012c4d756c74694173736574730000001057696c6404001d06013857696c644d756c74694173736574000100001d06100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f660801086964f505011c4173736574496400010c66756e2106013c57696c6446756e676962696c697479000100002106100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000025060c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c7536340001000029060c0c78636d0876330c58636d041043616c6c000004002d0601585665633c496e737472756374696f6e3c43616c6c3e3e00002d0600000231060031060c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404003506012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003506012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003506012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736549060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572710601544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574733506012c4d756c746941737365747300012c62656e6566696369617279a90401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733506012c4d756c746941737365747300011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c1506014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad040154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400750601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473790601404d756c7469417373657446696c74657200012c62656e6566696369617279a90401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473790601404d756c7469417373657446696c74657200011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e000e003445786368616e676541737365740c011067697665790601404d756c7469417373657446696c74657200011077616e743506012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473790601404d756c7469417373657446696c74657200011c72657365727665a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473790601404d756c7469417373657446696c74657200011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f750601445175657279526573706f6e7365496e666f000118617373657473790601404d756c7469417373657446696c74657200120030427579457865637574696f6e080110666565733d0601284d756c746941737365740001307765696768745f6c696d69748506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204002906012458636d3c43616c6c3e0015002c536574417070656e64697804002906012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733506012c4d756c74694173736574730001187469636b6574a90401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404003506012c4d756c7469417373657473001c002c457870656374417373657404003506012c4d756c7469417373657473001d00304578706563744f726967696e0400710601544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204004d0601504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400690601384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f750601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465787101010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f727101010c75333200013c6d696e5f63726174655f6d696e6f727101010c753332002200505265706f72745472616e736163745374617475730400750601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bb90401244e6574776f726b496400012c64657374696e6174696f6ead040154496e746572696f724d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e002600244c6f636b417373657408011461737365743d0601284d756c74694173736574000120756e6c6f636b6572a90401344d756c74694c6f636174696f6e0027002c556e6c6f636b417373657408011461737365743d0601284d756c74694173736574000118746172676574a90401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365743d0601284d756c746941737365740001146f776e6572a90401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365743d0601284d756c746941737365740001186c6f636b6572a90401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69748506012c5765696768744c696d6974000130636865636b5f6f726967696e710601544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00003506100c78636d087633286d756c746961737365742c4d756c7469417373657473000004003906013c5665633c4d756c746941737365743e000039060000023d06003d06100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964bd04011c4173736574496400010c66756e4106012c46756e676962696c69747900004106100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400a5010110753132380000002c4e6f6e46756e6769626c650400450601344173736574496e7374616e6365000100004506100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400a50101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400bd02011c5b75383b20385d0003001c417272617931360400a801205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000049060c0c78636d08763320526573706f6e7365000118104e756c6c0000001841737365747304003506012c4d756c74694173736574730001003c457865637574696f6e526573756c7404004d0601504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040059060198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400690601384d617962654572726f72436f6465000500004d0604184f7074696f6e0404540151060108104e6f6e6500000010536f6d65040051060000010000510600000408105506005506100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040030010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d69740027000059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d06045300000400650601185665633c543e00005d060c0c78636d0876332850616c6c6574496e666f0000180114696e6465787101010c7533320001106e616d6561060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6561060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f727101010c7533320001146d696e6f727101010c75333200011470617463687101010c753332000061060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000065060000025d060069060c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204006d06018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204006d06018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000200006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000710604184f7074696f6e04045401a9040108104e6f6e6500000010536f6d650400a904000001000075060c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ea90401344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400007906100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504003506012c4d756c74694173736574730000001057696c6404007d06013857696c644d756c74694173736574000100007d06100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964bd04011c4173736574496400010c66756e8106013c57696c6446756e676962696c69747900010028416c6c436f756e74656404007101010c75333200020030416c6c4f66436f756e7465640c01086964bd04011c4173736574496400010c66756e8106013c57696c6446756e676962696c697479000114636f756e747101010c753332000300008106100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000085060c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002801185765696768740001000089060c2c73746167696e675f78636d0876340c58636d041043616c6c000004008d0601585665633c496e737472756374696f6e3c43616c6c3e3e00008d0600000291060091060c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040095060118417373657473000000545265736572766541737365744465706f7369746564040095060118417373657473000100585265636569766554656c65706f727465644173736574040095060118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365a9060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572bd0601404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574739506011841737365747300012c62656e65666963696172794d0201204c6f636174696f6e000400505472616e736665725265736572766541737365740c011861737365747395060118417373657473000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c1506014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040051020140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400c10601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473c506012c417373657446696c74657200012c62656e65666963696172794d0201204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473c506012c417373657446696c746572000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e000e003445786368616e676541737365740c011067697665c506012c417373657446696c74657200011077616e749506011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473c506012c417373657446696c74657200011c726573657276654d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473c506012c417373657446696c746572000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fc10601445175657279526573706f6e7365496e666f000118617373657473c506012c417373657446696c74657200120030427579457865637574696f6e080110666565739d06011441737365740001307765696768745f6c696d69748506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204008906012458636d3c43616c6c3e0015002c536574417070656e64697804008906012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473950601184173736574730001187469636b65744d0201204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040095060118417373657473001c002c4578706563744173736574040095060118417373657473001d00304578706563744f726967696e0400bd0601404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204004d0601504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400690601384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fc10601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465787101010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f727101010c75333200013c6d696e5f63726174655f6d696e6f727101010c753332002200505265706f72745472616e736163745374617475730400c10601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400590201204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b610201244e6574776f726b496400012c64657374696e6174696f6e51020140496e746572696f724c6f636174696f6e00010c78636d8906011c58636d3c28293e002600244c6f636b417373657408011461737365749d0601144173736574000120756e6c6f636b65724d0201204c6f636174696f6e0027002c556e6c6f636b417373657408011461737365749d06011441737365740001187461726765744d0201204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365749d06011441737365740001146f776e65724d0201204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365749d06011441737365740001186c6f636b65724d0201204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04004d0201204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69748506012c5765696768744c696d6974000130636865636b5f6f726967696ebd0601404f7074696f6e3c4c6f636174696f6e3e002f00009506102c73746167696e675f78636d0876341461737365741841737365747300000400990601285665633c41737365743e000099060000029d06009d06102c73746167696e675f78636d08763414617373657414417373657400000801086964c104011c4173736574496400010c66756ea106012c46756e676962696c6974790000a106102c73746167696e675f78636d0876341461737365742c46756e676962696c6974790001082046756e6769626c650400a5010110753132380000002c4e6f6e46756e6769626c650400a50601344173736574496e7374616e636500010000a506102c73746167696e675f78636d087634146173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400a50101107531323800010018417272617934040048011c5b75383b20345d000200184172726179380400bd02011c5b75383b20385d0003001c417272617931360400a801205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000a9060c2c73746167696e675f78636d08763420526573706f6e7365000118104e756c6c000000184173736574730400950601184173736574730001003c457865637574696f6e526573756c7404004d0601504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f0400ad060198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400690601384d617962654572726f72436f646500050000ad060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b106045300000400b90601185665633c543e0000b1060c2c73746167696e675f78636d0876342850616c6c6574496e666f0000180114696e6465787101010c7533320001106e616d65b5060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d65b5060180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f727101010c7533320001146d696e6f727101010c75333200011470617463687101010c7533320000b5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000b906000002b10600bd0604184f7074696f6e040454014d020108104e6f6e6500000010536f6d6504004d020000010000c1060c2c73746167696e675f78636d087634445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6e4d0201204c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f7765696768742801185765696768740000c506102c73746167696e675f78636d0876341461737365742c417373657446696c74657200010820446566696e6974650400950601184173736574730000001057696c640400c906012457696c64417373657400010000c906102c73746167696e675f78636d0876341461737365742457696c6441737365740001100c416c6c00000014416c6c4f660801086964c104011c4173736574496400010c66756ecd06013c57696c6446756e676962696c69747900010028416c6c436f756e74656404007101010c75333200020030416c6c4f66436f756e7465640c01086964c104011c4173736574496400010c66756ecd06013c57696c6446756e676962696c697479000114636f756e747101010c75333200030000cd06102c73746167696e675f78636d0876341461737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000d106105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2061756374696f6e731870616c6c65741043616c6c04045400010c2c6e65775f61756374696f6e0801206475726174696f6e71010144426c6f636b4e756d626572466f723c543e0001486c656173655f706572696f645f696e646578710101404c65617365506572696f644f663c543e000014544372656174652061206e65772061756374696f6e2e005101546869732063616e206f6e6c792068617070656e207768656e2074686572652069736e277420616c726561647920616e2061756374696f6e20696e2070726f677265737320616e64206d6179206f6e6c79206265250163616c6c65642062792074686520726f6f74206f726967696e2e20416363657074732074686520606475726174696f6e60206f6620746869732061756374696f6e20616e64207468655901606c656173655f706572696f645f696e64657860206f662074686520696e697469616c206c6561736520706572696f64206f662074686520666f757220746861742061726520746f2062652061756374696f6e65642e0c62696414011070617261d506011850617261496400013461756374696f6e5f696e6465787101013041756374696f6e496e64657800012866697273745f736c6f74710101404c65617365506572696f644f663c543e0001246c6173745f736c6f74710101404c65617365506572696f644f663c543e000118616d6f756e74a501013042616c616e63654f663c543e00014049014d616b652061206e6577206269642066726f6d20616e206163636f756e742028696e636c7564696e6720612070617261636861696e206163636f756e742920666f72206465706c6f79696e672061206e65772870617261636861696e2e0059014d756c7469706c652073696d756c74616e656f757320626964732066726f6d207468652073616d65206269646465722061726520616c6c6f776564206f6e6c79206173206c6f6e6720617320616c6c206163746976653d0162696473206f7665726c61702065616368206f746865722028692e652e20617265206d757475616c6c79206578636c7573697665292e20426964732063616e6e6f742062652072656461637465642e0055012d20607375626020697320746865207375622d6269646465722049442c20616c6c6f77696e6720666f72206d756c7469706c6520636f6d706574696e67206269647320746f206265206d6164652062792028616e647066756e64656420627929207468652073616d65206163636f756e742e4d012d206061756374696f6e5f696e646578602069732074686520696e646578206f66207468652061756374696f6e20746f20626964206f6e2e2053686f756c64206a757374206265207468652070726573656e746876616c7565206f66206041756374696f6e436f756e746572602e49012d206066697273745f736c6f746020697320746865206669727374206c6561736520706572696f6420696e646578206f66207468652072616e676520746f20626964206f6e2e20546869732069732074686509016162736f6c757465206c6561736520706572696f6420696e6465782076616c75652c206e6f7420616e2061756374696f6e2d7370656369666963206f66667365742e41012d20606c6173745f736c6f746020697320746865206c617374206c6561736520706572696f6420696e646578206f66207468652072616e676520746f20626964206f6e2e20546869732069732074686509016162736f6c757465206c6561736520706572696f6420696e6465782076616c75652c206e6f7420616e2061756374696f6e2d7370656369666963206f66667365742e49012d2060616d6f756e74602069732074686520616d6f756e7420746f2062696420746f2062652068656c64206173206465706f73697420666f72207468652070617261636861696e2073686f756c6420746865c86269642077696e2e205468697320616d6f756e742069732068656c64207468726f7567686f7574207468652072616e67652e3863616e63656c5f61756374696f6e00020c7843616e63656c20616e20696e2d70726f67726573732061756374696f6e2e008843616e206f6e6c792062652063616c6c656420627920526f6f74206f726967696e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed506000006450200d906105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2463726f77646c6f616e1870616c6c65741043616c6c04045400012418637265617465180114696e646578d506011850617261496400010c636170a501013042616c616e63654f663c543e00013066697273745f706572696f64710101404c65617365506572696f644f663c543e00012c6c6173745f706572696f64710101404c65617365506572696f644f663c543e00010c656e6471010144426c6f636b4e756d626572466f723c543e0001207665726966696572dd06014c4f7074696f6e3c4d756c74695369676e65723e0000144d014372656174652061206e65772063726f77646c6f616e696e672063616d706169676e20666f7220612070617261636861696e20736c6f7420776974682074686520676976656e206c6561736520706572696f641872616e67652e005d0154686973206170706c6965732061206c6f636b20746f20796f75722070617261636861696e20636f6e66696775726174696f6e2c20656e737572696e6720746861742069742063616e6e6f74206265206368616e676564646279207468652070617261636861696e206d616e616765722e28636f6e747269627574650c0114696e646578d506011850617261496400011476616c7565a501013042616c616e63654f663c543e0001247369676e6174757265290301584f7074696f6e3c4d756c74695369676e61747572653e0001085101436f6e7472696275746520746f20612063726f77642073616c652e20546869732077696c6c207472616e7366657220736f6d652062616c616e6365206f76657220746f2066756e6420612070617261636861696e5101736c6f742e2049742077696c6c20626520776974686472617761626c65207768656e207468652063726f77646c6f616e2068617320656e64656420616e64207468652066756e64732061726520756e757365642e20776974686472617708010c77686f000130543a3a4163636f756e744964000114696e646578d5060118506172614964000244c057697468647261772066756c6c2062616c616e6365206f66206120737065636966696320636f6e7472696275746f722e00c04f726967696e206d757374206265207369676e65642c206275742063616e20636f6d652066726f6d20616e796f6e652e005d015468652066756e64206d7573742062652065697468657220696e2c206f7220726561647920666f722c207265746972656d656e742e20466f7220612066756e6420746f206265202a696e2a207265746972656d656e742c49017468656e20746865207265746972656d656e7420666c6167206d757374206265207365742e20466f7220612066756e6420746f20626520726561647920666f72207265746972656d656e742c207468656e3a9c2d206974206d757374206e6f7420616c726561647920626520696e207265746972656d656e743b4d012d2074686520616d6f756e74206f66207261697365642066756e6473206d75737420626520626967676572207468616e20746865205f667265655f2062616c616e6365206f6620746865206163636f756e743b342d20616e64206569746865723abc20202d2074686520626c6f636b206e756d626572206d757374206265206174206c656173742060656e64603b206f722d0120202d207468652063757272656e74206c6561736520706572696f64206d7573742062652067726561746572207468616e207468652066756e64277320606c6173745f706572696f64602e005501496e207468697320636173652c207468652066756e642773207265746972656d656e7420666c61672069732073657420616e64206974732060656e646020697320726573657420746f207468652063757272656e7434626c6f636b206e756d6265722e00f02d206077686f603a20546865206163636f756e742077686f736520636f6e747269627574696f6e2073686f756c642062652077697468647261776e2e19012d2060696e646578603a205468652070617261636861696e20746f2077686f73652063726f77646c6f616e2074686520636f6e747269627574696f6e20776173206d6164652e18726566756e64040114696e646578d5060118506172614964000314e04175746f6d61746963616c6c7920726566756e6420636f6e7472696275746f7273206f6620616e20656e6465642063726f77646c6f616e2e210144756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c65490174696d657320746f2066756c6c7920726566756e6420616c6c2075736572732e2057652077696c6c20726566756e64206052656d6f76654b6579734c696d69746020757365727320617420612074696d652e00c04f726967696e206d757374206265207369676e65642c206275742063616e20636f6d652066726f6d20616e796f6e652e20646973736f6c7665040114696e646578d5060118506172614964000404550152656d6f766520612066756e6420616674657220746865207265746972656d656e7420706572696f642068617320656e64656420616e6420616c6c2066756e64732068617665206265656e2072657475726e65642e1065646974180114696e646578d506011850617261496400010c636170a501013042616c616e63654f663c543e00013066697273745f706572696f64710101404c65617365506572696f644f663c543e00012c6c6173745f706572696f64710101404c65617365506572696f644f663c543e00010c656e6471010144426c6f636b4e756d626572466f723c543e0001207665726966696572dd06014c4f7074696f6e3c4d756c74695369676e65723e00050cd0456469742074686520636f6e66696775726174696f6e20666f7220616e20696e2d70726f67726573732063726f77646c6f616e2e008843616e206f6e6c792062652063616c6c656420627920526f6f74206f726967696e2e206164645f6d656d6f080114696e646578450201185061726149640001106d656d6f38011c5665633c75383e00060cec41646420616e206f7074696f6e616c206d656d6f20746f20616e206578697374696e672063726f77646c6f616e20636f6e747269627574696f6e2e002d014f726967696e206d757374206265205369676e65642c20616e64207468652075736572206d757374206861766520636f6e747269627574656420746f207468652063726f77646c6f616e2e10706f6b65040114696e6465784502011850617261496400070c74506f6b65207468652066756e6420696e746f20604e657752616973656000dc4f726967696e206d757374206265205369676e65642c20616e64207468652066756e6420686173206e6f6e2d7a65726f2072616973652e38636f6e747269627574655f616c6c080114696e646578d50601185061726149640001247369676e6174757265290301584f7074696f6e3c4d756c74695369676e61747572653e00080c6101436f6e7472696275746520796f757220656e746972652062616c616e636520746f20612063726f77642073616c652e20546869732077696c6c207472616e736665722074686520656e746972652062616c616e6365206f665101612075736572206f76657220746f2066756e6420612070617261636861696e20736c6f742e2049742077696c6c20626520776974686472617761626c65207768656e207468652063726f77646c6f616e206861737c656e64656420616e64207468652066756e64732061726520756e757365642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd0604184f7074696f6e04045401e1060108104e6f6e6500000010536f6d650400e1060000010000e106082873705f72756e74696d652c4d756c74695369676e657200010c1c45643235353139040004013c656432353531393a3a5075626c69630000001c53723235353139040004013c737232353531393a3a5075626c69630001001445636473610400fd01013465636473613a3a5075626c696300020000e506105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3861737369676e65645f736c6f74731870616c6c65741043616c6c0404540001146861737369676e5f7065726d5f70617261636861696e5f736c6f74040108696445020118506172614964000004210141737369676e2061207065726d616e656e742070617261636861696e20736c6f7420616e6420696d6d6564696174656c79206372656174652061206c6561736520666f722069742e6861737369676e5f74656d705f70617261636861696e5f736c6f740801086964450201185061726149640001486c656173655f706572696f645f7374617274e9060150536c6f744c65617365506572696f64537461727400010c390141737369676e20612074656d706f726172792070617261636861696e20736c6f742e205468652066756e6374696f6e20747269657320746f206372656174652061206c6561736520666f722069743901696d6d6564696174656c792069662060536c6f744c65617365506572696f6453746172743a3a43757272656e7460206973207370656369666965642c20616e6420696620746865206e756d62657239016f662063757272656e746c79206163746976652074656d706f7261727920736c6f74732069732062656c6f7720604d617854656d706f72617279536c6f745065724c65617365506572696f64602e5c756e61737369676e5f70617261636861696e5f736c6f74040108696445020118506172614964000204c0556e61737369676e2061207065726d616e656e74206f722074656d706f726172792070617261636861696e20736c6f745c7365745f6d61785f7065726d616e656e745f736c6f7473040114736c6f747310010c753332000304b453657473207468652073746f726167652076616c7565205b604d61785065726d616e656e74536c6f7473605d2e5c7365745f6d61785f74656d706f726172795f736c6f7473040114736c6f747310010c753332000404b453657473207468652073746f726167652076616c7565205b604d617854656d706f72617279536c6f7473605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee9060c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3861737369676e65645f736c6f747350536c6f744c65617365506572696f6453746172740001081c43757272656e74000000104e65787400010000ed06106c706f6c6b61646f745f72756e74696d655f70617261636861696e7320636f726574696d651870616c6c65741043616c6c04045400010848726571756573745f636f72655f636f756e74040114636f756e74fc010c7531360001002c61737369676e5f636f7265100110636f7265fc013c42726f6b6572436f7265496e646578000114626567696e100144426c6f636b4e756d626572466f723c543e00012861737369676e6d656e74f106018c5665633c28436f726541737369676e6d656e742c2050617274734f663537363030293e000120656e645f68696e74550401644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e00042459015265636569766520696e737472756374696f6e732066726f6d20746865206045787465726e616c42726f6b65724f726967696e602c2064657461696c696e6720686f77206120737065636966696320636f72652069732c746f20626520757365642e002c506172616d65746572733a45012d606f726967696e603a20546865206045787465726e616c42726f6b65724f726967696e602c20617373756d656420746f206265207468652042726f6b65722073797374656d2070617261636861696e2eac2d60636f7265603a2054686520636f726520746861742073686f756c64206265207363686564756c65642ed82d60626567696e603a20546865207374617274696e6720626c6f636b686569676874206f662074686520696e737472756374696f6e2ed42d6061737369676e6d656e74603a20486f772074686520626c6f636b73706163652073686f756c64206265207574696c697365642e59012d60656e645f68696e74603a20416e206f7074696f6e616c2068696e7420617320746f207768656e207468697320706172746963756c617220736574206f6620696e737472756374696f6e732077696c6c20656e642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef106000002f50600f50600000408f906fd0600f9060c3470616c6c65745f62726f6b657248636f726574696d655f696e7465726661636538436f726541737369676e6d656e7400010c1049646c6500000010506f6f6c000100105461736b04001001185461736b496400020000fd060c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d653050617274734f66353736303000000400fc010c753136000001070c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001381073656e6408011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011c6d657373616765d9050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c753332000148110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e001d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f74656c65706f72745f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320002785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e003d012a2a546869732066756e6374696f6e20697320646570726563617465643a2055736520606c696d697465645f726573657276655f7472616e736665725f6173736574736020696e73746561642e2a2a005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765090701b4426f783c56657273696f6e656458636d3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f776569676874280118576569676874000320d04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e005d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e4101746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f7c657865637574696f6e20617474656d70742077696c6c206265206d6164652e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6e4d020134426f783c4c6f636174696f6e3e00011c76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e550401484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ec5040158426f783c56657273696f6e65644c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ec5040158426f783c56657273696f6e65644c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69748506012c5765696768744c696d69740008785d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2c7864657374696e6174696f6e206f722072656d6f746520726573657276652e003d016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e20616e64206d6179206e6f742062652074656c65706f727461626c6520746f206064657374602e4d01202d2060617373657473602068617665206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5501202d20606173736574736020686176652064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e6101202d20606173736574736020686176652072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f7665610120202072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f20606465737460f4202020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69748506012c5765696768744c696d6974000948110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d54202072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865682020666565206f6e207468652060646573746020636861696e2e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564200110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e3c7472616e736665725f61737365747314011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69748506012c5765696768744c696d6974000b845d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207468726f756768207468656972206c6f63616c2cd064657374696e6174696f6e206f722072656d6f746520726573657276652c206f72207468726f7567682074656c65706f7274732e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f663501696e64657820606665655f61737365745f6974656d60202868656e636520726566657272656420746f20617320606665657360292c20757020746f20656e6f75676820746f2070617920666f724101607765696768745f6c696d697460206f66207765696768742e204966206d6f726520776569676874206973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865dc6f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e006101606173736574736020286578636c7564696e672060666565736029206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206f74686572776973652062652074656c65706f727461626c65b0746f206064657374602c206e6f206c696d69746174696f6e7320696d706f736564206f6e206066656573602e4d01202d20666f72206c6f63616c20726573657276653a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e20636861696e20616e644d01202020666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f442020206062656e6566696369617279602e6101202d20666f722064657374696e6174696f6e20726573657276653a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f2060646573746020636861696e5901202020746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64206465706f736974207468656d50202020746f206062656e6566696369617279602e5d01202d20666f722072656d6f746520726573657276653a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f207265736572766520636861696e20746f206d6f76652072657365727665735d0120202066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f746865722058434d20746f2060646573746020746f206d696e74d4202020616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e5101202d20666f722074656c65706f7274733a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746f206d696e742f74656c65706f7274b020202061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e2d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c5501202050617261636861696e282e2e29296020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e6468202066726f6d2072656c617920746f2070617261636861696e2e55012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c98202067656e6572616c6c7920626520616e20604163636f756e7449643332602076616c75652e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e30636c61696d5f61737365747308011861737365747305070150426f783c56657273696f6e65644173736574733e00012c62656e6566696369617279c5040158426f783c56657273696f6e65644c6f636174696f6e3e000c185501436c61696d73206173736574732074726170706564206f6e20746869732070616c6c65742062656361757365206f66206c6566746f7665722061737365747320647572696e672058434d20657865637574696f6e2e00ac2d20606f726967696e603a20416e796f6e652063616e2063616c6c20746869732065787472696e7369632e5d012d2060617373657473603a20546865206578616374206173736574732074686174207765726520747261707065642e20557365207468652076657273696f6e20746f207370656369667920776861742076657273696f6e9877617320746865206c6174657374207768656e2074686579207765726520747261707065642e45012d206062656e6566696369617279603a20546865206c6f636174696f6e2f6163636f756e742077686572652074686520636c61696d6564206173736574732077696c6c206265206465706f73697465642e8c7472616e736665725f6173736574735f7573696e675f747970655f616e645f7468656e1c011064657374c5040158426f783c56657273696f6e65644c6f636174696f6e3e00011861737365747305070150426f783c56657273696f6e65644173736574733e0001506173736574735f7472616e736665725f7479706535070144426f783c5472616e73666572547970653e00013872656d6f74655f666565735f696439070154426f783c56657273696f6e6564417373657449643e000148666565735f7472616e736665725f7479706535070144426f783c5472616e73666572547970653e000148637573746f6d5f78636d5f6f6e5f64657374d9050154426f783c56657273696f6e656458636d3c28293e3e0001307765696768745f6c696d69748506012c5765696768744c696d6974000dc055015472616e73666572206173736574732066726f6d20746865206c6f63616c20636861696e20746f207468652064657374696e6174696f6e20636861696e207573696e67206578706c69636974207472616e7366657268747970657320666f722061737365747320616e6420666565732e0059016061737365747360206d75737420686176652073616d652072657365727665206c6f636174696f6e206f72206d61792062652074656c65706f727461626c6520746f206064657374602e2043616c6c6572206d757374ec70726f766964652074686520606173736574735f7472616e736665725f747970656020746f206265207573656420666f722060617373657473603a5101202d20605472616e73666572547970653a3a4c6f63616c52657365727665603a207472616e736665722061737365747320746f20736f7665726569676e206163636f756e74206f662064657374696e6174696f6e4d01202020636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365646c20202061737365747320746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a44657374696e6174696f6e52657365727665603a206275726e206c6f63616c2061737365747320616e6420666f72776172642061206e6f74696669636174696f6e20746f590120202060646573746020636861696e20746f207769746864726177207468652072657365727665206173736574732066726f6d207468697320636861696e277320736f7665726569676e206163636f756e7420616e64842020206465706f736974207468656d20746f206062656e6566696369617279602e5901202d20605472616e73666572547970653a3a52656d6f746552657365727665287265736572766529603a206275726e206c6f63616c206173736574732c20666f72776172642058434d20746f206072657365727665606101202020636861696e20746f206d6f76652072657365727665732066726f6d207468697320636861696e277320534120746f2060646573746020636861696e27732053412c20616e6420666f727761726420616e6f74686572550120202058434d20746f2060646573746020746f206d696e7420616e64206465706f73697420726573657276652d62617365642061737365747320746f206062656e6566696369617279602e205479706963616c6c79942020207468652072656d6f746520607265736572766560206973204173736574204875622e4501202d20605472616e73666572547970653a3a54656c65706f7274603a206275726e206c6f63616c2061737365747320616e6420666f72776172642058434d20746f2060646573746020636861696e20746fe82020206d696e742f74656c65706f72742061737365747320616e64206465706f736974207468656d20746f206062656e6566696369617279602e0055014f6e207468652064657374696e6174696f6e20636861696e2c2061732077656c6c20617320616e7920696e7465726d65646961727920686f70732c2060427579457865637574696f6e60206973207573656420746f210162757920657865637574696f6e207573696e67207472616e73666572726564206061737365747360206964656e746966696564206279206072656d6f74655f666565735f6964602e59014d616b65207375726520656e6f756768206f662074686520737065636966696564206072656d6f74655f666565735f69646020617373657420697320696e636c7564656420696e2074686520676976656e206c69737461016f662060617373657473602e206072656d6f74655f666565735f6964602073686f756c6420626520656e6f75676820746f2070617920666f7220607765696768745f6c696d6974602e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e64207468652073656e7420617373657473206d6179206265206174207269736b2e0045016072656d6f74655f666565735f696460206d61792075736520646966666572656e74207472616e736665722074797065207468616e2072657374206f6620606173736574736020616e642063616e2062659c737065636966696564207468726f7567682060666565735f7472616e736665725f74797065602e0061015468652063616c6c6572206e6565647320746f207370656369667920776861742073686f756c642068617070656e20746f20746865207472616e7366657272656420617373657473206f6e6365207468657920726561636841017468652060646573746020636861696e2e205468697320697320646f6e65207468726f756768207468652060637573746f6d5f78636d5f6f6e5f646573746020706172616d657465722c207768696368fc636f6e7461696e732074686520696e737472756374696f6e7320746f2065786563757465206f6e2060646573746020617320612066696e616c20737465702e7c20205468697320697320757375616c6c792061732073696d706c652061733a510120206058636d28766563215b4465706f7369744173736574207b206173736574733a2057696c6428416c6c436f756e746564286173736574732e6c656e282929292c2062656e6566696369617279207d5d29602c3101202062757420636f756c6420626520736f6d657468696e67206d6f72652065786f746963206c696b652073656e64696e6720746865206061737365747360206576656e20667572746865722e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e25012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c7920626520605b506172656e742c6101202050617261636861696e282e2e295d6020746f2073656e642066726f6d2070617261636861696e20746f2070617261636861696e2c206f7220605b50617261636861696e282e2e295d6020746f2073656e642066726f6d3d01202072656c617920746f2070617261636861696e2c206f72206028706172656e74733a20322c2028476c6f62616c436f6e73656e737573282e2e292c202e2e29296020746f2073656e642066726f6df4202070617261636861696e206163726f737320612062726964676520746f20616e6f746865722065636f73797374656d2064657374696e6174696f6e2e59012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f2070617920746865c82020666565206f6e20746865206064657374602028616e6420706f737369626c7920726573657276652920636861696e732e3d012d20606173736574735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e73666572207468652060617373657473602e2d012d206072656d6f74655f666565735f6964603a204f6e65206f662074686520696e636c7564656420606173736574736020746f206265206265207573656420746f2070617920666565732e49012d2060666565735f7472616e736665725f74797065603a205468652058434d20605472616e736665725479706560207573656420746f207472616e736665722074686520606665657360206173736574732e59012d2060637573746f6d5f78636d5f6f6e5f64657374603a205468652058434d20746f206265206578656375746564206f6e2060646573746020636861696e20617320746865206c6173742073746570206f6620746865590120207472616e736665722c20776869636820616c736f2064657465726d696e657320776861742068617070656e7320746f2074686520617373657473206f6e207468652064657374696e6174696f6e20636861696e2e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0507080c78636d3c56657273696f6e656441737365747300010c0856320400e905013c76323a3a4d756c746941737365747300010008563304003506013c76333a3a4d756c746941737365747300030008563404009506012876343a3a417373657473000400000907080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563204000d07015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304001d07015076333a3a58636d3c52756e74696d6543616c6c3e00030008563404002907015076343a3a58636d3c52756e74696d6543616c6c3e000400000d070c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400110701745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000110700000215070015070c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c00017034576974686472617741737365740400e905012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e905012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e905012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e736501060120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e736665724173736574080118617373657473e905012c4d756c746941737365747300012c62656e6566696369617279c90401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e905012c4d756c746941737365747300011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c19070168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400cd040154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374c90401344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473190601404d756c7469417373657446696c7465720001286d61785f6173736574737101010c75333200012c62656e6566696369617279c90401344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473190601404d756c7469417373657446696c7465720001286d61785f6173736574737101010c75333200011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e000e003445786368616e6765417373657408011067697665190601404d756c7469417373657446696c74657200011c72656365697665e905012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473190601404d756c7469417373657446696c74657200011c72657365727665c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473190601404d756c7469417373657446696c74657200011064657374c90401344d756c74694c6f636174696f6e00010c78636ddd05011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374c90401344d756c74694c6f636174696f6e000118617373657473190601404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573f10501284d756c746941737365740001307765696768745f6c696d69742506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000d07014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804000d07014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e905012c4d756c74694173736574730001187469636b6574c90401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b000019070c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656438011c5665633c75383e00001d070c0c78636d0876330c58636d041043616c6c00000400210701585665633c496e737472756374696f6e3c43616c6c3e3e0000210700000225070025070c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404003506012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003506012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003506012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736549060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572710601544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574733506012c4d756c746941737365747300012c62656e6566696369617279a90401344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733506012c4d756c746941737365747300011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c1907014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad040154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400750601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473790601404d756c7469417373657446696c74657200012c62656e6566696369617279a90401344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473790601404d756c7469417373657446696c74657200011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e000e003445786368616e676541737365740c011067697665790601404d756c7469417373657446696c74657200011077616e743506012c4d756c746941737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473790601404d756c7469417373657446696c74657200011c72657365727665a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473790601404d756c7469417373657446696c74657200011064657374a90401344d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f750601445175657279526573706f6e7365496e666f000118617373657473790601404d756c7469417373657446696c74657200120030427579457865637574696f6e080110666565733d0601284d756c746941737365740001307765696768745f6c696d69748506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001d07012458636d3c43616c6c3e0015002c536574417070656e64697804001d07012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733506012c4d756c74694173736574730001187469636b6574a90401344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404003506012c4d756c7469417373657473001c002c457870656374417373657404003506012c4d756c7469417373657473001d00304578706563744f726967696e0400710601544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f7204004d0601504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400690601384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666f750601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465787101010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f727101010c75333200013c6d696e5f63726174655f6d696e6f727101010c753332002200505265706f72745472616e736163745374617475730400750601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10401204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bb90401244e6574776f726b496400012c64657374696e6174696f6ead040154496e746572696f724d756c74694c6f636174696f6e00010c78636d2906011c58636d3c28293e002600244c6f636b417373657408011461737365743d0601284d756c74694173736574000120756e6c6f636b6572a90401344d756c74694c6f636174696f6e0027002c556e6c6f636b417373657408011461737365743d0601284d756c74694173736574000118746172676574a90401344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365743d0601284d756c746941737365740001146f776e6572a90401344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365743d0601284d756c746941737365740001186c6f636b6572a90401344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90401344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69748506012c5765696768744c696d6974000130636865636b5f6f726967696e710601544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000029070c2c73746167696e675f78636d0876340c58636d041043616c6c000004002d0701585665633c496e737472756374696f6e3c43616c6c3e3e00002d0700000231070031070c2c73746167696e675f78636d0876342c496e737472756374696f6e041043616c6c0001c03457697468647261774173736574040095060118417373657473000000545265736572766541737365744465706f7369746564040095060118417373657473000100585265636569766554656c65706f727465644173736574040095060118417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e7365a9060120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572bd0601404f7074696f6e3c4c6f636174696f6e3e000300345472616e7366657241737365740801186173736574739506011841737365747300012c62656e65666963696172794d0201204c6f636174696f6e000400505472616e736665725265736572766541737365740c011861737365747395060118417373657473000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64110601284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c1907014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e6465727101010c7533320001406d61785f6d6573736167655f73697a657101010c7533320001306d61785f63617061636974797101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e747101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f727101010c75333200011873656e6465727101010c753332000124726563697069656e747101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040051020140496e746572696f724c6f636174696f6e000b002c5265706f72744572726f720400c10601445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473c506012c417373657446696c74657200012c62656e65666963696172794d0201204c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473c506012c417373657446696c746572000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e000e003445786368616e676541737365740c011067697665c506012c417373657446696c74657200011077616e749506011841737365747300011c6d6178696d616c200110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473c506012c417373657446696c74657200011c726573657276654d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473c506012c417373657446696c746572000110646573744d0201204c6f636174696f6e00010c78636d8906011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666fc10601445175657279526573706f6e7365496e666f000118617373657473c506012c417373657446696c74657200120030427579457865637574696f6e080110666565739d06011441737365740001307765696768745f6c696d69748506012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204002907012458636d3c43616c6c3e0015002c536574417070656e64697804002907012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473950601184173736574730001187469636b65744d0201204c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e4173736574040095060118417373657473001c002c4578706563744173736574040095060118417373657473001d00304578706563744f726967696e0400bd0601404f7074696f6e3c4c6f636174696f6e3e001e002c4578706563744572726f7204004d0601504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400690601384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6538011c5665633c75383e000134726573706f6e73655f696e666fc10601445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e6465787101010c7533320001106e616d6538011c5665633c75383e00012c6d6f64756c655f6e616d6538011c5665633c75383e00012c63726174655f6d616a6f727101010c75333200013c6d696e5f63726174655f6d696e6f727101010c753332002200505265706f72745472616e736163745374617475730400c10601445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400590201204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b610201244e6574776f726b496400012c64657374696e6174696f6e51020140496e746572696f724c6f636174696f6e00010c78636d8906011c58636d3c28293e002600244c6f636b417373657408011461737365749d0601144173736574000120756e6c6f636b65724d0201204c6f636174696f6e0027002c556e6c6f636b417373657408011461737365749d06011441737365740001187461726765744d0201204c6f636174696f6e002800384e6f7465556e6c6f636b61626c6508011461737365749d06011441737365740001146f776e65724d0201204c6f636174696f6e0029003452657175657374556e6c6f636b08011461737365749d06011441737365740001186c6f636b65724d0201204c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177200110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e04004d0201204c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69748506012c5765696768744c696d6974000130636865636b5f6f726967696ebd0601404f7074696f6e3c4c6f636174696f6e3e002f00003507105073746167696e675f78636d5f6578656375746f72187472616974733861737365745f7472616e73666572305472616e73666572547970650001102054656c65706f7274000000304c6f63616c526573657276650001004844657374696e6174696f6e526573657276650002003452656d6f7465526573657276650400c504014456657273696f6e65644c6f636174696f6e000300003907080c78636d4056657273696f6e6564417373657449640001080856330400bd04012c76333a3a417373657449640003000856340400c104012c76343a3a41737365744964000400003d070c5070616c6c65745f6d6573736167655f71756575651870616c6c65741043616c6c04045400010824726561705f706167650801386d6573736167655f6f726967696e410701484d6573736167654f726967696e4f663c543e000128706167655f696e64657810012450616765496e6465780000043d0152656d6f76652061207061676520776869636820686173206e6f206d6f7265206d657373616765732072656d61696e696e6720746f2062652070726f636573736564206f72206973207374616c652e48657865637574655f6f7665727765696768741001386d6573736167655f6f726967696e410701484d6573736167654f726967696e4f663c543e0001107061676510012450616765496e646578000114696e64657810011c543a3a53697a650001307765696768745f6c696d6974280118576569676874000134784578656375746520616e206f766572776569676874206d6573736167652e004d0154656d706f726172792070726f63657373696e67206572726f72732077696c6c2062652070726f706167617465642077686572656173207065726d616e656e74206572726f7273206172652074726561746564546173207375636365737320636f6e646974696f6e2e00742d20606f726967696e603a204d75737420626520605369676e6564602e35012d20606d6573736167655f6f726967696e603a20546865206f726967696e2066726f6d20776869636820746865206d65737361676520746f20626520657865637574656420617272697665642e3d012d206070616765603a20546865207061676520696e2074686520717565756520696e20776869636820746865206d65737361676520746f2062652065786563757465642069732073697474696e672e09012d2060696e646578603a2054686520696e64657820696e746f20746865207175657565206f6620746865206d65737361676520746f2062652065786563757465642e59012d20607765696768745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656420746f20626520636f6e73756d656420696e2074686520657865637574696f6e4420206f6620746865206d6573736167652e00f442656e63686d61726b20636f6d706c657869747920636f6e73696465726174696f6e733a204f28696e646578202b207765696768745f6c696d6974292e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41070c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e584167677265676174654d6573736167654f726967696e0001040c556d70040045070128556d70517565756549640000000045070c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e28556d705175657565496400010410506172610400450201185061726149640000000049070c4470616c6c65745f61737365745f726174651870616c6c65741043616c6c04045400010c1863726561746508012861737365745f6b696e64a5040144426f783c543a3a41737365744b696e643e000110726174654d0701244669786564553132380000100d01496e697469616c697a65206120636f6e76657273696f6e207261746520746f206e61746976652062616c616e636520666f722074686520676976656e2061737365742e0034232320436f6d706c6578697479182d204f2831291875706461746508012861737365745f6b696e64a5040144426f783c543a3a41737365744b696e643e000110726174654d07012446697865645531323800011005015570646174652074686520636f6e76657273696f6e207261746520746f206e61746976652062616c616e636520666f722074686520676976656e2061737365742e0034232320436f6d706c6578697479182d204f2831291872656d6f766504012861737365745f6b696e64a5040144426f783c543a3a41737365744b696e643e000210250152656d6f766520616e206578697374696e6720636f6e76657273696f6e207261746520746f206e61746976652062616c616e636520666f722074686520676976656e2061737365742e0034232320436f6d706c6578697479182d204f283129040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d070c3473705f61726974686d657469632c66697865645f706f696e74244669786564553132380000040018011075313238000051070c4c70616c6c65745f726f6f745f74657374696e671870616c6c65741043616c6c0404540001082866696c6c5f626c6f636b040114726174696f94011c50657262696c6c00000405014120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e44747269676765725f646566656e73697665000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55070c3070616c6c65745f62656566791870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f665907018d01426f783c45717569766f636174696f6e50726f6f663c426c6f636b4e756d626572466f723c543e2c20543a3a426565667949642c3c543a3a426565667949640a61732052756e74696d654170705075626c69633e3a3a5369676e61747572652c3e2c3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f665907018d01426f783c45717569766f636174696f6e50726f6f663c426c6f636b4e756d626572466f723c543e2c20543a3a426565667949642c3c543a3a426565667949640a61732052756e74696d654170705075626c69633e3a3a5369676e61747572652c3e2c3e00013c6b65795f6f776e65725f70726f6f667d010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e3c7365745f6e65775f67656e6573697304013c64656c61795f696e5f626c6f636b73100144426c6f636b4e756d626572466f723c543e0002105d01526573657420424545465920636f6e73656e7375732062792073657474696e672061206e65772042454546592067656e65736973206174206064656c61795f696e5f626c6f636b736020626c6f636b7320696e207468651c6675747572652e00b44e6f74653a206064656c61795f696e5f626c6f636b73602068617320746f206265206174206c6561737420312e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5907084873705f636f6e73656e7375735f62656566794445717569766f636174696f6e50726f6f660c184e756d626572011008496401f901245369676e6174757265015d0700080114666972737461070188566f74654d6573736167653c4e756d6265722c2049642c205369676e61747572653e0001187365636f6e6461070188566f74654d6573736167653c4e756d6265722c2049642c205369676e61747572653e00005d070c4873705f636f6e73656e7375735f62656566793065636473615f63727970746f245369676e6174757265000004003103014065636473613a3a5369676e617475726500006107084873705f636f6e73656e7375735f62656566792c566f74654d6573736167650c184e756d626572011008496401f901245369676e6174757265015d07000c0128636f6d6d69746d656e7465070148436f6d6d69746d656e743c4e756d6265723e0001086964f901010849640001247369676e61747572655d0701245369676e6174757265000065070c4873705f636f6e73656e7375735f626565667928636f6d6d69746d656e7428436f6d6d69746d656e74043054426c6f636b4e756d6265720110000c011c7061796c6f61646907011c5061796c6f6164000130626c6f636b5f6e756d62657210013054426c6f636b4e756d62657200014076616c696461746f725f7365745f696430013856616c696461746f725365744964000069070c4873705f636f6e73656e7375735f62656566791c7061796c6f61641c5061796c6f6164000004006d0701785665633c2842656566795061796c6f616449642c205665633c75383e293e00006d07000002710700710700000408a90238007507105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e446964656e746974795f6d69677261746f721870616c6c65741043616c6c04045400010834726561705f6964656e7469747904010c77686f000130543a3a4163636f756e7449640000084501526561702074686520604964656e74697479496e666f60206f66206077686f602066726f6d20746865204964656e746974792070616c6c6574206f66206054602c20756e726573657276696e6720616e79fc6465706f736974732068656c6420616e642072656d6f76696e672073746f72616765206974656d73206173736f6369617465642077697468206077686f602e30706f6b655f6465706f73697404010c77686f000130543a3a4163636f756e744964000108510155706461746520746865206465706f736974206f66206077686f602e204d65616e7420746f2062652063616c6c6564206279207468652073797374656d207769746820616e2058434d20605472616e736163746030496e737472756374696f6e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79070c2873705f72756e74696d65187472616974732c426c616b6554776f323536000000007d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000081070c6070616c6c65745f636f6e76696374696f6e5f766f74696e671474797065731454616c6c790814566f746573011814546f74616c00000c011061796573180114566f7465730001106e617973180114566f74657300011c737570706f7274180114566f746573000085070c4070616c6c65745f77686974656c6973741870616c6c6574144576656e7404045400010c3c43616c6c57686974656c697374656404012463616c6c5f6861736834011c543a3a486173680000005857686974656c697374656443616c6c52656d6f76656404012463616c6c5f6861736834011c543a3a486173680001006457686974656c697374656443616c6c4469737061746368656408012463616c6c5f6861736834011c543a3a48617368000118726573756c74890701684469737061746368526573756c7457697468506f7374496e666f000200047c54686520604576656e746020656e756d206f6620746869732070616c6c657489070418526573756c74080454018d0704450195070108084f6b04008d07000000000c4572720400950700000100008d070c346672616d655f737570706f727420646973706174636840506f73744469737061746368496e666f000008013461637475616c5f776569676874910701384f7074696f6e3c5765696768743e000120706179735f666565640110506179730000910704184f7074696f6e04045401280108104e6f6e6500000010536f6d6504002800000100009507082873705f72756e74696d656444697370617463684572726f7257697468506f7374496e666f0410496e666f018d0700080124706f73745f696e666f8d070110496e666f0001146572726f7268013444697370617463684572726f72000099070c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001382050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e4841737365745370656e64417070726f766564180114696e6465781001285370656e64496e64657800012861737365745f6b696e64a5040130543a3a41737365744b696e64000118616d6f756e74180150417373657442616c616e63654f663c542c20493e00012c62656e6566696369617279c5040138543a3a42656e656669636961727900012876616c69645f66726f6d100144426c6f636b4e756d626572466f723c543e0001246578706972655f6174100144426c6f636b4e756d626572466f723c543e000904b441206e6577206173736574207370656e642070726f706f73616c20686173206265656e20617070726f7665642e4041737365745370656e64566f69646564040114696e6465781001285370656e64496e646578000a0474416e20617070726f766564207370656e642077617320766f696465642e1050616964080114696e6465781001285370656e64496e6465780001287061796d656e745f69643001643c543a3a5061796d6173746572206173205061793e3a3a4964000b044c41207061796d656e742068617070656e65642e345061796d656e744661696c6564080114696e6465781001285370656e64496e6465780001287061796d656e745f69643001643c543a3a5061796d6173746572206173205061793e3a3a4964000c049041207061796d656e74206661696c656420616e642063616e20626520726574726965642e385370656e6450726f636573736564040114696e6465781001285370656e64496e646578000d084d0141207370656e64207761732070726f63657373656420616e642072656d6f7665642066726f6d207468652073746f726167652e204974206d696768742068617665206265656e207375636365737366756c6c797070616964206f72206974206d6179206861766520657870697265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749d07106c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e1870616c6c6574144576656e740404540001103c43616e6469646174654261636b65641000a107016443616e646964617465526563656970743c543a3a486173683e00006d05012048656164446174610000a5070124436f7265496e6465780000a907012847726f7570496e646578000004c0412063616e64696461746520776173206261636b65642e20605b63616e6469646174652c20686561645f646174615d604443616e646964617465496e636c756465641000a107016443616e646964617465526563656970743c543a3a486173683e00006d05012048656164446174610000a5070124436f7265496e6465780000a907012847726f7570496e646578000104c8412063616e6469646174652077617320696e636c756465642e20605b63616e6469646174652c20686561645f646174615d604443616e64696461746554696d65644f75740c00a107016443616e646964617465526563656970743c543a3a486173683e00006d05012048656164446174610000a5070124436f7265496e646578000204bc412063616e6469646174652074696d6564206f75742e20605b63616e6469646174652c20686561645f646174615d60585570776172644d65737361676573526563656976656408011066726f6d45020118506172614964000114636f756e7410010c753332000304f8536f6d6520757077617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a1070c4c706f6c6b61646f745f7072696d6974697665730876374043616e6469646174655265636569707404044801340008012864657363726970746f724105015843616e64696461746544657363726970746f723c483e000140636f6d6d69746d656e74735f68617368340110486173680000a5070c4c706f6c6b61646f745f7072696d69746976657308763724436f7265496e6465780000040010010c7533320000a9070c4c706f6c6b61646f745f7072696d6974697665730876372847726f7570496e6465780000040010010c7533320000ad07106c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261731870616c6c6574144576656e740001204843757272656e74436f646555706461746564040045020118506172614964000004cc43757272656e7420636f646520686173206265656e207570646174656420666f72206120506172612e2060706172615f6964604843757272656e744865616455706461746564040045020118506172614964000104cc43757272656e74206865616420686173206265656e207570646174656420666f72206120506172612e2060706172615f69646050436f6465557067726164655363686564756c6564040045020118506172614964000204dc4120636f6465207570677261646520686173206265656e207363686564756c656420666f72206120506172612e2060706172615f696460304e6577486561644e6f746564040045020118506172614964000304bc41206e6577206865616420686173206265656e206e6f74656420666f72206120506172612e2060706172615f69646030416374696f6e517565756564080045020118506172614964000010013053657373696f6e496e646578000404f041207061726120686173206265656e2071756575656420746f20657865637574652070656e64696e6720616374696f6e732e2060706172615f6964603c507666436865636b5374617274656408004d05014856616c69646174696f6e436f646548617368000045020118506172614964000508550154686520676976656e20706172612065697468657220696e69746961746564206f72207375627363726962656420746f20612050564620636865636b20666f722074686520676976656e2076616c69646174696f6e6c636f64652e2060636f64655f68617368602060706172615f69646040507666436865636b416363657074656408004d05014856616c69646174696f6e436f646548617368000045020118506172614964000608110154686520676976656e2076616c69646174696f6e20636f6465207761732061636365707465642062792074686520505646207072652d636865636b696e6720766f74652e5460636f64655f68617368602060706172615f69646040507666436865636b52656a656374656408004d05014856616c69646174696f6e436f646548617368000045020118506172614964000708110154686520676976656e2076616c69646174696f6e20636f6465207761732072656a65637465642062792074686520505646207072652d636865636b696e6720766f74652e5460636f64655f68617368602060706172615f696460047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b107106c706f6c6b61646f745f72756e74696d655f70617261636861696e731068726d701870616c6c6574144576656e7404045400011c504f70656e4368616e6e656c52657175657374656410011873656e64657245020118506172614964000124726563697069656e744502011850617261496400015470726f706f7365645f6d61785f636170616369747910010c75333200016470726f706f7365645f6d61785f6d6573736167655f73697a6510010c753332000004704f70656e2048524d50206368616e6e656c207265717565737465642e4c4f70656e4368616e6e656c43616e63656c656408013062795f70617261636861696e450201185061726149640001286368616e6e656c5f6964ad05013448726d704368616e6e656c49640001042901416e2048524d50206368616e6e656c20726571756573742073656e7420627920746865207265636569766572207761732063616e63656c6564206279206569746865722070617274792e4c4f70656e4368616e6e656c416363657074656408011873656e64657245020118506172614964000124726563697069656e74450201185061726149640002046c4f70656e2048524d50206368616e6e656c2061636365707465642e344368616e6e656c436c6f73656408013062795f70617261636861696e450201185061726149640001286368616e6e656c5f6964ad05013448726d704368616e6e656c49640003045048524d50206368616e6e656c20636c6f7365642e5848726d704368616e6e656c466f7263654f70656e656410011873656e64657245020118506172614964000124726563697069656e744502011850617261496400015470726f706f7365645f6d61785f636170616369747910010c75333200016470726f706f7365645f6d61785f6d6573736167655f73697a6510010c753332000404ac416e2048524d50206368616e6e656c20776173206f70656e65642076696120526f6f74206f726967696e2e5c48726d7053797374656d4368616e6e656c4f70656e656410011873656e64657245020118506172614964000124726563697069656e744502011850617261496400015470726f706f7365645f6d61785f636170616369747910010c75333200016470726f706f7365645f6d61785f6d6573736167655f73697a6510010c753332000504bc416e2048524d50206368616e6e656c20776173206f70656e6564207769746820612073797374656d20636861696e2e684f70656e4368616e6e656c4465706f736974735570646174656408011873656e64657245020118506172614964000124726563697069656e7445020118506172614964000604a0416e2048524d50206368616e6e656c2773206465706f73697473207765726520757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b507106c706f6c6b61646f745f72756e74696d655f70617261636861696e732064697370757465731870616c6c6574144576656e7404045400010c4044697370757465496e6974696174656408008105013443616e646964617465486173680000b907013c446973707574654c6f636174696f6e000004090141206469737075746520686173206265656e20696e697469617465642e205c5b63616e64696461746520686173682c2064697370757465206c6f636174696f6e5c5d4044697370757465436f6e636c7564656408008105013443616e646964617465486173680000bd07013444697370757465526573756c74000108cc4120646973707574652068617320636f6e636c7564656420666f72206f7220616761696e737420612063616e6469646174652eb4605c5b706172612069642c2063616e64696461746520686173682c206469737075746520726573756c745c5d60185265766572740400100144426c6f636b4e756d626572466f723c543e000210fc4120646973707574652068617320636f6e636c7564656420776974682073757065726d616a6f7269747920616761696e737420612063616e6469646174652e0d01426c6f636b20617574686f72732073686f756c64206e6f206c6f6e676572206275696c64206f6e20746f70206f662074686973206865616420616e642073686f756c640101696e7374656164207265766572742074686520626c6f636b2061742074686520676976656e206865696768742e20546869732073686f756c6420626520746865fc6e756d626572206f6620746865206368696c64206f6620746865206c617374206b6e6f776e2076616c696420626c6f636b20696e2074686520636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574b9070c6c706f6c6b61646f745f72756e74696d655f70617261636861696e732064697370757465733c446973707574654c6f636174696f6e000108144c6f63616c0000001852656d6f746500010000bd070c6c706f6c6b61646f745f72756e74696d655f70617261636861696e732064697370757465733444697370757465526573756c740001081456616c69640000001c496e76616c696400010000c107106c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e641870616c6c6574144576656e740404540001084c4f6e44656d616e644f72646572506c6163656408011c706172615f69644502011850617261496400012873706f745f707269636518013042616c616e63654f663c543e000004b8416e206f726465722077617320706c6163656420617420736f6d652073706f7420707269636520616d6f756e742e3853706f745472616666696353657404011c747261666669634d070124466978656455313238000104c45468652076616c7565206f66207468652073706f742074726166666963206d756c7469706c696572206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c507105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3c70617261735f7265676973747261721870616c6c6574144576656e74040454000110285265676973746572656408011c706172615f69644502011850617261496400011c6d616e61676572000130543a3a4163636f756e7449640000003044657265676973746572656404011c706172615f69644502011850617261496400010020526573657276656408011c706172615f69644502011850617261496400010c77686f000130543a3a4163636f756e7449640002001c5377617070656408011c706172615f6964450201185061726149640001206f746865725f696445020118506172614964000300047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c907105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e14736c6f74731870616c6c6574144576656e74040454000108384e65774c65617365506572696f640401306c656173655f706572696f641001404c65617365506572696f644f663c543e0000049041206e657720605b6c656173655f706572696f645d6020697320626567696e6e696e672e184c656173656418011c706172615f6964450201185061726149640001186c6561736572000130543a3a4163636f756e744964000130706572696f645f626567696e1001404c65617365506572696f644f663c543e000130706572696f645f636f756e741001404c65617365506572696f644f663c543e00013865787472615f726573657276656418013042616c616e63654f663c543e000130746f74616c5f616d6f756e7418013042616c616e63654f663c543e00010c35014120706172612068617320776f6e2074686520726967687420746f206120636f6e74696e756f757320736574206f66206c6561736520706572696f647320617320612070617261636861696e2e450146697273742062616c616e636520697320616e7920657874726120616d6f756e74207265736572766564206f6e20746f70206f662074686520706172612773206578697374696e67206465706f7369742eb05365636f6e642062616c616e63652069732074686520746f74616c20616d6f756e742072657365727665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cd07105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2061756374696f6e731870616c6c6574144576656e7404045400011c3841756374696f6e537461727465640c013461756374696f6e5f696e64657810013041756374696f6e496e6465780001306c656173655f706572696f641001404c65617365506572696f644f663c543e000118656e64696e67100144426c6f636b4e756d626572466f723c543e0000084901416e2061756374696f6e20737461727465642e2050726f76696465732069747320696e64657820616e642074686520626c6f636b206e756d6265722077686572652069742077696c6c20626567696e20746f1501636c6f736520616e6420746865206669727374206c6561736520706572696f64206f662074686520717561647275706c657420746861742069732061756374696f6e65642e3441756374696f6e436c6f73656404013461756374696f6e5f696e64657810013041756374696f6e496e646578000104b8416e2061756374696f6e20656e6465642e20416c6c2066756e6473206265636f6d6520756e72657365727665642e2052657365727665640c0118626964646572000130543a3a4163636f756e74496400013865787472615f726573657276656418013042616c616e63654f663c543e000130746f74616c5f616d6f756e7418013042616c616e63654f663c543e000208490146756e6473207765726520726573657276656420666f7220612077696e6e696e67206269642e2046697273742062616c616e63652069732074686520657874726120616d6f756e742072657365727665642e505365636f6e642069732074686520746f74616c2e28556e7265736572766564080118626964646572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000304290146756e6473207765726520756e72657365727665642073696e636520626964646572206973206e6f206c6f6e676572206163746976652e20605b6269646465722c20616d6f756e745d604852657365727665436f6e66697363617465640c011c706172615f6964450201185061726149640001186c6561736572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0004085501536f6d656f6e6520617474656d7074656420746f206c65617365207468652073616d6520736c6f7420747769636520666f7220612070617261636861696e2e2054686520616d6f756e742069732068656c6420696eb87265736572766520627574206e6f2070617261636861696e20736c6f7420686173206265656e206c65617365642e2c4269644163636570746564140118626964646572000130543a3a4163636f756e74496400011c706172615f696445020118506172614964000118616d6f756e7418013042616c616e63654f663c543e00012866697273745f736c6f741001404c65617365506572696f644f663c543e0001246c6173745f736c6f741001404c65617365506572696f644f663c543e000504c841206e65772062696420686173206265656e206163636570746564206173207468652063757272656e742077696e6e65722e3457696e6e696e674f666673657408013461756374696f6e5f696e64657810013041756374696f6e496e646578000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00060859015468652077696e6e696e67206f6666736574207761732063686f73656e20666f7220616e2061756374696f6e2e20546869732077696c6c206d617020696e746f20746865206057696e6e696e67602073746f72616765106d61702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d107105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2463726f77646c6f616e1870616c6c6574144576656e740404540001281c4372656174656404011c706172615f6964450201185061726149640000048c4372656174652061206e65772063726f77646c6f616e696e672063616d706169676e2e2c436f6e74726962757465640c010c77686f000130543a3a4163636f756e74496400012866756e645f696e64657845020118506172614964000118616d6f756e7418013042616c616e63654f663c543e00010470436f6e747269627574656420746f20612063726f77642073616c652e2057697468647265770c010c77686f000130543a3a4163636f756e74496400012866756e645f696e64657845020118506172614964000118616d6f756e7418013042616c616e63654f663c543e0002049c57697468647265772066756c6c2062616c616e6365206f66206120636f6e7472696275746f722e445061727469616c6c79526566756e64656404011c706172615f6964450201185061726149640003082d01546865206c6f616e7320696e20612066756e642068617665206265656e207061727469616c6c7920646973736f6c7665642c20692e652e2074686572652061726520736f6d65206c656674b46f766572206368696c64206b6579732074686174207374696c6c206e65656420746f206265206b696c6c65642e2c416c6c526566756e64656404011c706172615f6964450201185061726149640004049c416c6c206c6f616e7320696e20612066756e642068617665206265656e20726566756e6465642e24446973736f6c76656404011c706172615f6964450201185061726149640005044846756e6420697320646973736f6c7665642e3c48616e646c65426964526573756c7408011c706172615f696445020118506172614964000118726573756c74c401384469737061746368526573756c74000604f454686520726573756c74206f6620747279696e6720746f207375626d69742061206e65772062696420746f2074686520536c6f74732070616c6c65742e1845646974656404011c706172615f696445020118506172614964000704c454686520636f6e66696775726174696f6e20746f20612063726f77646c6f616e20686173206265656e206564697465642e2c4d656d6f557064617465640c010c77686f000130543a3a4163636f756e74496400011c706172615f6964450201185061726149640001106d656d6f38011c5665633c75383e0008046041206d656d6f20686173206265656e20757064617465642e3c4164646564546f4e6577526169736504011c706172615f696445020118506172614964000904a0412070617261636861696e20686173206265656e206d6f76656420746f20604e6577526169736560047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d507105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3861737369676e65645f736c6f74731870616c6c6574144576656e74040454000110545065726d616e656e74536c6f7441737369676e6564040045020118506172614964000004cc412070617261636861696e207761732061737369676e65642061207065726d616e656e742070617261636861696e20736c6f745454656d706f72617279536c6f7441737369676e6564040045020118506172614964000104cc412070617261636861696e207761732061737369676e656420612074656d706f726172792070617261636861696e20736c6f74604d61785065726d616e656e74536c6f74734368616e676564040114736c6f747310010c753332000204d8546865206d6178696d756d206e756d626572206f66207065726d616e656e7420736c6f747320686173206265656e206368616e676564604d617854656d706f72617279536c6f74734368616e676564040114736c6f747310010c753332000304d8546865206d6178696d756d206e756d626572206f662074656d706f7261727920736c6f747320686173206265656e206368616e676564047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d907106c706f6c6b61646f745f72756e74696d655f70617261636861696e7320636f726574696d651870616c6c6574144576656e7404045400010850526576656e7565496e666f5265717565737465640401107768656e100144426c6f636b4e756d626572466f723c543e00000421015468652062726f6b657220636861696e206861732061736b656420666f7220726576656e756520696e666f726d6174696f6e20666f72206120737065636966696320626c6f636b2e30436f726541737369676e6564040110636f7265a5070124436f7265496e646578000104ec4120636f7265206861732072656365697665642061206e65772061737369676e6d656e742066726f6d207468652062726f6b657220636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd070c2870616c6c65745f78636d1870616c6c6574144576656e7404045400016024417474656d7074656404011c6f7574636f6d65e107015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696e4d0201204c6f636174696f6e00012c64657374696e6174696f6e4d0201204c6f636174696f6e00011c6d6573736167658906011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696e4d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696430011c51756572794964000120726573706f6e7365a9060120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c4901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e5901636f756c64206e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696430011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696e4d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400014465787065637465645f6c6f636174696f6ebd0601404f7074696f6e3c4c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696e4d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696430011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368340110483235360001186f726967696e4d0201204c6f636174696f6e0001186173736574730507013c56657273696f6e6564417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6e4d0201204c6f636174696f6e000118726573756c7410012858636d56657273696f6e000110636f7374950601184173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6e4d0201204c6f636174696f6e00011c76657273696f6e10012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6e4d0201204c6f636174696f6e00012071756572795f696430011c517565727949640001146572726f725506012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6ec504014456657273696f6e65644c6f636174696f6e00012071756572795f696430011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696e4d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696e4d0201204c6f636174696f6e00012071756572795f696430011c5175657279496400014065787065637465645f717565726965724d0201204c6f636174696f6e0001506d617962655f61637475616c5f71756572696572bd0601404f7074696f6e3c4c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6e4d0201204c6f636174696f6e000110636f7374950601184173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6e4d0201204c6f636174696f6e000110636f7374950601184173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6e4d0201204c6f636174696f6e000110636f7374950601184173736574730001286d6573736167655f696404011c58636d4861736800140825015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765386e6f74696669636174696f6e732e204665657350616964080118706179696e674d0201204c6f636174696f6e0001106665657395060118417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368340110483235360001186f726967696e4d0201204c6f636174696f6e0001186173736574730507013c56657273696f6e6564417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e20617373657420747261706056657273696f6e4d6967726174696f6e46696e697368656404011c76657273696f6e10012858636d56657273696f6e00170484412058434d2076657273696f6e206d6967726174696f6e2066696e69736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e107102c73746167696e675f78636d087634187472616974731c4f7574636f6d6500010c20436f6d706c6574650401107573656428011857656967687400000028496e636f6d706c657465080110757365642801185765696768740001146572726f72550601144572726f72000100144572726f720401146572726f72550601144572726f7200020000e5070c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144576656e740404540001104050726f63657373696e674661696c65640c010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e410701484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e01146572726f72e907014c50726f636573734d6573736167654572726f721060546865206572726f722074686174206f636375727265642e00490154686973206572726f7220697320707265747479206f70617175652e204d6f72652066696e652d677261696e6564206572726f7273206e65656420746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e000455014d657373616765206469736361726465642064756520746f20616e206572726f7220696e2074686520604d65737361676550726f636573736f72602028757375616c6c79206120666f726d6174206572726f72292e2450726f63657373656410010869643401104832353604945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e410701484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e012c7765696768745f7573656428011857656967687404c0486f77206d7563682077656967687420776173207573656420746f2070726f6365737320746865206d6573736167652e011c73756363657373200110626f6f6c18885768657468657220746865206d657373616765207761732070726f6365737365642e0049014e6f74652074686174207468697320646f6573206e6f74206d65616e20746861742074686520756e6465726c79696e6720604d65737361676550726f636573736f72602077617320696e7465726e616c6c7935017375636365737366756c2e204974202a736f6c656c792a206d65616e73207468617420746865204d512070616c6c65742077696c6c2074726561742074686973206173206120737563636573734d01636f6e646974696f6e20616e64206469736361726420746865206d6573736167652e20416e7920696e7465726e616c206572726f72206e6565647320746f20626520656d6974746564206173206576656e74736862792074686520604d65737361676550726f636573736f72602e0104544d6573736167652069732070726f6365737365642e484f766572776569676874456e71756575656410010869640401205b75383b2033325d04945468652060626c616b65325f323536602068617368206f6620746865206d6573736167652e01186f726967696e410701484d6573736167654f726967696e4f663c543e0464546865207175657565206f6620746865206d6573736167652e0128706167655f696e64657810012450616765496e64657804605468652070616765206f6620746865206d6573736167652e01346d6573736167655f696e64657810011c543a3a53697a6504a454686520696e646578206f6620746865206d6573736167652077697468696e2074686520706167652e02048c4d65737361676520706c6163656420696e206f7665727765696768742071756575652e28506167655265617065640801186f726967696e410701484d6573736167654f726967696e4f663c543e0458546865207175657565206f662074686520706167652e0114696e64657810012450616765496e646578045854686520696e646578206f662074686520706167652e03045454686973207061676520776173207265617065642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e90710346672616d655f737570706f727418747261697473206d657373616765734c50726f636573734d6573736167654572726f7200011424426164466f726d61740000001c436f72727570740001002c556e737570706f72746564000200284f7665727765696768740400280118576569676874000300145969656c6400040000ed070c4470616c6c65745f61737365745f726174651870616c6c6574144576656e7404045400010c404173736574526174654372656174656408012861737365745f6b696e64a5040130543a3a41737365744b696e64000110726174654d0701244669786564553132380000004041737365745261746552656d6f76656404012861737365745f6b696e64a5040130543a3a41737365744b696e6400010040417373657452617465557064617465640c012861737365745f6b696e64a5040130543a3a41737365744b696e6400010c6f6c644d07012446697865645531323800010c6e65774d070124466978656455313238000200047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f1070c4c70616c6c65745f726f6f745f74657374696e671870616c6c6574144576656e7404045400010444446566656e736976655465737443616c6c00000401014576656e742064697370617463686564207768656e2074686520747269676765725f646566656e736976652065787472696e7369632069732063616c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f507105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e446964656e746974795f6d69677261746f721870616c6c6574144576656e74040454000108384964656e7469747952656170656404010c77686f000130543a3a4163636f756e744964000004e0546865206964656e7469747920616e6420616c6c20737562206163636f756e747320776572652072656170656420666f72206077686f602e384465706f736974557064617465640c010c77686f000130543a3a4163636f756e7449640001206964656e7469747918013042616c616e63654f663c543e0001107375627318013042616c616e63654f663c543e0001084101546865206465706f736974732068656c6420666f72206077686f60207765726520757064617465642e20606964656e746974796020697320746865206e6577206465706f7369742068656c6420666f721d016964656e7469747920696e666f2c20616e642060737562736020697320746865206e6577206465706f7369742068656c6420666f7220746865207375622d6163636f756e74732e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f90708306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000fd07000002e000010808306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e7101014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d650508016473705f72756e74696d653a3a52756e74696d65537472696e67000005080000050200090808306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e200110626f6f6c00000d080c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373110801845065724469737061746368436c6173733c57656967687473506572436c6173733e000011080c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011508000c01186e6f726d616c150801045400012c6f7065726174696f6e616c15080104540001246d616e6461746f72791508010454000015080c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963910701384f7074696f6e3c5765696768743e0001246d61785f746f74616c910701384f7074696f6e3c5765696768743e0001207265736572766564910701384f7074696f6e3c5765696768743e000019080c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d61781d0801545065724469737061746368436c6173733c7533323e00001d080c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400002108082873705f776569676874733c52756e74696d65446257656967687400000801107265616430010c753634000114777269746530010c75363400002508082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d650508013452756e74696d65537472696e67000124696d706c5f6e616d650508013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069732908011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800002908040c436f77040454012d080004002d080000002d08000002310800310800000408bd02100035080c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c657439080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013d08045300000400410801185665633c543e00003d08000004087501300041080000023d080045080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400490801185665633c543e0000490800000204004d0804184f7074696f6e0404540151080108104e6f6e6500000010536f6d6504005108000001000051080c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400550801405072696d617279507265446967657374000100385365636f6e64617279506c61696e04005d08015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400610801545365636f6e646172795652465072654469676573740003000055080c4473705f636f6e73656e7375735f626162651c64696765737473405072696d61727950726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7479010110536c6f740001347672665f7369676e6174757265590801305672665369676e617475726500005908101c73705f636f72651c737232353531390c767266305672665369676e617475726500000801287072655f6f75747075740401305672665072654f757470757400011470726f6f661902012056726650726f6f6600005d080c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7479010110536c6f74000061080c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e6461727956524650726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7479010110536c6f740001347672665f7369676e6174757265590801305672665369676e617475726500006508084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e00000801046385010128287536342c2075363429000134616c6c6f7765645f736c6f747389010130416c6c6f776564536c6f7473000069080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d08045300000400710801185665633c543e00006d080000040830100071080000026d080075080c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79080000040c001820007d080c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e81080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e6465645665630804540185080453000004008d0801185665633c543e000085080c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964bd0201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e738908011c526561736f6e73000089080c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200008d0800000285080091080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019508045300000400990801185665633c543e000095080c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e74696669657201bd021c42616c616e63650118000801086964bd020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000099080000029508009d080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a108045300000400ad0801185665633c543e0000a1080c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401a5081c42616c616e63650118000801086964a50801084964000118616d6f756e7418011c42616c616e63650000a508083c77657374656e645f72756e74696d654452756e74696d65486f6c64526561736f6e00010420507265696d6167650400a908016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e001c0000a9080c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d61676500000000ad08000002a10800b1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b508045300000400c10801185665633c543e0000b5080c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401b9081c42616c616e63650118000801086964b90801084964000118616d6f756e7418011c42616c616e63650000b908083c77657374656e645f72756e74696d654c52756e74696d65467265657a65526561736f6e0001043c4e6f6d696e6174696f6e506f6f6c730400bd08019470616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a467265657a65526561736f6e001d0000bd080c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657430467265657a65526561736f6e00010438506f6f6c4d696e42616c616e636500000000c108000002b50800c5080c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec908086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000cd08083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616ca501013042616c616e63654f663c543e000118616374697665a501013042616c616e63654f663c543e000124756e6c6f636b696e67d90101f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e0001586c65676163795f636c61696d65645f72657761726473d1080194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e0000d1080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400410101185665633c543e0000d508083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473d90801b4426f756e6465645665633c543a3a4163636f756e7449642c204d61784e6f6d696e6174696f6e734f663c543e3e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564200110626f6f6c0000d9080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a90101185665633c543e0000dd08083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e6465780001147374617274e108012c4f7074696f6e3c7536343e0000e10804184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000e50800000408100000e908082873705f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616ca501011c42616c616e636500010c6f776ea501011c42616c616e63650001186f7468657273ed0801ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000ed08000002f10800f108082873705f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565a501011c42616c616e63650000f508082873705f7374616b696e675450616765644578706f737572654d65746164617461041c42616c616e6365011800100114746f74616ca501011c42616c616e636500010c6f776ea501011c42616c616e636500013c6e6f6d696e61746f725f636f756e7410010c753332000128706167655f636f756e74100110506167650000f9080000040c10001000fd08082873705f7374616b696e67304578706f737572655061676508244163636f756e74496401001c42616c616e6365011800080128706167655f746f74616ca501011c42616c616e63650001186f7468657273ed0801ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e00000109083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c0509018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00000509042042547265654d617008044b010004560110000400090900000009090000020d09000d090000040800100011090000021509001509083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f74686572734d0401645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273a90101385665633c4163636f756e7449643e0001187061796f757418011c42616c616e636500001909000004089418001d090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72410101345665633c457261496e6465783e000021090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e6365000025090000022909002909000004081020002d09103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000178344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e2c496e76616c696450616765000f04844e6f206e6f6d696e61746f7273206578697374206f6e207468697320706167652e54496e636f7272656374486973746f72794465707468001004c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001104b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650012043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300130494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740014043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001504550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730016084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001708550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001804e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400190458536f6d6520626f756e64206973206e6f74206d65742e50436f6e74726f6c6c657244657072656361746564001a04010155736564207768656e20617474656d7074696e6720746f20757365206465707265636174656420636f6e74726f6c6c6572206163636f756e74206c6f6769632e4c43616e6e6f74526573746f72654c6564676572001b045843616e6e6f742072657365742061206c65646765722e6c52657761726444657374696e6174696f6e52657374726963746564001c04ac50726f7669646564207265776172642064657374696e6174696f6e206973206e6f7420616c6c6f7765642e384e6f74456e6f75676846756e6473001d049c4e6f7420656e6f7567682066756e647320617661696c61626c6520746f2077697468647261772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31090c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e646572013509000801206f6666656e646572350901204f6666656e6465720001247265706f7274657273a90101345665633c5265706f727465723e000035090000040800e90800390900000408a838003d0900000408341000410900000245090045090000040800e901004909000004084d0938004d090c1c73705f636f72651863727970746f244b65795479706549640000040048011c5b75383b20345d000051090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e5509083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300005909083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965735d09016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564550401244f7074696f6e3c4e3e00005d090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b8045300000400b401185665633c543e000061090c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e65090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401f501045300000400690901185665633c543e00006909000002f501006d090c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e710900000408750985090075090c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e747300304964656e74697479496e666f019102000c01286a756467656d656e7473790901fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f910201304964656e74697479496e666f000079090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d09045300000400810901185665633c543e00007d09000004081025030081090000027d0900850904184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d00000010000890900000408188d09008d090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a90101185665633c543e000091090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540195090453000004009d0901185665633c543e0000950904184f7074696f6e0404540199090108104e6f6e6500000010536f6d6504009909000001000099090c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f0c1c42616c616e63650118244163636f756e74496401001c49644669656c640130000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c647330011c49644669656c6400009d09000002950900a1090c3c70616c6c65745f6964656e746974791474797065734c417574686f7269747950726f70657274696573041853756666697801a50900080118737566666978a5090118537566666978000128616c6c6f636174696f6e100128416c6c6f636174696f6e0000a5090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000a9090c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400016848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e44546f6f4d616e7952656769737472617273000b04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000c04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000d047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000e04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479000f04d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001004f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e34496e76616c6964537566666978001104805468652070726f76696465642073756666697820697320746f6f206c6f6e672e504e6f74557365726e616d65417574686f72697479001204e05468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e20746f206973737565206120757365726e616d652e304e6f416c6c6f636174696f6e001304c454686520617574686f726974792063616e6e6f7420616c6c6f6361746520616e79206d6f726520757365726e616d65732e40496e76616c69645369676e6174757265001404a8546865207369676e6174757265206f6e206120757365726e616d6520776173206e6f742076616c69642e4452657175697265735369676e6174757265001504090153657474696e67207468697320757365726e616d652072657175697265732061207369676e61747572652c20627574206e6f6e65207761732070726f76696465642e3c496e76616c6964557365726e616d65001604b054686520757365726e616d6520646f6573206e6f74206d6565742074686520726571756972656d656e74732e34557365726e616d6554616b656e0017047854686520757365726e616d6520697320616c72656164792074616b656e2e284e6f557365726e616d65001804985468652072657175657374656420757365726e616d6520646f6573206e6f742065786973742e284e6f74457870697265640019042d0154686520757365726e616d652063616e6e6f7420626520666f72636566756c6c792072656d6f76656420626563617573652069742063616e207374696c6c2062652061636365707465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead09083c70616c6c65745f7265636f76657279385265636f76657279436f6e6669670c2c426c6f636b4e756d62657201101c42616c616e636501181c467269656e647301b1090010013064656c61795f706572696f6410012c426c6f636b4e756d62657200011c6465706f73697418011c42616c616e636500011c667269656e6473b109011c467269656e64730001247468726573686f6c64fc010c7531360000b1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a90101185665633c543e0000b50900000408000000b909083c70616c6c65745f7265636f76657279384163746976655265636f766572790c2c426c6f636b4e756d62657201101c42616c616e636501181c467269656e647301b109000c011c6372656174656410012c426c6f636b4e756d62657200011c6465706f73697418011c42616c616e636500011c667269656e6473b109011c467269656e64730000bd090c3c70616c6c65745f7265636f766572791870616c6c6574144572726f72040454000140284e6f74416c6c6f776564000004f055736572206973206e6f7420616c6c6f77656420746f206d616b6520612063616c6c206f6e20626568616c66206f662074686973206163636f756e74345a65726f5468726573686f6c640001048c5468726573686f6c64206d7573742062652067726561746572207468616e207a65726f404e6f74456e6f756768467269656e6473000204d0467269656e6473206c697374206d7573742062652067726561746572207468616e207a65726f20616e64207468726573686f6c64284d6178467269656e6473000304a8467269656e6473206c697374206d757374206265206c657373207468616e206d617820667269656e6473244e6f74536f72746564000404c8467269656e6473206c697374206d75737420626520736f7274656420616e642066726565206f66206475706c696361746573384e6f745265636f76657261626c650005049c54686973206163636f756e74206973206e6f742073657420757020666f72207265636f7665727948416c72656164795265636f76657261626c65000604ac54686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f7665727938416c726561647953746172746564000704dc41207265636f766572792070726f636573732068617320616c7265616479207374617274656420666f722074686973206163636f756e74284e6f7453746172746564000804cc41207265636f766572792070726f6365737320686173206e6f74207374617274656420666f7220746869732072657363756572244e6f74467269656e64000904a854686973206163636f756e74206973206e6f74206120667269656e642077686f2063616e20766f7563682c44656c6179506572696f64000a04190154686520667269656e64206d757374207761697420756e74696c207468652064656c617920706572696f6420746f20766f75636820666f722074686973207265636f7665727938416c7265616479566f7563686564000b04bc5468697320757365722068617320616c726561647920766f756368656420666f722074686973207265636f76657279245468726573686f6c64000c04e8546865207468726573686f6c6420666f72207265636f766572696e672074686973206163636f756e7420686173206e6f74206265656e206d65742c5374696c6c416374697665000d04fc546865726520617265207374696c6c20616374697665207265636f7665727920617474656d7074732074686174206e65656420746f20626520636c6f73656430416c726561647950726f7879000e04ac54686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f76657279204261645374617465000f0478536f6d6520696e7465726e616c2073746174652069732062726f6b656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d03045300000400c50901185665633c543e0000c5090000023d0300c909083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000cd090c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ed1090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d509045300000400dd0901185665633c543e0000d50904184f7074696f6e04045401d9090108104e6f6e6500000010536f6d650400d9090000010000d909084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c014d012c426c6f636b4e756d62657201103450616c6c6574734f726967696e013502244163636f756e7449640100001401206d617962655f6964e401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c4d01011043616c6c0001386d617962655f706572696f646963450301944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e3502013450616c6c6574734f726967696e0000dd09000002d50900e109084070616c6c65745f7363686564756c65722c5265747279436f6e6669670418506572696f640110000c0134746f74616c5f72657472696573080108753800012472656d61696e696e670801087538000118706572696f64100118506572696f640000e5090c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee909083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697451040150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974ed0901704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656e5504012c4f7074696f6e3c7533323e00010000ed0904184f7074696f6e0404540151040108104e6f6e6500000010536f6d65040051040000010000f109083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b657401f50901082c556e7265717565737465640801187469636b6574f909014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b6574fd09016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656e5504012c4f7074696f6e3c7533323e00010000f50914346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6544486f6c64436f6e73696465726174696f6e10044100044600045200044400000400180128463a3a42616c616e63650000f9090000040800f50900fd0904184f7074696f6e04045401f9090108104e6f6e6500000010536f6d650400f9090000010000010a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000050a0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e090a0c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e0d0a00000408110a1800110a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401150a045300000400190a01185665633c543e0000150a083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501f82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065f8012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000190a000002150a001d0a00000408210a1800210a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401250a045300000400290a01185665633c543e0000250a083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d6265720000290a000002250a002d0a0c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e310a00000408000400350a083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e0501015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73390a018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000390a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400a90101185665633c543e00003d0a0c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e410a089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f727473450a0198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f726511010134456c656374696f6e53636f726500011c636f6d707574650d01013c456c656374696f6e436f6d707574650000450a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014504045300000400410401185665633c543e0000490a089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f7669646572014d0a00080118766f74657273510a01445665633c4461746150726f76696465723e00011c74617267657473a90101385665633c4163636f756e7449643e00004d0a0000040c0030d90800510a0000024d0a00550a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401590a0453000004005d0a01185665633c543e0000590a0000040c11011010005d0a000002590a00610a0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e016d030010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e69030154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e63650000650a0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f7204045400013c6850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273645072654469737061746368446966666572656e74526f756e64000e04b85375626d697373696f6e2077617320707265706172656420666f72206120646966666572656e7420726f756e642e040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e690a0c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e74496400011070726576f001504f7074696f6e3c543a3a4163636f756e7449643e0001106e657874f001504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572300120543a3a53636f726500011473636f7265300120543a3a53636f726500006d0a0c4070616c6c65745f626167735f6c697374106c6973740c426167080454000449000008011068656164f001504f7074696f6e3c543a3a4163636f756e7449643e0001107461696cf001504f7074696f6e3c543a3a4163636f756e7449643e0000710a0000023000750a0c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400790a01244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e790a0c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e64000300007d0a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e7465724d070140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173810a01e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000810a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400850a013842547265654d61703c4b2c20563e0000850a042042547265654d617008044b011004560118000400890a000000890a0000028d0a008d0a00000408101800910a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6e950a0134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573a10a015c506f6f6c526f6c65733c543a3a4163636f756e7449643e000114737461746525010124506f6f6c53746174650000950a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000014011c63757272656e742901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178990a013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f726174659d0a01bc4f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c426c6f636b4e756d626572466f723c543e3e3e0001347468726f74746c655f66726f6d550401644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000140636c61696d5f7065726d697373696f6e350101bc4f7074696f6e3c436f6d6d697373696f6e436c61696d5065726d697373696f6e3c543a3a4163636f756e7449643e3e0000990a04184f7074696f6e04045401940108104e6f6e6500000010536f6d6504009400000100009d0a04184f7074696f6e0404540131010108104e6f6e6500000010536f6d65040031010000010000a10a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f74f001444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f72f001444f7074696f6e3c4163636f756e7449643e00011c626f756e636572f001444f7074696f6e3c4163636f756e7449643e0000a50a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e7465724d070140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e0000a90a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f657261ad0a0134556e626f6e64506f6f6c3c543e000120776974685f657261b10a010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e0000ad0a085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e0000b10a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601ad0a045300000400b50a013842547265654d61703c4b2c20563e0000b50a042042547265654d617008044b0110045601ad0a000400b90a000000b90a000002bd0a00bd0a0000040810ad0a00c10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000c50a08346672616d655f737570706f72742050616c6c6574496400000400bd02011c5b75383b20385d0000c90a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400018030506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e005501546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e206050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468655d0163616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20616876616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e736976650400cd0a0138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e78436f6d6d697373696f6e45786365656473476c6f62616c4d6178696d756d001704e854686520737570706c69656420636f6d6d697373696f6e206578636565647320676c6f62616c206d6178696d756d20636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400180409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640019040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001a04a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001b048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001c0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001d049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001e04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e3c4e6f7468696e67546f41646a757374001f04b04e6f20696d62616c616e636520696e20746865204544206465706f73697420666f722074686520706f6f6c2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ecd0a0c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c7900040000d10a0c4c70616c6c65745f666173745f756e7374616b6514747970657338556e7374616b6552657175657374040454000008011c73746173686573d50a01d8426f756e6465645665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e292c20543a3a426174636853697a653e00011c636865636b6564d90a0190426f756e6465645665633c457261496e6465782c204d6178436865636b696e673c543e3e0000d50a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540151040453000004004d0401185665633c543e0000d90a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400410101185665633c543e0000dd0a0c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144572726f72040454000118344e6f74436f6e74726f6c6c657200000cb85468652070726f766964656420436f6e74726f6c6c6572206163636f756e7420776173206e6f7420666f756e642e00c054686973206d65616e7320746861742074686520676976656e206163636f756e74206973206e6f7420626f6e6465642e34416c7265616479517565756564000104ac54686520626f6e646564206163636f756e742068617320616c7265616479206265656e207175657565642e384e6f7446756c6c79426f6e646564000204bc54686520626f6e646564206163636f756e74206861732061637469766520756e6c6f636b696e67206368756e6b732e244e6f74517565756564000304b45468652070726f766964656420756e2d7374616b6572206973206e6f7420696e2074686520605175657565602e2c416c72656164794865616400040405015468652070726f766964656420756e2d7374616b657220697320616c726561647920696e20486561642c20616e642063616e6e6f7420646572656769737465722e3843616c6c4e6f74416c6c6f7765640005041d015468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742062656361757365207468652070616c6c6574206973206e6f74206163746976652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee10a0000040800fc00e50a0c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f746518566f74696e67141c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d626572011024506f6c6c496e6465780110204d6178566f7465730001081c43617374696e670400e90a01c843617374696e673c42616c616e63652c20426c6f636b4e756d6265722c20506f6c6c496e6465782c204d6178566f7465733e0000002844656c65676174696e670400010b01ac44656c65676174696e673c42616c616e63652c204163636f756e7449642c20426c6f636b4e756d6265723e00010000e90a0c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f74651c43617374696e67101c42616c616e636501182c426c6f636b4e756d626572011024506f6c6c496e6465780110204d6178566f74657300000c0114766f746573ed0a01dc426f756e6465645665633c28506f6c6c496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73f90a015044656c65676174696f6e733c42616c616e63653e0001147072696f72fd0a017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000ed0a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f10a045300000400f50a01185665633c543e0000f10a0000040810810400f50a000002f10a00f90a0c6070616c6c65745f636f6e76696374696f6e5f766f74696e671474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000fd0a0c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000010b0c6070616c6c65745f636f6e76696374696f6e5f766f74696e6710766f74652844656c65676174696e670c1c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d62657201100014011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e89040128436f6e76696374696f6e00012c64656c65676174696f6e73f90a015044656c65676174696f6e733c42616c616e63653e0001147072696f72fd0a017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000050b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401090b0453000004000d0b01185665633c543e0000090b00000408fc18000d0b000002090b00110b0c6070616c6c65745f636f6e76696374696f6e5f766f74696e671870616c6c6574144572726f72080454000449000130284e6f744f6e676f696e6700000450506f6c6c206973206e6f74206f6e676f696e672e204e6f74566f746572000104ac54686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e2074686520706f6c6c2e304e6f5065726d697373696f6e000204c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e3c4e6f5065726d697373696f6e5965740003045901546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e207269676874206e6f77206275742077696c6c20646f20696e20746865206675747572652e44416c726561647944656c65676174696e6700040488546865206163636f756e7420697320616c72656164792064656c65676174696e672e34416c7265616479566f74696e670005085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ca07468657365206172652072656d6f766564207468726f756768206072656d6f76655f766f7465602e44496e73756666696369656e7446756e6473000604fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000704a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e204e6f6e73656e73650008049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c4d6178566f74657352656163686564000904804d6178696d756d206e756d626572206f6620766f74657320726561636865642e2c436c6173734e6565646564000a04390154686520636c617373206d75737420626520737570706c6965642073696e6365206974206973206e6f7420656173696c792064657465726d696e61626c652066726f6d207468652073746174652e20426164436c617373000b048454686520636c61737320494420737570706c69656420697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e150b0c4070616c6c65745f7265666572656e6461147479706573385265666572656e64756d496e666f201c547261636b496401fc3452756e74696d654f726967696e013502184d6f6d656e7401101043616c6c014d011c42616c616e636501181454616c6c79018107244163636f756e74496401003c5363686564756c654164647265737301e001181c4f6e676f696e670400190b018d015265666572656e64756d5374617475733c547261636b49642c2052756e74696d654f726967696e2c204d6f6d656e742c2043616c6c2c2042616c616e63652c2054616c6c792c0a4163636f756e7449642c205363686564756c65416464726573732c3e00000020417070726f7665640c001001184d6f6d656e740000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0001002052656a65637465640c001001184d6f6d656e740000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0002002443616e63656c6c65640c001001184d6f6d656e740000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0003002054696d65644f75740c001001184d6f6d656e740000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0000210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e000400184b696c6c656404001001184d6f6d656e7400050000190b0c4070616c6c65745f7265666572656e6461147479706573405265666572656e64756d537461747573201c547261636b496401fc3452756e74696d654f726967696e013502184d6f6d656e7401101043616c6c014d011c42616c616e636501181454616c6c79018107244163636f756e74496401003c5363686564756c654164647265737301e0002c0114747261636bfc011c547261636b49640001186f726967696e3502013452756e74696d654f726967696e00012070726f706f73616c4d01011043616c6c000124656e6163746d656e7495040150446973706174636854696d653c4d6f6d656e743e0001247375626d69747465641001184d6f6d656e740001487375626d697373696f6e5f6465706f7369741d0b016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0001406465636973696f6e5f6465706f736974210b018c4f7074696f6e3c4465706f7369743c4163636f756e7449642c2042616c616e63653e3e0001206465636964696e67250b01784f7074696f6e3c4465636964696e675374617475733c4d6f6d656e743e3e00011474616c6c798107011454616c6c79000120696e5f7175657565200110626f6f6c000114616c61726d2d0b01844f7074696f6e3c284d6f6d656e742c205363686564756c6541646472657373293e00001d0b0c4070616c6c65745f7265666572656e64611474797065731c4465706f73697408244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e744964000118616d6f756e7418011c42616c616e63650000210b04184f7074696f6e040454011d0b0108104e6f6e6500000010536f6d6504001d0b0000010000250b04184f7074696f6e04045401290b0108104e6f6e6500000010536f6d650400290b0000010000290b0c4070616c6c65745f7265666572656e6461147479706573384465636964696e67537461747573042c426c6f636b4e756d62657201100008011473696e636510012c426c6f636b4e756d626572000128636f6e6669726d696e675504014c4f7074696f6e3c426c6f636b4e756d6265723e00002d0b04184f7074696f6e04045401310b0108104e6f6e6500000010536f6d650400310b0000010000310b0000040810e000350b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d0a045300000400890a01185665633c543e0000390b0000023d0b003d0b00000408fc410b00410b0c4070616c6c65745f7265666572656e646114747970657324547261636b496e666f081c42616c616e63650118184d6f6d656e740110002401106e616d65050801302627737461746963207374720001306d61785f6465636964696e6710010c7533320001406465636973696f6e5f6465706f73697418011c42616c616e6365000138707265706172655f706572696f641001184d6f6d656e7400013c6465636973696f6e5f706572696f641001184d6f6d656e74000138636f6e6669726d5f706572696f641001184d6f6d656e740001506d696e5f656e6163746d656e745f706572696f641001184d6f6d656e740001306d696e5f617070726f76616c450b0114437572766500012c6d696e5f737570706f7274450b011443757276650000450b0c4070616c6c65745f7265666572656e646114747970657314437572766500010c404c696e65617244656372656173696e670c01186c656e67746894011c50657262696c6c000114666c6f6f7294011c50657262696c6c0001106365696c94011c50657262696c6c000000445374657070656444656372656173696e67100114626567696e94011c50657262696c6c00010c656e6494011c50657262696c6c0001107374657094011c50657262696c6c000118706572696f6494011c50657262696c6c000100285265636970726f63616c0c0118666163746f72490b01204669786564493634000120785f6f6666736574490b01204669786564493634000120795f6f6666736574490b0120466978656449363400020000490b0c3473705f61726974686d657469632c66697865645f706f696e74204669786564493634000004004d0b010c69363400004d0b0000050c00510b0c4070616c6c65745f7265666572656e64611870616c6c6574144572726f72080454000449000138284e6f744f6e676f696e67000004685265666572656e64756d206973206e6f74206f6e676f696e672e284861734465706f736974000104b85265666572656e64756d2773206465636973696f6e206465706f73697420697320616c726561647920706169642e20426164547261636b0002049c54686520747261636b206964656e74696669657220676976656e2077617320696e76616c69642e1046756c6c000304310154686572652061726520616c726561647920612066756c6c20636f6d706c656d656e74206f66207265666572656e646120696e2070726f677265737320666f72207468697320747261636b2e285175657565456d70747900040480546865207175657565206f662074686520747261636b20697320656d7074792e344261645265666572656e64756d000504e4546865207265666572656e64756d20696e6465782070726f766964656420697320696e76616c696420696e207468697320636f6e746578742e2c4e6f7468696e67546f446f000604ac546865726520776173206e6f7468696e6720746f20646f20696e2074686520616476616e63656d656e742e1c4e6f547261636b000704a04e6f20747261636b2065786973747320666f72207468652070726f706f73616c206f726967696e2e28556e66696e69736865640008040101416e79206465706f7369742063616e6e6f7420626520726566756e64656420756e74696c20616674657220746865206465636973696f6e206973206f7665722e304e6f5065726d697373696f6e000904a8546865206465706f73697420726566756e646572206973206e6f7420746865206465706f7369746f722e244e6f4465706f736974000a04cc546865206465706f7369742063616e6e6f7420626520726566756e6465642073696e6365206e6f6e6520776173206d6164652e24426164537461747573000b04d0546865207265666572656e64756d2073746174757320697320696e76616c696420666f722074686973206f7065726174696f6e2e40507265696d6167654e6f744578697374000c047054686520707265696d61676520646f6573206e6f742065786973742e84507265696d61676553746f72656457697468446966666572656e744c656e677468000d04150154686520707265696d6167652069732073746f7265642077697468206120646966666572656e74206c656e677468207468616e20746865206f6e652070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550b0c4070616c6c65745f77686974656c6973741870616c6c6574144572726f720404540001144c556e617661696c61626c65507265496d616765000004c854686520707265696d616765206f66207468652063616c6c206861736820636f756c64206e6f74206265206c6f616465642e3c556e6465636f6461626c6543616c6c000104785468652063616c6c20636f756c64206e6f74206265206465636f6465642e60496e76616c696443616c6c5765696768745769746e657373000204ec54686520776569676874206f6620746865206465636f6465642063616c6c2077617320686967686572207468616e20746865207769746e6573732e5043616c6c49734e6f7457686974656c6973746564000304745468652063616c6c20776173206e6f742077686974656c69737465642e5843616c6c416c726561647957686974656c6973746564000404a05468652063616c6c2077617320616c72656164792077686974656c69737465643b204e6f2d4f702e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e590b083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500005d0b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400410101185665633c543e0000610b083c70616c6c65745f74726561737572792c5370656e64537461747573142441737365744b696e6401a50430417373657442616c616e636501182c42656e656669636961727901c5042c426c6f636b4e756d6265720110245061796d656e74496401300018012861737365745f6b696e64a504012441737365744b696e64000118616d6f756e74180130417373657442616c616e636500012c62656e6566696369617279c504012c42656e656669636961727900012876616c69645f66726f6d10012c426c6f636b4e756d6265720001246578706972655f617410012c426c6f636b4e756d626572000118737461747573650b015c5061796d656e7453746174653c5061796d656e7449643e0000650b083c70616c6c65745f7472656173757279305061796d656e745374617465040849640130010c1c50656e64696e6700000024417474656d7074656404010869643001084964000100184661696c656400020000690b0c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200006d0b0c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900013070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104ac4e6f2070726f706f73616c2c20626f756e7479206f72207370656e64206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e584661696c6564546f436f6e7665727442616c616e636500050451015468652062616c616e6365206f6620746865206173736574206b696e64206973206e6f7420636f6e7665727469626c6520746f207468652062616c616e6365206f6620746865206e61746976652061737365742e305370656e6445787069726564000604b0546865207370656e6420686173206578706972656420616e642063616e6e6f7420626520636c61696d65642e2c4561726c795061796f7574000704a4546865207370656e64206973206e6f742079657420656c696769626c6520666f72207061796f75742e40416c7265616479417474656d707465640008049c546865207061796d656e742068617320616c7265616479206265656e20617474656d707465642e2c5061796f75744572726f72000904cc54686572652077617320736f6d65206973737565207769746820746865206d656368616e69736d206f66207061796d656e742e304e6f74417474656d70746564000a04a4546865207061796f757420776173206e6f742079657420617474656d707465642f636c61696d65642e30496e636f6e636c7573697665000b04c4546865207061796d656e7420686173206e656974686572206661696c6564206e6f7220737563636565646564207965742e04784572726f7220666f72207468652074726561737572792070616c6c65742e710b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7334636f6e66696775726174696f6e44486f7374436f6e66696775726174696f6e042c426c6f636b4e756d6265720110008c01346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001506173796e635f6261636b696e675f706172616d73e90401484173796e634261636b696e67506172616d730001306d61785f706f765f73697a6510010c7533320001646d61785f646f776e776172645f6d6573736167655f73697a6510010c75333200019068726d705f6d61785f70617261636861696e5f6f7574626f756e645f6368616e6e656c7310010c75333200014c68726d705f73656e6465725f6465706f73697418011c42616c616e636500015868726d705f726563697069656e745f6465706f73697418011c42616c616e636500016468726d705f6368616e6e656c5f6d61785f636170616369747910010c75333200016c68726d705f6368616e6e656c5f6d61785f746f74616c5f73697a6510010c75333200018c68726d705f6d61785f70617261636861696e5f696e626f756e645f6368616e6e656c7310010c75333200017468726d705f6368616e6e656c5f6d61785f6d6573736167655f73697a6510010c75333200013c6578656375746f725f706172616d73ed0401384578656375746f72506172616d73000154636f64655f726574656e74696f6e5f706572696f6410012c426c6f636b4e756d6265720001386d61785f76616c696461746f72735504012c4f7074696f6e3c7533323e000138646973707574655f706572696f6410013053657373696f6e496e6465780001a4646973707574655f706f73745f636f6e636c7573696f6e5f616363657074616e63655f706572696f6410012c426c6f636b4e756d6265720001346e6f5f73686f775f736c6f747310010c7533320001406e5f64656c61795f7472616e6368657310010c7533320001687a65726f74685f64656c61795f7472616e6368655f776964746810010c7533320001406e65656465645f617070726f76616c7310010c75333200016072656c61795f7672665f6d6f64756c6f5f73616d706c657310010c7533320001387076665f766f74696e675f74746c10013053657373696f6e496e6465780001806d696e696d756d5f76616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d6265720001546d696e696d756d5f6261636b696e675f766f74657310010c7533320001346e6f64655f6665617475726573250501304e6f64654665617475726573000158617070726f76616c5f766f74696e675f706172616d7301050150417070726f76616c566f74696e67506172616d730001407363686564756c65725f706172616d73050501705363686564756c6572506172616d733c426c6f636b4e756d6265723e0000750b000002790b00790b0000040810710b007d0b106c706f6c6b61646f745f72756e74696d655f70617261636861696e7334636f6e66696775726174696f6e1870616c6c6574144572726f720404540001043c496e76616c69644e657756616c7565000004dc546865206e65772076616c756520666f72206120636f6e66696775726174696f6e20706172616d6574657220697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e810b0000022d0500850b000002ed0100890b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731873686172656468416c6c6f77656452656c6179506172656e7473547261636b657208104861736801342c426c6f636b4e756d6265720110000801186275666665728d0b015856656344657175653c28486173682c2048617368293e0001346c61746573745f6e756d62657210012c426c6f636b4e756d62657200008d0b000002910b00910b00000408343400950b000002990b00990b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e7043616e64696461746550656e64696e67417661696c6162696c6974790804480134044e011000240110636f7265a5070124436f7265496e646578000110686173688105013443616e6469646174654861736800012864657363726970746f724105015843616e64696461746544657363726970746f723c483e00012c636f6d6d69746d656e74735105015043616e646964617465436f6d6d69746d656e7473000148617661696c6162696c6974795f766f746573250501604269745665633c75382c204269744f726465724c7362303e00011c6261636b657273250501604269745665633c75382c204269744f726465724c7362303e00014c72656c61795f706172656e745f6e756d6265721001044e0001406261636b65645f696e5f6e756d6265721001044e0001346261636b696e675f67726f7570a907012847726f7570496e64657800009d0b106c706f6c6b61646f745f72756e74696d655f70617261636861696e7324696e636c7573696f6e1870616c6c6574144572726f720404540001486456616c696461746f72496e6465784f75744f66426f756e64730000047856616c696461746f7220696e646578206f7574206f6620626f756e64732e50556e7363686564756c656443616e646964617465000104ac43616e646964617465207375626d6974746564206275742070617261206e6f74207363686564756c65642e404865616444617461546f6f4c61726765000204a448656164206461746120657863656564732074686520636f6e66696775726564206d6178696d756d2e505072656d6174757265436f64655570677261646500030464436f64652075706772616465207072656d61747572656c792e3c4e6577436f6465546f6f4c61726765000404604f757470757420636f646520697320746f6f206c6172676554446973616c6c6f77656452656c6179506172656e74000508ec5468652063616e64696461746527732072656c61792d706172656e7420776173206e6f7420616c6c6f7765642e204569746865722069742077617325016e6f7420726563656e7420656e6f756768206f72206974206469646e277420616476616e6365206261736564206f6e20746865206c6173742070617261636861696e20626c6f636b2e44496e76616c696441737369676e6d656e7400060815014661696c656420746f20636f6d707574652067726f757020696e64657820666f722074686520636f72653a206569746865722069742773206f7574206f6620626f756e6473e86f72207468652072656c617920706172656e7420646f65736e27742062656c6f6e6720746f207468652063757272656e742073657373696f6e2e44496e76616c696447726f7570496e6465780007049c496e76616c69642067726f757020696e64657820696e20636f72652061737369676e6d656e742e4c496e73756666696369656e744261636b696e6700080490496e73756666696369656e7420286e6f6e2d6d616a6f7269747929206261636b696e672e38496e76616c69644261636b696e67000904e4496e76616c69642028626164207369676e61747572652c20756e6b6e6f776e2076616c696461746f722c206574632e29206261636b696e672e444e6f74436f6c6c61746f725369676e6564000a0468436f6c6c61746f7220646964206e6f74207369676e20506f562e6856616c69646174696f6e44617461486173684d69736d61746368000b04c45468652076616c69646174696f6e2064617461206861736820646f6573206e6f74206d617463682065787065637465642e80496e636f7272656374446f776e776172644d65737361676548616e646c696e67000c04d854686520646f776e77617264206d657373616765207175657565206973206e6f742070726f63657373656420636f72726563746c792e54496e76616c69645570776172644d65737361676573000d041d014174206c65617374206f6e6520757077617264206d6573736167652073656e7420646f6573206e6f7420706173732074686520616363657074616e63652063726974657269612e6048726d7057617465726d61726b4d697368616e646c696e67000e0411015468652063616e646964617465206469646e277420666f6c6c6f77207468652072756c6573206f662048524d502077617465726d61726b20616476616e63656d656e742e4c496e76616c69644f7574626f756e6448726d70000f04d45468652048524d50206d657373616765732073656e74206279207468652063616e646964617465206973206e6f742076616c69642e64496e76616c696456616c69646174696f6e436f646548617368001004dc5468652076616c69646174696f6e20636f64652068617368206f66207468652063616e646964617465206973206e6f742076616c69642e4050617261486561644d69736d6174636800110855015468652060706172615f6865616460206861736820696e207468652063616e6469646174652064657363726970746f7220646f65736e2774206d61746368207468652068617368206f66207468652061637475616c7470617261206865616420696e2074686520636f6d6d69746d656e74732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea10b0c4c706f6c6b61646f745f7072696d6974697665730876374c536372617065644f6e436861696e566f7465730404480134000c011c73657373696f6e10013053657373696f6e496e6465780001806261636b696e675f76616c696461746f72735f7065725f63616e646964617465a50b011d015665633c2843616e646964617465526563656970743c483e2c205665633c2856616c696461746f72496e6465782c2056616c69646974794174746573746174696f6e293e290a3e0001206469737075746573790501604d756c74694469737075746553746174656d656e745365740000a50b000002a90b00a90b00000408a107ad0b00ad0b000002b10b00b10b000004082d05750500b50b106c706f6c6b61646f745f72756e74696d655f70617261636861696e733870617261735f696e686572656e741870616c6c6574144572726f7204045400011464546f6f4d616e79496e636c7573696f6e496e686572656e7473000004cc496e636c7573696f6e20696e686572656e742063616c6c6564206d6f7265207468616e206f6e63652070657220626c6f636b2e4c496e76616c6964506172656e7448656164657200010855015468652068617368206f6620746865207375626d697474656420706172656e742068656164657220646f65736e277420636f72726573706f6e6420746f2074686520736176656420626c6f636b2068617368206f662c74686520706172656e742e48496e686572656e744f7665727765696768740002040901546865206461746120676976656e20746f2074686520696e686572656e742077696c6c20726573756c7420696e20616e206f76657277656967687420626c6f636b2e8443616e6469646174657346696c7465726564447572696e67457865637574696f6e0003084d01412063616e646964617465207761732066696c746572656420647572696e6720696e686572656e7420657865637574696f6e2e20546869732073686f756c642068617665206f6e6c79206265656e20646f6e6540647572696e67206372656174696f6e2e50556e7363686564756c656443616e64696461746500040474546f6f206d616e792063616e6469646174657320737570706c6965642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb90b000002810b00bd0b000002c10b00c10b106c706f6c6b61646f745f72756e74696d655f70617261636861696e73247363686564756c65721870616c6c657430436f72654f6363757069656404044e0110010810467265650000001450617261730400c50b01345061726173456e7472793c4e3e00010000c50b106c706f6c6b61646f745f72756e74696d655f70617261636861696e73247363686564756c65721870616c6c6574285061726173456e74727904044e0110000c012861737369676e6d656e74c90b012841737369676e6d656e74000154617661696c6162696c6974795f74696d656f75747310010c75333200010c74746c1001044e0000c90b106c706f6c6b61646f745f72756e74696d655f70617261636861696e73247363686564756c657218636f6d6d6f6e2841737369676e6d656e7400010810506f6f6c08011c706172615f696445020118506172614964000128636f72655f696e646578a5070124436f7265496e6465780000001042756c6b04004502011850617261496400010000cd0b042042547265654d617008044b01a507045601d10b000400d50b000000d10b000002c50b00d50b000002d90b00d90b00000408a507d10b00dd0b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261735c507666436865636b416374697665566f74655374617465042c426c6f636b4e756d626572011000140130766f7465735f616363657074250501604269745665633c75382c204269744f726465724c7362303e000130766f7465735f72656a656374250501604269745665633c75382c204269744f726465724c7362303e00010c61676510013053657373696f6e496e646578000128637265617465645f617410012c426c6f636b4e756d626572000118636175736573e10b017c5665633c507666436865636b43617573653c426c6f636b4e756d6265723e3e0000e10b000002e50b00e50b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7314706172617334507666436865636b4361757365042c426c6f636b4e756d62657201100108284f6e626f617264696e670400450201185061726149640000001c557067726164650c010869644502011850617261496400012c696e636c756465645f617410012c426c6f636b4e756d626572000140757067726164655f7374726174656779e90b013c55706772616465537472617465677900010000e90b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261733c55706772616465537472617465677900010840536574476f41686561645369676e616c000000504170706c7941744578706563746564426c6f636b00010000ed0b0000024d0500f10b000002450200f50b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e7314706172617334506172614c6966656379636c6500011c284f6e626f617264696e6700000028506172617468726561640001002450617261636861696e0002004c557067726164696e675061726174687265616400030050446f776e67726164696e6750617261636861696e000400544f6666626f617264696e6750617261746872656164000500504f6666626f617264696e6750617261636861696e00060000f90b0000040845021000fd0b0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e73147061726173405061726150617374436f64654d65746104044e011000080134757067726164655f74696d6573010c01605665633c5265706c6163656d656e7454696d65733c4e3e3e00012c6c6173745f7072756e6564550401244f7074696f6e3c4e3e0000010c000002050c00050c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e73147061726173405265706c6163656d656e7454696d657304044e01100008012c65787065637465645f61741001044e0001306163746976617465645f61741001044e0000090c000002f90b000d0c0c4c706f6c6b61646f745f7072696d6974697665730876373855706772616465476f41686561640001081441626f72740000001c476f416865616400010000110c0c4c706f6c6b61646f745f7072696d69746976657308763748557067726164655265737472696374696f6e0001041c50726573656e7400000000150c106c706f6c6b61646f745f72756e74696d655f70617261636861696e731470617261731870616c6c6574144572726f72040454000134344e6f74526567697374657265640000049450617261206973206e6f74207265676973746572656420696e206f75722073797374656d2e3443616e6e6f744f6e626f6172640001041501506172612063616e6e6f74206265206f6e626f6172646564206265636175736520697420697320616c726561647920747261636b6564206279206f75722073797374656d2e3843616e6e6f744f6666626f6172640002049c506172612063616e6e6f74206265206f6666626f617264656420617420746869732074696d652e3443616e6e6f7455706772616465000304d4506172612063616e6e6f7420626520757067726164656420746f2061206c6561736520686f6c64696e672070617261636861696e2e3c43616e6e6f74446f776e6772616465000404d0506172612063616e6e6f7420626520646f776e67726164656420746f20616e206f6e2d64656d616e642070617261636861696e2e58507666436865636b53746174656d656e745374616c65000504b05468652073746174656d656e7420666f7220505646207072652d636865636b696e67206973207374616c652e5c507666436865636b53746174656d656e74467574757265000604ec5468652073746174656d656e7420666f7220505646207072652d636865636b696e6720697320666f722061206675747572652073657373696f6e2e84507666436865636b56616c696461746f72496e6465784f75744f66426f756e6473000704a4436c61696d65642076616c696461746f7220696e646578206973206f7574206f6620626f756e64732e60507666436865636b496e76616c69645369676e6174757265000804c8546865207369676e617475726520666f722074686520505646207072652d636865636b696e6720697320696e76616c69642e48507666436865636b446f75626c65566f7465000904b054686520676976656e2076616c696461746f7220616c7265616479206861732063617374206120766f74652e58507666436865636b5375626a656374496e76616c6964000a04f454686520676976656e2050564620646f6573206e6f7420657869737420617420746865206d6f6d656e74206f662070726f63657373206120766f74652e4443616e6e6f7455706772616465436f6465000b04cc50617261636861696e2063616e6e6f742063757272656e746c79207363686564756c65206120636f646520757067726164652e2c496e76616c6964436f6465000c0474496e76616c69642076616c69646174696f6e20636f64652073697a652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e190c0000021d0c001d0c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e732c696e697469616c697a657254427566666572656453657373696f6e4368616e676500000c012876616c696461746f7273850b01405665633c56616c696461746f7249643e000118717565756564850b01405665633c56616c696461746f7249643e00013473657373696f6e5f696e64657810013053657373696f6e496e6465780000210c000002250c00250c0860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736738013c446f776e776172644d6573736167650000290c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731068726d705848726d704f70656e4368616e6e656c526571756573740000180124636f6e6669726d6564200110626f6f6c0001105f61676510013053657373696f6e496e64657800013873656e6465725f6465706f73697418011c42616c616e63650001406d61785f6d6573736167655f73697a6510010c7533320001306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c75333200002d0c000002ad0500310c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e731068726d702c48726d704368616e6e656c00002001306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164990401304f7074696f6e3c486173683e00013873656e6465725f6465706f73697418011c42616c616e6365000144726563697069656e745f6465706f73697418011c42616c616e63650000350c000002390c00390c0860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746138015073705f7374643a3a7665633a3a5665633c75383e00003d0c000002410c00410c0000040810f10b00450c106c706f6c6b61646f745f72756e74696d655f70617261636861696e731068726d701870616c6c6574144572726f72040454000150544f70656e48726d704368616e6e656c546f53656c66000004c45468652073656e64657220747269656420746f206f70656e2061206368616e6e656c20746f207468656d73656c7665732e7c4f70656e48726d704368616e6e656c496e76616c6964526563697069656e740001048854686520726563697069656e74206973206e6f7420612076616c696420706172612e6c4f70656e48726d704368616e6e656c5a65726f43617061636974790002047c54686520726571756573746564206361706163697479206973207a65726f2e8c4f70656e48726d704368616e6e656c4361706163697479457863656564734c696d6974000304c05468652072657175657374656420636170616369747920657863656564732074686520676c6f62616c206c696d69742e784f70656e48726d704368616e6e656c5a65726f4d65737361676553697a65000404a054686520726571756573746564206d6178696d756d206d6573736167652073697a6520697320302e984f70656e48726d704368616e6e656c4d65737361676553697a65457863656564734c696d69740005042901546865206f70656e20726571756573742072657175657374656420746865206d6573736167652073697a65207468617420657863656564732074686520676c6f62616c206c696d69742e704f70656e48726d704368616e6e656c416c726561647945786973747300060468546865206368616e6e656c20616c7265616479206578697374737c4f70656e48726d704368616e6e656c416c7265616479526571756573746564000704d0546865726520697320616c72656164792061207265717565737420746f206f70656e207468652073616d65206368616e6e656c2e704f70656e48726d704368616e6e656c4c696d697445786365656465640008041d015468652073656e64657220616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f776564206f7574626f756e64206368616e6e656c732e7041636365707448726d704368616e6e656c446f65736e744578697374000904e0546865206368616e6e656c2066726f6d207468652073656e64657220746f20746865206f726967696e20646f65736e27742065786973742e8441636365707448726d704368616e6e656c416c7265616479436f6e6669726d6564000a0484546865206368616e6e656c20697320616c726561647920636f6e6669726d65642e7841636365707448726d704368616e6e656c4c696d69744578636565646564000b04250154686520726563697069656e7420616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f77656420696e626f756e64206368616e6e656c732e70436c6f736548726d704368616e6e656c556e617574686f72697a6564000c045501546865206f726967696e20747269657320746f20636c6f73652061206368616e6e656c207768657265206974206973206e656974686572207468652073656e646572206e6f722074686520726563697069656e742e6c436c6f736548726d704368616e6e656c446f65736e744578697374000d049c546865206368616e6e656c20746f20626520636c6f73656420646f65736e27742065786973742e7c436c6f736548726d704368616e6e656c416c7265616479556e646572776179000e04bc546865206368616e6e656c20636c6f7365207265717565737420697320616c7265616479207265717565737465642e8443616e63656c48726d704f70656e4368616e6e656c556e617574686f72697a6564000f045d0143616e63656c696e6720697320726571756573746564206279206e656974686572207468652073656e646572206e6f7220726563697069656e74206f6620746865206f70656e206368616e6e656c20726571756573742e684f70656e48726d704368616e6e656c446f65736e7445786973740010047c546865206f70656e207265717565737420646f65736e27742065786973742e7c4f70656e48726d704368616e6e656c416c7265616479436f6e6669726d65640011042d0143616e6e6f742063616e63656c20616e2048524d50206f70656e206368616e6e656c2072657175657374206265636175736520697420697320616c726561647920636f6e6669726d65642e3057726f6e675769746e6573730012048c5468652070726f7669646564207769746e65737320646174612069732077726f6e672e704368616e6e656c4372656174696f6e4e6f74417574686f72697a6564001304e8546865206368616e6e656c206265747765656e2074686573652074776f20636861696e732063616e6e6f7420626520617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e490c000002f101004d0c0c4c706f6c6b61646f745f7072696d6974697665730876372c53657373696f6e496e666f00003401606163746976655f76616c696461746f725f696e6469636573810b014c5665633c56616c696461746f72496e6465783e00012c72616e646f6d5f736565640401205b75383b2033325d000138646973707574655f706572696f6410013053657373696f6e496e64657800012876616c696461746f7273510c019c496e64657865645665633c56616c696461746f72496e6465782c2056616c696461746f7249643e000138646973636f766572795f6b657973690901645665633c417574686f72697479446973636f7665727949643e00013c61737369676e6d656e745f6b657973490c01445665633c41737369676e6d656e7449643e00014076616c696461746f725f67726f757073550c01ac496e64657865645665633c47726f7570496e6465782c205665633c56616c696461746f72496e6465783e3e00011c6e5f636f72657310010c7533320001687a65726f74685f64656c61795f7472616e6368655f776964746810010c75333200016072656c61795f7672665f6d6f64756c6f5f73616d706c657310010c7533320001406e5f64656c61795f7472616e6368657310010c7533320001346e6f5f73686f775f736c6f747310010c7533320001406e65656465645f617070726f76616c7310010c7533320000510c0c4c706f6c6b61646f745f7072696d69746976657308763728496e646578656456656308044b012d05045601ed01000400850b01185665633c563e0000550c0c4c706f6c6b61646f745f7072696d69746976657308763728496e646578656456656308044b01a907045601810b000400b90b01185665633c563e0000590c00000408108105005d0c0c4c706f6c6b61646f745f7072696d6974697665730876373044697370757465537461746504044e01100010013876616c696461746f72735f666f722505017c4269745665633c75382c206269747665633a3a6f726465723a3a4c7362303e00014876616c696461746f72735f616761696e73742505017c4269745665633c75382c206269747665633a3a6f726465723a3a4c7362303e00011473746172741001044e000130636f6e636c756465645f6174550401244f7074696f6e3c4e3e0000610c04204254726565536574040454012d05000400810b000000650c106c706f6c6b61646f745f72756e74696d655f70617261636861696e732064697370757465731870616c6c6574144572726f72040454000124744475706c69636174654469737075746553746174656d656e7453657473000004a84475706c696361746520646973707574652073746174656d656e7420736574732070726f76696465642e5c416e6369656e744469737075746553746174656d656e740001048c416e6369656e7420646973707574652073746174656d656e742070726f76696465642e6456616c696461746f72496e6465784f75744f66426f756e6473000204e856616c696461746f7220696e646578206f6e2073746174656d656e74206973206f7574206f6620626f756e647320666f722073657373696f6e2e40496e76616c69645369676e61747572650003047c496e76616c6964207369676e6174757265206f6e2073746174656d656e742e484475706c696361746553746174656d656e74000404cc56616c696461746f7220766f7465207375626d6974746564206d6f7265207468616e206f6e636520746f20646973707574652e4853696e676c65536964656444697370757465000504c441206469737075746520776865726520746865726520617265206f6e6c7920766f746573206f6e206f6e6520736964652e3c4d616c6963696f75734261636b65720006049c41206469737075746520766f74652066726f6d2061206d616c6963696f7573206261636b65722e4c4d697373696e674261636b696e67566f746573000704e04e6f206261636b696e6720766f74657320776572652070726f766964657320616c6f6e6720646973707574652073746174656d656e74732e48556e636f6e6669726d656444697370757465000804b0556e636f6e6669726d656420646973707574652073746174656d656e7420736574732070726f76696465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690c104c706f6c6b61646f745f7072696d69746976657308763720736c617368696e673850656e64696e67536c617368657300000801106b6579736d0c019442547265654d61703c56616c696461746f72496e6465782c2056616c696461746f7249643e0001106b696e64c105014c536c617368696e674f6666656e63654b696e6400006d0c042042547265654d617008044b012d05045601ed01000400710c000000710c000002750c00750c000004082d05ed0100790c146c706f6c6b61646f745f72756e74696d655f70617261636861696e7320646973707574657320736c617368696e671870616c6c6574144572726f7204045400011860496e76616c69644b65794f776e65727368697050726f6f660000048c546865206b6579206f776e6572736869702070726f6f6620697320696e76616c69642e4c496e76616c696453657373696f6e496e646578000104a05468652073657373696f6e20696e64657820697320746f6f206f6c64206f7220696e76616c69642e50496e76616c696443616e64696461746548617368000204785468652063616e646964617465206861736820697320696e76616c69642e54496e76616c696456616c696461746f72496e64657800030801015468657265206973206e6f2070656e64696e6720736c61736820666f722074686520676976656e2076616c696461746f7220696e64657820616e642074696d6514736c6f742e6056616c696461746f72496e64657849644d69736d61746368000404d05468652076616c696461746f7220696e64657820646f6573206e6f74206d61746368207468652076616c696461746f722069642e5c4475706c6963617465536c617368696e675265706f72740005040d0154686520676976656e20736c617368696e67207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d0c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e6444436f7265416666696e697479436f756e740000080128636f72655f696e646578a5070124436f7265496e646578000114636f756e7410010c7533320000810c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e643c517565756553746174757354797065000010011c747261666669634d0701244669786564553132380001286e6578745f696e646578850c01285175657565496e646578000138736d616c6c6573745f696e646578850c01285175657565496e64657800013466726565645f696e6469636573890c017442696e617279486561703c526576657273655175657565496e6465783e0000850c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e64285175657565496e6465780000040010010c7533320000890c042842696e61727948656170040454018d0c000400910c0000008d0c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e6444526576657273655175657565496e6465780000040010010c7533320000910c0000028d0c00950c042842696e6172794865617004045401990c0004009d0c000000990c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e6434456e7175657565644f72646572000008011c706172615f69644502011850617261496400010c696478850c01285175657565496e64657800009d0c000002990c00a10c106c706f6c6b61646f745f72756e74696d655f70617261636861696e734861737369676e65725f6f6e5f64656d616e641870616c6c6574144572726f7204045400010824517565756546756c6c000004e4546865206f726465722071756575652069732066756c6c2c2060706c6163655f6f72646572602077696c6c206e6f7420636f6e74696e75652e7053706f7450726963654869676865725468616e4d6178416d6f756e740001084d015468652063757272656e742073706f7420707269636520697320686967686572207468616e20746865206d617820616d6f756e742073706563696669656420696e207468652060706c6163655f6f72646572606063616c6c2c206d616b696e6720697420696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea50c0000040810a50700a90c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d65205363686564756c6504044e0110000c012c61737369676e6d656e7473f106018c5665633c28436f726541737369676e6d656e742c2050617274734f663537363030293e000120656e645f68696e74550401244f7074696f6e3c4e3e0001346e6578745f7363686564756c65550401244f7074696f6e3c4e3e0000ad0c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d6538436f726544657363726970746f7204044e0110000801147175657565b10c01684f7074696f6e3c517565756544657363726970746f723c4e3e3e00013063757272656e745f776f726bb90c01504f7074696f6e3c576f726b53746174653c4e3e3e0000b10c04184f7074696f6e04045401b50c0108104e6f6e6500000010536f6d650400b50c0000010000b50c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d653c517565756544657363726970746f7204044e01100008011466697273741001044e0001106c6173741001044e0000b90c04184f7074696f6e04045401bd0c0108104e6f6e6500000010536f6d650400bd0c0000010000bd0c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d6524576f726b537461746504044e01100010012c61737369676e6d656e7473c10c01985665633c28436f726541737369676e6d656e742c2041737369676e6d656e745374617465293e000120656e645f68696e74550401244f7074696f6e3c4e3e00010c706f73fc010c75313600011073746570fd06013050617274734f6635373630300000c10c000002c50c00c50c00000408f906c90c00c90c0c6c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d653c41737369676e6d656e7453746174650000080114726174696ffd06013050617274734f66353736303000012472656d61696e696e67fd06013050617274734f6635373630300000cd0c106c706f6c6b61646f745f72756e74696d655f70617261636861696e734461737369676e65725f636f726574696d651870616c6c6574144572726f720404540001184041737369676e6d656e7473456d707479000000344f7665725363686564756c65640001049041737369676e6d656e747320746f6765746865722065786365656465642035373630302e38556e6465725363686564756c65640002049041737369676e6d656e747320746f676574686572206c657373207468616e20353736303040446973616c6c6f776564496e73657274000308510161737369676e5f636f7265206973206f6e6c7920616c6c6f77656420746f20617070656e64206e65772061737369676e6d656e74732061742074686520656e64206f6620616c7265616479206578697374696e67146f6e65732e3c4475706c6963617465496e736572740004045501547269656420746f20696e736572742061207363686564756c6520666f72207468652073616d6520636f726520616e6420626c6f636b206e756d62657220617320616e206578697374696e67207363686564756c655041737369676e6d656e74734e6f74536f72746564000504ac547269656420746f2061646420616e20756e736f7274656420736574206f662061737369676e6d656e7473048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed10c0c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3c70617261735f7265676973747261722050617261496e666f081c4163636f756e7401001c42616c616e63650118000c011c6d616e6167657200011c4163636f756e7400011c6465706f73697418011c42616c616e63650001186c6f636b6564d50c01304f7074696f6e3c626f6f6c3e0000d50c04184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000d90c105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3c70617261735f7265676973747261721870616c6c6574144572726f72040454000138344e6f745265676973746572656400000464546865204944206973206e6f7420726567697374657265642e44416c7265616479526567697374657265640001047454686520494420697320616c726561647920726567697374657265642e204e6f744f776e65720002049c5468652063616c6c6572206973206e6f7420746865206f776e6572206f6620746869732049642e30436f6465546f6f4c617267650003045c496e76616c6964207061726120636f64652073697a652e404865616444617461546f6f4c6172676500040470496e76616c69642070617261206865616420646174612073697a652e304e6f7450617261636861696e0005046050617261206973206e6f7420612050617261636861696e2e344e6f7450617261746872656164000604bc50617261206973206e6f742061205061726174687265616420286f6e2d64656d616e642070617261636861696e292e4043616e6e6f74446572656769737465720007045843616e6e6f74206465726567697374657220706172613c43616e6e6f74446f776e67726164650008042d0143616e6e6f74207363686564756c6520646f776e6772616465206f66206c6561736520686f6c64696e672070617261636861696e20746f206f6e2d64656d616e642070617261636861696e3443616e6e6f7455706772616465000904250143616e6e6f74207363686564756c652075706772616465206f66206f6e2d64656d616e642070617261636861696e20746f206c6561736520686f6c64696e672070617261636861696e28506172614c6f636b6564000a08490150617261206973206c6f636b65642066726f6d206d616e6970756c6174696f6e20627920746865206d616e616765722e204d757374207573652070617261636861696e206f722072656c617920636861696e2c676f7665726e616e63652e2c4e6f745265736572766564000b04d054686520494420676976656e20666f7220726567697374726174696f6e20686173206e6f74206265656e2072657365727665642e2c496e76616c6964436f6465000c047c5468652076616c69646174696f6e20636f646520697320696e76616c69642e2843616e6e6f7453776170000d08510143616e6e6f7420706572666f726d20612070617261636861696e20736c6f74202f206c6966656379636c6520737761702e20436865636b207468617420746865207374617465206f6620626f74682070617261738461726520636f727265637420666f7220746865207377617020746f20776f726b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742edd0c000002ed0900e10c105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e14736c6f74731870616c6c6574144572726f7204045400010844506172614e6f744f6e626f617264696e670000048c5468652070617261636861696e204944206973206e6f74206f6e626f617264696e672e284c656173654572726f720001048854686572652077617320616e206572726f72207769746820746865206c656173652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee50c105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e4870617261735f7375646f5f777261707065721870616c6c6574144572726f720404540001243c50617261446f65736e744578697374000004a8546865207370656369666965642070617261636861696e206973206e6f7420726567697374657265642e4450617261416c7265616479457869737473000104b8546865207370656369666965642070617261636861696e20697320616c726561647920726567697374657265642e54457863656564734d61784d65737361676553697a6500020841014120444d50206d65737361676520636f756c646e27742062652073656e742062656361757365206974206578636565647320746865206d6178696d756d2073697a6520616c6c6f77656420666f72206144646f776e77617264206d6573736167652e38436f756c646e74436c65616e757000030480436f756c64206e6f74207363686564756c65207061726120636c65616e75702e344e6f74506172617468726561640004049c4e6f742061207061726174687265616420286f6e2d64656d616e642070617261636861696e292e304e6f7450617261636861696e000504784e6f742061206c6561736520686f6c64696e672070617261636861696e2e3443616e6e6f7455706772616465000604f843616e6e6f742075706772616465206f6e2d64656d616e642070617261636861696e20746f206c6561736520686f6c64696e672070617261636861696e2e3c43616e6e6f74446f776e6772616465000704d843616e6e6f7420646f776e6772616465206c6561736520686f6c64696e672070617261636861696e20746f206f6e2d64656d616e642e30546f6f4d616e79436f726573000804cc546865726520617265206d6f726520636f726573207468616e20737570706f72746564206279207468652072756e74696d652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee90c0000040800450200ed0c00000324000000f10c00f10c04184f7074696f6e04045401f50c0108104e6f6e6500000010536f6d650400f50c0000010000f50c0000040c0045021800f90c105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2061756374696f6e731870616c6c6574144572726f7204045400011c4441756374696f6e496e50726f677265737300000490546869732061756374696f6e20697320616c726561647920696e2070726f67726573732e444c65617365506572696f64496e5061737400010480546865206c6561736520706572696f6420697320696e2074686520706173742e44506172614e6f74526567697374657265640002045850617261206973206e6f742072656769737465726564444e6f7443757272656e7441756374696f6e000304584e6f7420612063757272656e742061756374696f6e2e284e6f7441756374696f6e0004043c4e6f7420616e2061756374696f6e2e3041756374696f6e456e6465640005046841756374696f6e2068617320616c726561647920656e6465642e40416c72656164794c65617365644f7574000604d8546865207061726120697320616c7265616479206c6561736564206f757420666f722070617274206f6620746869732072616e67652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd0c0c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2463726f77646c6f616e2046756e64496e666f10244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201102c4c65617365506572696f640110002801246465706f7369746f720001244163636f756e7449640001207665726966696572dd06014c4f7074696f6e3c4d756c74695369676e65723e00011c6465706f73697418011c42616c616e636500011872616973656418011c42616c616e636500010c656e6410012c426c6f636b4e756d62657200010c63617018011c42616c616e63650001446c6173745f636f6e747269627574696f6e010d01744c617374436f6e747269627574696f6e3c426c6f636b4e756d6265723e00013066697273745f706572696f6410012c4c65617365506572696f6400012c6c6173745f706572696f6410012c4c65617365506572696f6400012866756e645f696e64657810012446756e64496e6465780000010d0c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2463726f77646c6f616e404c617374436f6e747269627574696f6e042c426c6f636b4e756d6265720110010c144e6576657200000024507265456e64696e67040010010c75333200010018456e64696e67040010012c426c6f636b4e756d62657200020000050d105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e2463726f77646c6f616e1870616c6c6574144572726f7204045400015c444669727374506572696f64496e50617374000004f45468652063757272656e74206c6561736520706572696f64206973206d6f7265207468616e20746865206669727374206c6561736520706572696f642e644669727374506572696f64546f6f466172496e4675747572650001041101546865206669727374206c6561736520706572696f64206e6565647320746f206174206c65617374206265206c657373207468616e203320606d61785f76616c7565602e6c4c617374506572696f644265666f72654669727374506572696f64000204e84c617374206c6561736520706572696f64206d7573742062652067726561746572207468616e206669727374206c6561736520706572696f642e604c617374506572696f64546f6f466172496e4675747572650003042d01546865206c617374206c6561736520706572696f642063616e6e6f74206265206d6f7265207468616e203320706572696f64732061667465722074686520666972737420706572696f642e3c43616e6e6f74456e64496e5061737400040445015468652063616d706169676e20656e6473206265666f7265207468652063757272656e7420626c6f636b206e756d6265722e2054686520656e64206d75737420626520696e20746865206675747572652e44456e64546f6f466172496e467574757265000504c054686520656e64206461746520666f7220746869732063726f77646c6f616e206973206e6f742073656e7369626c652e204f766572666c6f770006045854686572652077617320616e206f766572666c6f772e50436f6e747269627574696f6e546f6f536d616c6c000704e854686520636f6e747269627574696f6e207761732062656c6f7720746865206d696e696d756d2c20604d696e436f6e747269627574696f6e602e34496e76616c69645061726149640008044c496e76616c69642066756e6420696e6465782e2c436170457863656564656400090490436f6e747269627574696f6e7320657863656564206d6178696d756d20616d6f756e742e58436f6e747269627574696f6e506572696f644f766572000a04a854686520636f6e747269627574696f6e20706572696f642068617320616c726561647920656e6465642e34496e76616c69644f726967696e000b048c546865206f726967696e206f6620746869732063616c6c20697320696e76616c69642e304e6f7450617261636861696e000c04c8546869732063726f77646c6f616e20646f6573206e6f7420636f72726573706f6e6420746f20612070617261636861696e2e2c4c65617365416374697665000d041501546869732070617261636861696e206c65617365206973207374696c6c2061637469766520616e64207265746972656d656e742063616e6e6f742079657420626567696e2e404269644f724c65617365416374697665000e043101546869732070617261636861696e277320626964206f72206c65617365206973207374696c6c2061637469766520616e642077697468647261772063616e6e6f742079657420626567696e2e3046756e644e6f74456e646564000f04805468652063726f77646c6f616e20686173206e6f742079657420656e6465642e3c4e6f436f6e747269627574696f6e73001004d0546865726520617265206e6f20636f6e747269627574696f6e732073746f72656420696e20746869732063726f77646c6f616e2e484e6f745265616479546f446973736f6c766500110855015468652063726f77646c6f616e206973206e6f7420726561647920746f20646973736f6c76652e20506f74656e7469616c6c79207374696c6c20686173206120736c6f74206f7220696e207265746972656d656e741c706572696f642e40496e76616c69645369676e617475726500120448496e76616c6964207369676e61747572652e304d656d6f546f6f4c617267650013047c5468652070726f7669646564206d656d6f20697320746f6f206c617267652e44416c7265616479496e4e65775261697365001404845468652066756e6420697320616c726561647920696e20604e65775261697365604856726644656c6179496e50726f6772657373001504b44e6f20636f6e747269627574696f6e7320616c6c6f77656420647572696e6720746865205652462064656c6179344e6f4c65617365506572696f640016042d0141206c6561736520706572696f6420686173206e6f742073746172746564207965742c2064756520746f20616e206f666673657420696e20746865207374617274696e6720626c6f636b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e090d0c5c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3861737369676e65645f736c6f74735850617261636861696e54656d706f72617279536c6f7408244163636f756e74496401002c4c65617365506572696f6401100014011c6d616e616765720001244163636f756e744964000130706572696f645f626567696e10012c4c65617365506572696f64000130706572696f645f636f756e7410012c4c65617365506572696f640001286c6173745f6c656173655504014c4f7074696f6e3c4c65617365506572696f643e00012c6c656173655f636f756e7410010c75333200000d0d105c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3861737369676e65645f736c6f74731870616c6c6574144572726f720404540001243c50617261446f65736e744578697374000004a8546865207370656369666965642070617261636861696e206973206e6f7420726567697374657265642e344e6f74506172617468726561640001049c4e6f742061207061726174687265616420286f6e2d64656d616e642070617261636861696e292e3443616e6e6f7455706772616465000208cc43616e6e6f742075706772616465206f6e2d64656d616e642070617261636861696e20746f206c6561736520686f6c64696e672870617261636861696e2e3c43616e6e6f74446f776e6772616465000308ac43616e6e6f7420646f776e6772616465206c6561736520686f6c64696e672070617261636861696e20746f286f6e2d64656d616e642e4c536c6f74416c726561647941737369676e6564000404b45065726d616e656e74206f722054656d706f7261727920736c6f7420616c72656164792061737369676e65642e3c536c6f744e6f7441737369676e6564000504c85065726d616e656e74206f722054656d706f7261727920736c6f7420686173206e6f74206265656e2061737369676e65642e484f6e676f696e674c6561736545786973747300060480416e206f6e676f696e67206c6561736520616c7265616479206578697374732e644d61785065726d616e656e74536c6f74734578636565646564000700644d617854656d706f72617279536c6f74734578636565646564000800048054686520604572726f726020656e756d206f6620746869732070616c6c65742e110d106c706f6c6b61646f745f72756e74696d655f70617261636861696e7320636f726574696d651870616c6c6574144572726f72040454000104244e6f7442726f6b6572000004290154686520706172616964206d616b696e67207468652063616c6c206973206e6f742074686520636f726574696d652062726f6b65726167652073797374656d2070617261636861696e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e150d0c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572c504014456657273696f6e65644c6f636174696f6e00014c6d617962655f6d617463685f71756572696572190d01644f7074696f6e3c56657273696f6e65644c6f636174696f6e3e0001306d617962655f6e6f746966791d0d01404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696ec504014456657273696f6e65644c6f636174696f6e00012469735f616374697665200110626f6f6c000100145265616479080120726573706f6e7365250d014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000190d04184f7074696f6e04045401c5040108104e6f6e6500000010536f6d650400c50400000100001d0d04184f7074696f6e04045401210d0108104e6f6e6500000010536f6d650400210d0000010000210d00000408080800250d080c78636d4456657273696f6e6564526573706f6e736500010c08563204000106013076323a3a526573706f6e736500020008563304004906013076333a3a526573706f6e73650003000856340400a906013076343a3a526573706f6e736500040000290d0000040810c504002d0d0000040c30281000310d0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401350d045300000400390d01185665633c543e0000350d00000408c5041000390d000002350d003d0d0c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e74546172676574730400410d013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000410d04184f7074696f6e04045401380108104e6f6e6500000010536f6d650400380000010000450d0000040c1000390700490d0c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e74696669657201c8304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572c504014456657273696f6e65644c6f636174696f6e0001186c6f636b6572c504014456657273696f6e65644c6f636174696f6e000124636f6e73756d6572734d0d01d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e00004d0d0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401510d045300000400550d01185665633c543e0000510d00000408c81800550d000002510d00590d0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d0d045300000400610d01185665633c543e00005d0d0000040818c50400610d0000025d0d00650d0c2870616c6c65745f78636d1870616c6c6574144572726f720404540001602c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108410154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652ec8506572686170732061206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404dc5468652064657374696e6174696f6e20604c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e5843616e6e6f74436865636b4f757454656c65706f7274000d042901436f756c64206e6f7420636865636b2d6f7574207468652061737365747320666f722074656c65706f72746174696f6e20746f207468652064657374696e6174696f6e20636861696e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e68496e76616c69644173736574556e6b6e6f776e52657365727665001504f0496e76616c69642061737365742c207265736572766520636861696e20636f756c64206e6f742062652064657465726d696e656420666f722069742e78496e76616c69644173736574556e737570706f72746564526573657276650016044501496e76616c69642061737365742c20646f206e6f7420737570706f72742072656d6f7465206173736574207265736572766573207769746820646966666572656e7420666565732072657365727665732e3c546f6f4d616e7952657365727665730017044901546f6f206d616e7920617373657473207769746820646966666572656e742072657365727665206c6f636174696f6e732068617665206265656e20617474656d7074656420666f72207472616e736665722e604c6f63616c457865637574696f6e496e636f6d706c6574650018047c4c6f63616c2058434d20657865637574696f6e20696e636f6d706c6574652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690d085070616c6c65745f6d6573736167655f717565756524426f6f6b537461746504344d6573736167654f726967696e01410700180114626567696e10012450616765496e64657800010c656e6410012450616765496e646578000114636f756e7410012450616765496e64657800014072656164795f6e65696768626f7572736d0d01844f7074696f6e3c4e65696768626f7572733c4d6573736167654f726967696e3e3e0001346d6573736167655f636f756e7430010c75363400011073697a6530010c75363400006d0d04184f7074696f6e04045401710d0108104e6f6e6500000010536f6d650400710d0000010000710d085070616c6c65745f6d6573736167655f7175657565284e65696768626f75727304344d6573736167654f726967696e0141070008011070726576410701344d6573736167654f726967696e0001106e657874410701344d6573736167654f726967696e0000750d0000040841071000790d085070616c6c65745f6d6573736167655f71756575651050616765081053697a650110204865617053697a65000018012472656d61696e696e6710011053697a6500013872656d61696e696e675f73697a6510011053697a6500012c66697273745f696e64657810011053697a65000114666972737410011053697a650001106c61737410011053697a65000110686561707d0d019c426f756e6465645665633c75382c20496e746f5533323c4865617053697a652c2053697a653e3e00007d0d0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000810d0c5070616c6c65745f6d6573736167655f71756575651870616c6c6574144572726f720404540001242c4e6f745265617061626c65000008490150616765206973206e6f74207265617061626c65206265636175736520697420686173206974656d732072656d61696e696e6720746f2062652070726f63657373656420616e64206973206e6f74206f6c641c656e6f7567682e184e6f50616765000104845061676520746f2062652072656170656420646f6573206e6f742065786973742e244e6f4d657373616765000204a8546865207265666572656e636564206d65737361676520636f756c64206e6f7420626520666f756e642e40416c726561647950726f6365737365640003040101546865206d6573736167652077617320616c72656164792070726f63657373656420616e642063616e6e6f742062652070726f63657373656420616761696e2e18517565756564000404ac546865206d6573736167652069732071756575656420666f722066757475726520657865637574696f6e2e48496e73756666696369656e74576569676874000504190154686572652069732074656d706f726172696c79206e6f7420656e6f7567682077656967687420746f20636f6e74696e756520736572766963696e67206d657373616765732e6054656d706f726172696c79556e70726f6365737361626c65000610a854686973206d6573736167652069732074656d706f726172696c7920756e70726f6365737361626c652e00590153756368206572726f7273206172652065787065637465642c20627574206e6f742067756172616e746565642c20746f207265736f6c7665207468656d73656c766573206576656e7475616c6c79207468726f756768247265747279696e672e2c517565756550617573656400070cec5468652071756575652069732070617573656420616e64206e6f206d6573736167652063616e2062652065786563757465642066726f6d2069742e001d01546869732063616e206368616e676520617420616e792074696d6520616e64206d6179207265736f6c766520696e20746865206675747572652062792072652d747279696e672e4c526563757273697665446973616c6c6f7765640008043101416e6f746865722063616c6c20697320696e2070726f677265737320616e64206e6565647320746f2066696e697368206265666f726520746869732063616c6c2063616e2068617070656e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e850d0c4470616c6c65745f61737365745f726174651870616c6c6574144572726f7204045400010c40556e6b6e6f776e41737365744b696e640000047854686520676976656e20617373657420494420697320756e6b6e6f776e2e34416c7265616479457869737473000104510154686520676976656e20617373657420494420616c72656164792068617320616e2061737369676e656420636f6e76657273696f6e207261746520616e642063616e6e6f742062652072652d637265617465642e204f766572666c6f77000204cc4f766572666c6f77206f637572726564207768656e2063616c63756c6174696e672074686520696e766572736520726174652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e890d0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f9010453000004008d0d01185665633c543e00008d0d000002f90100910d0c3070616c6c65745f62656566791870616c6c6574144572726f7204045400011060496e76616c69644b65794f776e65727368697050726f6f66000004310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660001043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e950d0c4873705f636f6e73656e7375735f62656566790c6d6d72444265656679417574686f726974795365740458417574686f72697479536574436f6d6d69746d656e740134000c0108696430015463726174653a3a56616c696461746f72536574496400010c6c656e10010c7533320001446b65797365745f636f6d6d69746d656e74340158417574686f72697479536574436f6d6d69746d656e740000990d102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730195011043616c6c015101245369676e6174757265012d03144578747261019d0d000400380000009d0d00000420a10da50da90dad0db10db90dbd0dc10d00a10d10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000a50d10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000a90d10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000ad0d10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000b10d10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400b50d010c4572610000b50d102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000b90d10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040071010120543a3a4e6f6e63650000bd0d10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000c10d086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400a501013042616c616e63654f663c543e0000c50d083c77657374656e645f72756e74696d651c52756e74696d6500000000f41853797374656d011853797374656d481c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010020040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040234fd070400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000010804000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100200400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100200400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000f907040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500000908040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01550101581830426c6f636b576569676874730d08f9018282256e000b00204aa9d10113ffffffffffffffff028c171b00010b00ed1990580113a3703d0ad7a370bd010b0098f73e5d0113ffffffffffffffbf010000028c171b00010b00756cfacc0113a3703d0ad7a370fd010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040028c171b0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746819083000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687421084040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e250865041c77657374656e64387061726974792d77657374656e6402000000386d0f000000000050df6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000af2c0297a23e6d3d0b00000049eaaf1b548a0cb00300000091d5df18b0d2cf58020000002a5e924655399e6001000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab527059030000006ff52ee858e6c5bd0100000017a6bc0d0062aeb30100000018ef58a3b67ba77001000000fbc577b9d747efd60100000019000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e2853533538507265666978fc082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013508001042616265011042616265442845706f6368496e64657801003020000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f726974696573010039080400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100790120000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100790120000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000810104000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100390804000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510450804000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a656400004d0804000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100e404001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100e0200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000650804000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000065080400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100690804002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e01650100103445706f63684475726174696f6e302058020000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d653020701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564344d61784e6f6d696e61746f727310104000000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e017508012454696d657374616d70012454696d657374616d70080c4e6f7701003020000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010020040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e018d010004344d696e696d756d506572696f643020b80b000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e7473000104021079080400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e019101017c041c4465706f73697418400010a5d4e8000000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e017d08032042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402008108040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200910804000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c647301010402009d080400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200b1080400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01a101018010484578697374656e7469616c4465706f736974184000e40b5402000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310100100000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01c50804485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201004d0740000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100c90804000000018804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e001a28417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000051c5374616b696e67011c5374616b696e67ac3856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100a90104000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e01009410000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c65646765720001040200cd080400104501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e007501204e6f74653a20416c6c2074686520726561647320616e64206d75746174696f6e7320746f20746869732073746f72616765202a4d5553542a20626520646f6e65207468726f75676820746865206d6574686f6473206578706f736564e8206279205b605374616b696e674c6564676572605d20746f20656e73757265206461746120616e64206c6f636b20636f6e73697374656e63792e14506179656500010405009004000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500980800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500d50804004c750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468652d01206163636f756e742773205b604e6f6d696e6174696f6e7351756f74613a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e9020496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170385669727475616c5374616b6572730001040500c8040018c8205374616b6572732077686f73652066756e647320617265206d616e61676564206279206f746865722070616c6c6574732e00750120546869732070616c6c657420646f6573206e6f74206170706c7920616e79206c6f636b73206f6e207468656d2c207468657265666f7265207468657920617265206f6e6c79207669727475616c6c7920626f6e6465642e20546865796d012061726520657870656374656420746f206265206b65796c657373206163636f756e747320616e642068656e63652073686f756c64206e6f7420626520616c6c6f77656420746f206d7574617465207468656972206c65646765727101206469726563746c792076696120746869732070616c6c65742e20496e73746561642c207468657365206163636f756e747320617265206d616e61676564206279206f746865722070616c6c65747320616e64206163636573736564290120766961206c6f77206c6576656c20617069732e205765206b65657020747261636b206f66207468656d20746f20646f206d696e696d616c20696e7465677269747920636865636b732e60436f756e746572466f725669727475616c5374616b657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e244163746976654572610000dd08040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400105501205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505e508e9080c0000002078204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e4c457261735374616b6572734f766572766965770001080505e508f508040030b82053756d6d617279206f662076616c696461746f72206578706f73757265206174206120676976656e206572612e007101205468697320636f6e7461696e732074686520746f74616c207374616b6520696e20737570706f7274206f66207468652076616c696461746f7220616e64207468656972206f776e207374616b652e20496e206164646974696f6e2c75012069742063616e20616c736f206265207573656420746f2067657420746865206e756d626572206f66206e6f6d696e61746f7273206261636b696e6720746869732076616c696461746f7220616e6420746865206e756d626572206f666901206578706f73757265207061676573207468657920617265206469766964656420696e746f2e20546865207061676520636f756e742069732075736566756c20746f2064657465726d696e6520746865206e756d626572206f66ac207061676573206f6620726577617264732074686174206e6565647320746f20626520636c61696d65642e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742eac2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206f766572766965772069732072657475726e65642e48457261735374616b657273436c69707065640101080505e508e9080c000000409820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e006501204e6f74653a205468697320697320646570726563617465642c2073686f756c64206265207573656420617320726561642d6f6e6c7920616e642077696c6c2062652072656d6f76656420696e20746865206675747572652e3101204e657720604578706f737572656073206172652073746f72656420696e2061207061676564206d616e6e657220696e2060457261735374616b65727350616765646020696e73746561642e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865a82060543a3a4d61784578706f737572655061676553697a65602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e002901204e6f74653a20446570726563617465642073696e6365207631342e205573652060457261496e666f6020696e737465616420746f20776f726b2077697468206578706f73757265732e40457261735374616b657273506167656400010c050505f908fd08040018c020506167696e61746564206578706f73757265206f6620612076616c696461746f7220617420676976656e206572612e0071012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e2c207468656e207374617368206163636f756e7420616e642066696e616c6c79d42074686520706167652e2053686f756c64206f6e6c79206265206163636573736564207468726f7567682060457261496e666f602e00d4205468697320697320636c6561726564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e38436c61696d6564526577617264730101080505e5084101040018dc20486973746f7279206f6620636c61696d656420706167656420726577617264732062792065726120616e642076616c696461746f722e0069012054686973206973206b657965642062792065726120616e642076616c696461746f72207374617368207768696368206d61707320746f2074686520736574206f66207061676520696e6465786573207768696368206861766538206265656e20636c61696d65642e00cc2049742069732072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e484572617356616c696461746f7250726566730101080505e508980800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00cc2049732069742072656d6f766564206166746572205b60436f6e6669673a3a486973746f72794465707468605d20657261732e4c4572617356616c696461746f7252657761726400010405101804000c2d012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510010914000000000008d0205265776172647320666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b6501010405101840000000000000000000000000000000000811012054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c617374205b60436f6e6669673a3a486973746f72794465707468605d20657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100a004000454204d6f6465206f662065726120666f7263696e672e404d61785374616b6564526577617264730000b90104000c1901204d6178696d756d207374616b656420726577617264732c20692e652e207468652070657263656e74616765206f66207468652065726120696e666c6174696f6e20746861746c206973207573656420666f72207374616b6520726577617264732eac20536565205b457261207061796f75745d282e2f696e6465782e68746d6c236572612d7061796f7574292e4c536c6173685265776172644672616374696f6e01009410000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405101109040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100fd0704001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e4572610001080505e5081909040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505e50818040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e7300010405001d090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104050d092109800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301002509040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000b90104000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01b101018c1830486973746f72794465707468101054000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602c4501206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c2060436c61696d656452657761726473602c2060457261735374616b6572735061676564602c5c2060457261735374616b6572734f76657276696577602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563602d01206974656d20605374616b696e674c65646765722e6c65676163795f636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100200000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e101001000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e4c4d61784578706f737572655061676553697a651010400000002cb020546865206d6178696d756d2073697a65206f6620656163682060543a3a4578706f7375726550616765602e00290120416e20604578706f737572655061676560206973207765616b6c7920626f756e64656420746f2061206d6178696d756d206f6620604d61784578706f737572655061676553697a656030206e6f6d696e61746f72732e00210120466f72206f6c646572206e6f6e2d7061676564206578706f737572652c206120726577617264207061796f757420776173207265737472696374656420746f2074686520746f70210120604d61784578706f737572655061676553697a6560206e6f6d696e61746f72732e205468697320697320746f206c696d69742074686520692f6f20636f737420666f722074686548206e6f6d696e61746f72207061796f75742e005901204e6f74653a20604d61784578706f737572655061676553697a6560206973207573656420746f20626f756e642060436c61696d6564526577617264736020616e6420697320756e7361666520746f207265647563659020776974686f75742068616e646c696e6720697420696e2061206d6967726174696f6e2e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e012d0906204f6666656e63657301204f6666656e636573081c5265706f72747300010405343109040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e646578010108050539094d030400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e0001a400000728486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e7300010405103d090400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e67650000e0040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000001b1c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100a9010400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010020040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010041090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010041010400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500e9010400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405490900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01e50101ac00015109081c4772616e647061011c4772616e6470611c1453746174650100550904000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500005909040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e00400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010030200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405301004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f72697469657301005d0904000484205468652063757272656e74206c697374206f6620617574686f7269746965732e01010201b00c384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310104000000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e747269657330200c0000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e0161090a48417574686f72697479446973636f766572790148417574686f72697479446973636f7665727908104b657973010065090400048c204b657973206f66207468652063757272656e7420617574686f72697479207365742e204e6578744b6579730100650904000480204b657973206f6620746865206e65787420617574686f72697479207365742e000000000c1c5574696c69747900012d0201c0044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e016d0910204964656e7469747901204964656e746974791c284964656e746974794f6600010405007109040010690120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e204669727374206974656d20697320746865e020726567697374726174696f6e2c207365636f6e6420697320746865206163636f756e742773207072696d61727920757365726e616d652e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f66000104020021030400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500890944000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e2852656769737472617273010091090400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e4c557365726e616d65417574686f7269746965730001040500a109040004f42041206d6170206f6620746865206163636f756e74732077686f2061726520617574686f72697a656420746f206772616e7420757365726e616d65732e444163636f756e744f66557365726e616d6500010402d0000400146d012052657665727365206c6f6f6b75702066726f6d2060757365726e616d656020746f2074686520604163636f756e7449646020746861742068617320726567697374657265642069742e205468652076616c75652073686f756c6465012062652061206b657920696e2074686520604964656e746974794f6660206d61702c20627574206974206d6179206e6f742069662074686520757365722068617320636c6561726564207468656972206964656e746974792e006901204d756c7469706c6520757365726e616d6573206d6179206d617020746f207468652073616d6520604163636f756e744964602c2062757420604964656e746974794f66602077696c6c206f6e6c79206d617020746f206f6e6548207072696d61727920757365726e616d652e4050656e64696e67557365726e616d657300010402d00d090400186d0120557365726e616d6573207468617420616e20617574686f7269747920686173206772616e7465642c20627574207468617420746865206163636f756e7420636f6e74726f6c6c657220686173206e6f7420636f6e6669726d65647101207468617420746865792077616e742069742e2055736564207072696d6172696c7920696e2063617365732077686572652074686520604163636f756e744964602063616e6e6f742070726f766964652061207369676e61747572655d012062656361757365207468657920617265206120707572652070726f78792c206d756c74697369672c206574632e20496e206f7264657220746f20636f6e6669726d2069742c20746865792073686f756c642063616c6c6c205b6043616c6c3a3a6163636570745f757365726e616d65605d2e001d01204669727374207475706c65206974656d20697320746865206163636f756e7420616e64207365636f6e642069732074686520616363657074616e636520646561646c696e652e018d0201cc203042617369634465706f736974184000a0724e18090000000000000000000004d82054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e2c427974654465706f736974184080f0fa02000000000000000000000000041d012054686520616d6f756e742068656c64206f6e206465706f7369742070657220656e636f646564206279746520666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f736974184000204aa9d101000000000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e344d617852656769737472617273101014000000084d01204d6178696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e6450656e64696e67557365726e616d6545787069726174696f6e1010c089010004150120546865206e756d626572206f6620626c6f636b732077697468696e207768696368206120757365726e616d65206772616e74206d7573742062652061636365707465642e3c4d61785375666669784c656e677468101007000000048020546865206d6178696d756d206c656e677468206f662061207375666669782e444d6178557365726e616d654c656e67746810102000000004610120546865206d6178696d756d206c656e677468206f66206120757365726e616d652c20696e636c7564696e67206974732073756666697820616e6420616e792073797374656d2d61646465642064656c696d69746572732e01a90911205265636f7665727901205265636f766572790c2c5265636f76657261626c650001040500ad0904000409012054686520736574206f66207265636f76657261626c65206163636f756e747320616e64207468656972207265636f7665727920636f6e66696775726174696f6e2e404163746976655265636f7665726965730001080505b509b9090400106820416374697665207265636f7665727920617474656d7074732e001501204669727374206163636f756e7420697320746865206163636f756e7420746f206265207265636f76657265642c20616e6420746865207365636f6e64206163636f756e74ac20697320746865207573657220747279696e6720746f207265636f76657220746865206163636f756e742e1450726f787900010402000004000c9020546865206c697374206f6620616c6c6f7765642070726f7879206163636f756e74732e00f8204d61702066726f6d2074686520757365722077686f2063616e2061636365737320697420746f20746865207265636f7665726564206163636f756e742e01350301d41044436f6e6669674465706f736974426173651840005039278c040000000000000000000010550120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061207265636f7665727920636f6e66696775726174696f6e2e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a65206973a8206032202b2073697a656f6628426c6f636b4e756d6265722c2042616c616e636529602062797465732e4c467269656e644465706f736974466163746f7218400088526a740000000000000000000000142d012054686520616d6f756e74206f662063757272656e6379206e656564656420706572206164646974696f6e616c2075736572207768656e206372656174696e672061207265636f766572793c20636f6e66696775726174696f6e2e004d0120546869732069732068656c6420666f7220616464696e67206073697a656f66284163636f756e7449642960206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167651c2076616c75652e284d6178467269656e6473101009000000180d0120546865206d6178696d756d20616d6f756e74206f6620667269656e647320616c6c6f77656420696e2061207265636f7665727920636f6e66696775726174696f6e2e000d01204e4f54453a20546865207468726573686f6c642070726f6772616d6d656420696e20746869732050616c6c65742075736573207531362c20736f20697420646f65730901206e6f74207265616c6c79206d616b652073656e736520746f20686176652061206c696d697420686572652067726561746572207468616e207531363a3a4d41582e15012042757420616c736f2c20746861742069732061206c6f74206d6f7265207468616e20796f752073686f756c642070726f6261626c792073657420746869732076616c75653420746f20616e797761792e2e2e3c5265636f766572794465706f7369741840005039278c04000000000000000000001c1d0120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72207374617274696e672061207265636f766572792e0035012054686973206973207072696d6172696c792068656c6420666f7220646574657272696e67206d616c6963696f7573207265636f7665727920617474656d7074732c20616e642073686f756c642901206861766520612076616c7565206c6172676520656e6f7567682074686174206120626164206163746f7220776f756c642063686f6f7365206e6f7420746f20706c61636520746869732901206465706f7369742e20497420616c736f206163747320746f2066756e64206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069734101206073697a656f6628426c6f636b4e756d6265722c2042616c616e6365202b2054202a204163636f756e74496429602062797465732e2057686572652054206973206120636f6e666967757261626c652c207468726573686f6c642e01bd09121c56657374696e67011c56657374696e67081c56657374696e670001040200c109040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100c90904000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01390301d808444d696e5665737465645472616e7366657218400010a5d4e8000000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001cd0913245363686564756c657201245363686564756c6572103c496e636f6d706c65746553696e6365000010040000184167656e64610101040510d1090400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e1c5265747269657300010402e0e109040004210120526574727920636f6e66696775726174696f6e7320666f72206974656d7320746f2062652065786563757465642c20696e6465786564206279207461736b20616464726573732e184c6f6f6b75700001040504e0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01410301dc08344d6178696d756d57656967687428400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01e5091420507265696d6167650120507265696d6167650c24537461747573466f720001040634e9090400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f720001040634f1090400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104063d09010a04000001490301e80001050a1c105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01510301ec0001090a151450726f7879011450726f7879081c50726f7869657301010405000d0a4400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405001d0a44000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01550301f4184050726f78794465706f73697442617365184000947cece8000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218408000596200000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f73697442617365184000947cece8000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f7218400001b2c400000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e012d0a16204d756c746973696701204d756c746973696704244d756c7469736967730001080502310a350a040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e015d030101010c2c4465706f73697442617365184000bce7dae9000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000105e5f0000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e013d0a1768456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e745068617365010015010400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000410a04000c3d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e006020416c7761797320736f727465642062792073636f72652e20536e617073686f740000490a0400107020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e384465736972656454617267657473000010040010cc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e40536e617073686f744d65746164617461000039040400109820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2901204e6f74653a20546869732073746f726167652074797065206d757374206f6e6c79206265206d757461746564207468726f756768205b60536e617073686f7457726170706572605d2e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e64696365730100550a0400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510610a04001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f7265000011010400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01650301090138544265747465725369676e65645468726573686f6c64941000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e384f6666636861696e52657065617410102500000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974793020ffffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010800000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687428400b608c9074580113a3703d0ad7a370bd1494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310102000000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e65645265776172644261736518400010a5d4e80000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f7369744279746518405973070000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687428400b608c9074580113a3703d0ad7a370bd00544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e6572731010e80300000001650a1824566f7465724c6973740124566f7465724c6973740c244c6973744e6f6465730001040500690a04000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c6973744261677300010405306d0a04000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e015904011d0104344261675468726573686f6c6473710a0919210300e40b5402000000f39e809702000000a8b197e20200000094492e3603000000279c3a930300000003bccefa0300000042c01b6e040000001b4775ee04000000385e557d0500000046dc601c0600000089386ccd06000000b6ee809207000000fe7ee36d08000000e81b1a6209000000b019f4710a000000103592a00b000000cfc96ff10c00000041146d680e000000e79bda0910000000cee885da1100000028a9c7df13000000bb70931f160000008e4089a018000000810a096a1b000000366a48841e0000005bd36af821000000807c9cd025000000c95530182a000000bd63c1db2e00000071e0572934000000689092103a000000edc4d4a240000000699379f3470000008fd80c18500000004baf8a28590000006a16a63f630000000995177b6e00000078c5f4fb7a00000062c811e78800000051bf6d6598000000048eaba4a9000000544698d7bc00000091cac036d2000000175f1801ea000000bd15b27c0401000043358ff721010000b8fc84c84201000099673c506701000007e44efa8f010000b341833ebd010000027f2ea2ef0100009883bcb927020000164d652a66020000b49513acab0200002d8e820bf9020000a1e6982c4f030000a616080daf030000cc9d37c719040000a0d584959004000042e7e0d514050000028cd70da80500000f750aef4b060000ea8d2e5c02070000c3cb996ecd070000b1e5717caf080000aa2b8e1fab090000b5c1203dc30a000026d03d0efb0b000070c75929560d0000ebadda8cd80e0000f797dbaa86100000cff04476651200001f2660717a14000009a611becb1600001dfbe82f60190000943a3c603f1c00008afe89c4711f0000ced963c70023000003a92ae4f6260000fe72eec55f2b000036c9cc6948300000dae33245bf350000062a7470d43b00007c9732d69942000084a32468234a0000571ad45987520000e7f10262de5b00000db8760344660000ae0401ded67100007d9eb308b97e00001e044a76108d00003a1df064079d0000e04fafdaccae00005679f02f95c2000095c3aaa99ad80000967c05251ef10000177a66d6670c010028cb1f1ec82a0100fa282f75984c0100d57dc8743c7201007dc4b3fb229c0100365cde74c7ca01009eb8e142b3fe01000c31ae547f3802005fe101e8d57802006373da7e74c0020051d1a60d2e100300c7e9a468ed68030061c091f7b7cb0300bf27a1b7b03904007b1499941bb404008523ed22613c050069a5d4c512d40500ec8c934def7c0600f5aa901be83807008cbe5ddb260a080002978ce113f30800fae314435df60900ddf12dbafe160b002ebadc6f4a580c000c5518c4f2bd0d00f0bb5431154c0f00498e866b46071100b2c153de9ff41200278a2fb2ce191500b2399f84247d1700e199e704aa251a00ba13f5ab331b1d00264785cc7866200088bf803f2d1124001c9823f81d262800ccc422d450b12c00f088820528c03100367c6d7e896137006e9329d30aa63d008cbc6c1322a044000070f32a5c644c00b43b84699909550080b4abe450a95e00a0cda979db5f69004cc27f4cc74c7500d0ac0eba34938200483e0ccf3d5a910068c68e7469cda100281e6fa52b1db40098a92326747fc800f09a74634d30df0080cdfc4b8d72f8009014602d9a901401f0b413d945dd330120973596c1b4560150dcfbaead7d7d01e01198b947aaa80130c7ee16bbb9d801206e488697390e02a0fa4b1d72c74902c0117170b5128c02808a1643a6ded502c0f823b1a204280380af5970a2768303c06f2d87ff41e90340937fac8f925a040091097117b6d804400fdf5b212065050049c149446e0106008ebca6e56caf0600595686851c71078068aa34a4b7480880a1e29e52b9380900bdabe880e4430a002a72b4204c6d0b80f1c013335cb80c00a03ccbdce3280e80b8629a9e20c30f00de5693d2ca8b11005d7f4c93238813001a87df3504be1500a7ce4b84ef3318000110fbea24f11a00802ae5d1b5fd1d0022a134609d62210044216bf0da2925000261f1828f5e29006620cf851e0d2e008410195252433300a0c18fca8410390026ad1493cc853f00d0cd24662fb646009ce19a1cdab64e0058ccc20c5f9f5700200a7578fb89610030bbbbd6e4936c0060cba7dc9edd7800b83bc0425b8b8600b886236164c59500f8f15fdc93b8a600206a91c0d696b900d8efe28fc097ce0068299bf52ef9e5ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01750a193c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c735440546f74616c56616c75654c6f636b65640100184000000000000000000000000000000000148c205468652073756d206f662066756e6473206163726f737320616c6c20706f6f6c732e0071012054686973206d69676874206265206c6f77657220627574206e6576657220686967686572207468616e207468652073756d206f662060746f74616c5f62616c616e636560206f6620616c6c205b60506f6f6c4d656d62657273605d590120626563617573652063616c6c696e672060706f6f6c5f77697468647261775f756e626f6e64656460206d696768742064656372656173652074686520746f74616c207374616b65206f662074686520706f6f6c277329012060626f6e6465645f6163636f756e746020776974686f75742061646a757374696e67207468652070616c6c65742d696e7465726e616c2060556e626f6e64696e67506f6f6c6027732e2c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e00009404000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d6265727300010405007d0a04000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510910a040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510a50a04000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f7574206f66207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510a90a04000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d657461646174610101040510c10a0400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0075012054686973206973206f6e6c79207573656420666f7220736c617368696e6720616e64206f6e206175746f6d61746963207769746864726177207570646174652e20496e20616c6c206f7468657220696e7374616e6365732c20746865250120706f6f6c20696420697320757365642c20616e6420746865206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050075040402040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e015d040121010c2050616c6c65744964c50a2070792f6e6f706c73048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e636508040a301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e304d6178556e626f6e64696e67101020000000043d0120546865206d6178696d756d206e756d626572206f662073696d756c74616e656f757320756e626f6e64696e67206368756e6b7320746861742063616e20657869737420706572206d656d6265722e01c90a1d2c46617374556e7374616b65012c46617374556e7374616b651010486561640000d10a04000cc0205468652063757272656e74202268656164206f662074686520717565756522206265696e6720756e7374616b65642e00290120546865206865616420696e20697473656c662063616e2062652061206261746368206f6620757020746f205b60436f6e6669673a3a426174636853697a65605d207374616b6572732e14517565756500010405001804000cc020546865206d6170206f6620616c6c206163636f756e74732077697368696e6720746f20626520756e7374616b65642e003901204b6565707320747261636b206f6620604163636f756e744964602077697368696e6720746f20756e7374616b6520616e64206974277320636f72726573706f6e64696e67206465706f7369742e3c436f756e746572466f725175657565010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61704c45726173546f436865636b506572426c6f636b0100101000000000208c204e756d626572206f66206572617320746f20636865636b2070657220626c6f636b2e0035012049662073657420746f20302c20746869732070616c6c657420646f6573206162736f6c7574656c79206e6f7468696e672e2043616e6e6f742062652073657420746f206d6f7265207468616e90205b60436f6e6669673a3a4d617845726173546f436865636b506572426c6f636b605d2e006501204261736564206f6e2074686520616d6f756e74206f662077656967687420617661696c61626c65206174205b6050616c6c65743a3a6f6e5f69646c65605d2c20757020746f2074686973206d616e792065726173206172655d0120636865636b65642e2054686520636865636b696e6720697320726570726573656e746564206279207570646174696e67205b60556e7374616b65526571756573743a3a636865636b6564605d2c207768696368206973502073746f72656420696e205b6048656164605d2e017904013d01041c4465706f73697418400010a5d4e80000000000000000000000086501204465706f73697420746f2074616b6520666f7220756e7374616b696e672c20746f206d616b6520737572652077652772652061626c6520746f20736c6173682074686520697420696e206f7264657220746f20636f766572c02074686520636f737473206f66207265736f7572636573206f6e20756e7375636365737366756c20756e7374616b652e01dd0a1e40436f6e76696374696f6e566f74696e670140436f6e76696374696f6e566f74696e670824566f74696e67466f720101080505e10ae50ad800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008750120416c6c20766f74696e6720666f72206120706172746963756c617220766f74657220696e206120706172746963756c617220766f74696e6720636c6173732e2057652073746f7265207468652062616c616e636520666f72207468659c206e756d626572206f6620766f74657320746861742077652068617665207265636f726465642e34436c6173734c6f636b73466f720101040500050b04000c69012054686520766f74696e6720636c617373657320776869636820686176652061206e6f6e2d7a65726f206c6f636b20726571756972656d656e7420616e6420746865206c6f636b20616d6f756e747320776869636820746865796d0120726571756972652e205468652061637475616c20616d6f756e74206c6f636b6564206f6e20626568616c66206f6620746869732070616c6c65742073686f756c6420616c7761797320626520746865206d6178696d756d206f662c2074686973206c6973742e017d0401450108204d6178566f74657310100002000010f020546865206d6178696d756d206e756d626572206f6620636f6e63757272656e7420766f74657320616e206163636f756e74206d617920686176652e00550120416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206c617267652076616c75652063616e206c65616420746f2065787472696e736963732077697468206c61726765c02077656967687420657374696d6174696f6e3a20736565206064656c65676174656020666f7220696e7374616e63652e44566f74654c6f636b696e67506572696f641010c0890100109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e01110b1f245265666572656e646101245265666572656e6461143c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e445265666572656e64756d496e666f466f720001040210150b040004b420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e28547261636b517565756501010405fc350b0400105d012054686520736f72746564206c697374206f66207265666572656e646120726561647920746f206265206465636964656420627574206e6f7420796574206265696e6720646563696465642c206f7264657265642062797c20636f6e76696374696f6e2d776569676874656420617070726f76616c732e00410120546869732073686f756c6420626520656d70747920696620604465636964696e67436f756e7460206973206c657373207468616e2060547261636b496e666f3a3a6d61785f6465636964696e67602e344465636964696e67436f756e7401010405fc10100000000004c420546865206e756d626572206f66207265666572656e6461206265696e6720646563696465642063757272656e746c792e284d657461646174614f66000104021034040018050120546865206d6574616461746120697320612067656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720746865207265666572656e64756d2e490120546865206048617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01910401490114445375626d697373696f6e4465706f736974184000ac23fc06000000000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e244d617851756575656410106400000004e4204d6178696d756d2073697a65206f6620746865207265666572656e64756d20717565756520666f7220612073696e676c6520747261636b2e44556e6465636964696e6754696d656f757410108013030008550120546865206e756d626572206f6620626c6f636b73206166746572207375626d697373696f6e20746861742061207265666572656e64756d206d75737420626567696e206265696e6720646563696465642062792ee4204f6e63652074686973207061737365732c207468656e20616e796f6e65206d61792063616e63656c20746865207265666572656e64756d2e34416c61726d496e74657276616c1010010000000c5d01205175616e74697a6174696f6e206c6576656c20666f7220746865207265666572656e64756d2077616b657570207363686564756c65722e204120686967686572206e756d6265722077696c6c20726573756c7420696e5d012066657765722073746f726167652072656164732f777269746573206e656564656420666f7220736d616c6c657220766f746572732c2062757420616c736f20726573756c7420696e2064656c61797320746f207468655501206175746f6d61746963207265666572656e64756d20737461747573206368616e6765732e204578706c6963697420736572766963696e6720696e737472756374696f6e732061726520756e61666665637465642e18547261636b73390ba9153c000010726f6f740100000000008a5d78456301000000000000000050000000c800000078000000320000000290d73e0d000000005743de13000000005443de13000000000000ca9a3b000000000065cd1d01004877686974656c69737465645f63616c6c6572640000000000c16ff286230000000000000000003c000000c8000000280000001e00000002ec972510000000007b573c170000000042392f1200000000020e00840000000000d6e61f010000000039627902000000000a00347374616b696e675f61646d696e0a0000000080e03779c31100000000000000000050000000c8000000500000001e00000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff0b00247472656173757265720a0000000080c6a47e8d0300000000000000000050000000c800000050000000320000000290d73e0d000000005743de13000000005443de13000000000000ca9a3b000000000065cd1d0c002c6c656173655f61646d696e0a0000000080e03779c31100000000000000000050000000c8000000500000001e00000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff0d004066656c6c6f77736869705f61646d696e0a0000000080e03779c31100000000000000000050000000c8000000500000001e00000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff0e003467656e6572616c5f61646d696e0a0000000080e03779c31100000000000000000050000000c8000000500000001e0000000290d73e0d000000005743de13000000005443de13000000000259a2f40200000000a3296b05000000002e6b4afdffffffff0f003461756374696f6e5f61646d696e0a0000000080e03779c31100000000000000000050000000c8000000500000001e0000000290d73e0d000000005743de13000000005443de13000000000259a2f40200000000a3296b05000000002e6b4afdffffffff1400507265666572656e64756d5f63616e63656c6c6572e80300000000c16ff28623000000000000000000500000008c000000500000001e00000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff1500447265666572656e64756d5f6b696c6c6572e80300000000c52ebca2b100000000000000000050000000c8000000500000001e00000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff1e0030736d616c6c5f746970706572c800000000ac23fc0600000000000000000000000a0000008c000000280000000a00000000499149150065cd1d00ca9a3b02f9ba1800000000002a4d3100000000006b59e7ffffffffff1f00286269675f7469707065726400000000b864d9450000000000000000000000280000008c000000780000001e00000000499149150065cd1d00ca9a3b02694f3f000000000035967d0000000000e534c1ffffffffff200034736d616c6c5f7370656e646572320000000030ef7dba020000000000000000000064000000c8000000640000003200000000c94330240065cd1d00ca9a3b025d6f780000000000e82eed00000000008c6889ffffffffff2100386d656469756d5f7370656e646572320000000060defb74050000000000000000000064000000c80000007800000032000000005b01f6300065cd1d00ca9a3b021161db0000000000bfd1aa010000000020972affffffffff22002c6269675f7370656e6465723200000000c0bcf7e90a0000000000000000000064000000c80000008c000000320000000000ca9a3b0065cd1d00ca9a3b02413cb00100000000755d34030000000045d165feffffffff04e020496e666f726d6174696f6e20636f6e6365726e696e672074686520646966666572656e74207265666572656e64756d20747261636b732e01510b201c4f726967696e730000000000232457686974656c697374012457686974656c697374043c57686974656c697374656443616c6c0001040534c8040000019d040185070001550b2420547265617375727901205472656173757279183450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c730001040510590b0400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301005d0b040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e285370656e64436f756e74010010100000000004a42054686520636f756e74206f66207370656e647320746861742068617665206265656e206d6164652e185370656e64730001040510610b040004d0205370656e647320746861742068617665206265656e20617070726f76656420616e64206265696e672070726f6365737365642e01a104019907203050726f706f73616c426f6e64690b1050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d18400040e59c301200000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dd10144010080c6a47e8d03000000000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f64101080510100048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e690b10d00700000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964c50a2070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e305061796f7574506572696f641010809706000419012054686520706572696f6420647572696e6720776869636820616e20617070726f766564207472656173757279207370656e642068617320746f20626520636c61696d65642e016d0b254050617261636861696e734f726967696e00000000002934436f6e66696775726174696f6e0134436f6e66696775726174696f6e0c30416374697665436f6e6669670100710b410300003000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000064000000010000000100000000000000000000000000000002000000020000000200000000010000000100000001000000000100000000000000000000001027000080b2e60e80c3c901809698000000000000000000000000000500000004c8205468652061637469766520636f6e66696775726174696f6e20666f72207468652063757272656e742073657373696f6e2e3850656e64696e67436f6e666967730100750b04001c7c2050656e64696e6720636f6e66696775726174696f6e206368616e6765732e00590120546869732069732061206c697374206f6620636f6e66696775726174696f6e206368616e6765732c2065616368207769746820612073657373696f6e20696e6465782061742077686963682069742073686f756c6430206265206170706c6965642e00610120546865206c69737420697320736f7274656420617363656e64696e672062792073657373696f6e20696e6465782e20416c736f2c2074686973206c6973742063616e206f6e6c7920636f6e7461696e206174206d6f7374fc2032206974656d733a20666f7220746865206e6578742073657373696f6e20616e6420666f722074686520607363686564756c65645f73657373696f6e602e58427970617373436f6e73697374656e6379436865636b01002004000861012049662074686973206973207365742c207468656e2074686520636f6e66696775726174696f6e20736574746572732077696c6c206279706173732074686520636f6e73697374656e637920636865636b732e2054686973b4206973206d65616e7420746f2062652075736564206f6e6c7920617320746865206c617374207265736f72742e01e5040000017d0b2a2c5061726173536861726564012c5061726173536861726564104c43757272656e7453657373696f6e496e6465780100101000000000046c205468652063757272656e742073657373696f6e20696e6465782e5841637469766556616c696461746f72496e64696365730100810b040008090120416c6c207468652076616c696461746f7273206163746976656c792070617274696369706174696e6720696e2070617261636861696e20636f6e73656e7375732eb020496e64696365732061726520696e746f207468652062726f616465722076616c696461746f72207365742e4c41637469766556616c696461746f724b6579730100850b0400085501205468652070617261636861696e206174746573746174696f6e206b657973206f66207468652076616c696461746f7273206163746976656c792070617274696369706174696e6720696e2070617261636861696e1d0120636f6e73656e7375732e20546869732073686f756c64206265207468652073616d65206c656e677468206173206041637469766556616c696461746f72496e6469636573602e4c416c6c6f77656452656c6179506172656e74730100890b140000000000046c20416c6c20616c6c6f7765642072656c61792d706172656e74732e0109050000002b3450617261496e636c7573696f6e013450617261496e636c7573696f6e04085631000104054502950b04001461012043616e646964617465732070656e64696e6720617661696c6162696c6974792062792060506172614964602e205468657920666f726d206120636861696e207374617274696e672066726f6d20746865206c61746573746c20696e636c756465642068656164206f662074686520706172612e610120557365206120646966666572656e742070726566697820706f73742d6d6967726174696f6e20746f2076312c2073696e636520746865207630206050656e64696e67417661696c6162696c697479602073746f72616765710120776f756c64206f74686572776973652068617665207468652065786163742073616d652070726566697820776869636820636f756c6420636175736520756e646566696e6564206265686176696f7572207768656e20646f696e673c20746865206d6967726174696f6e2e010d05019d0700019d0b2c3050617261496e686572656e74013050617261496e686572656e740820496e636c756465640000c8040018ec20576865746865722074686520706172617320696e686572656e742077617320696e636c756465642077697468696e207468697320626c6f636b2e0069012054686520604f7074696f6e3c28293e60206973206566666563746976656c7920612060626f6f6c602c20627574206974206e6576657220686974732073746f7261676520696e2074686520604e6f6e65602076617269616e74bc2064756520746f207468652067756172616e74656573206f66204652414d4527732073746f7261676520415049732e004901204966207468697320697320604e6f6e65602061742074686520656e64206f662074686520626c6f636b2c2077652070616e696320616e642072656e6465722074686520626c6f636b20696e76616c69642e304f6e436861696e566f7465730000a10b04000445012053637261706564206f6e20636861696e206461746120666f722065787472616374696e67207265736f6c7665642064697370757465732061732077656c6c206173206261636b696e6720766f7465732e011105000001b50b2d34506172615363686564756c65720134506172615363686564756c6572103c56616c696461746f7247726f7570730100b90b04001c6d0120416c6c207468652076616c696461746f722067726f7570732e204f6e6520666f72206561636820636f72652e20496e64696365732061726520696e746f206041637469766556616c696461746f727360202d206e6f74207468656d012062726f6164657220736574206f6620506f6c6b61646f742076616c696461746f72732c2062757420696e7374656164206a7573742074686520737562736574207573656420666f722070617261636861696e7320647572696e673820746869732073657373696f6e2e00490120426f756e643a20546865206e756d626572206f6620636f726573206973207468652073756d206f6620746865206e756d62657273206f662070617261636861696e7320616e6420706172617468726561646901206d756c7469706c65786572732e20526561736f6e61626c792c203130302d313030302e2054686520646f6d696e616e7420666163746f7220697320746865206e756d626572206f662076616c696461746f72733a20736166655020757070657220626f756e642061742031306b2e44417661696c6162696c697479436f7265730100bd0b0400187101204f6e6520656e74727920666f72206561636820617661696c6162696c69747920636f72652e2054686520692774682070617261636861696e2062656c6f6e677320746f20746865206927746820636f72652c207769746820746865f02072656d61696e696e6720636f72657320616c6c206265696e67206f6e2064656d616e642070617261636861696e206d756c7469706c65786572732e00d820426f756e64656420627920746865206d6178696d756d206f6620656974686572206f662074686573652074776f2076616c7565733ae42020202a20546865206e756d626572206f662070617261636861696e7320616e642070617261746872656164206d756c7469706c657865727345012020202a20546865206e756d626572206f662076616c696461746f727320646976696465642062792060636f6e66696775726174696f6e2e6d61785f76616c696461746f72735f7065725f636f7265602e4453657373696f6e5374617274426c6f636b01001010000000001c69012054686520626c6f636b206e756d626572207768657265207468652073657373696f6e207374617274206f636375727265642e205573656420746f20747261636b20686f77206d616e792067726f757020726f746174696f6e733c2068617665206f636375727265642e005501204e6f7465207468617420696e2074686520636f6e74657874206f662070617261636861696e73206d6f64756c6573207468652073657373696f6e206368616e6765206973207369676e616c656420647572696e6761012074686520626c6f636b20616e6420656e61637465642061742074686520656e64206f662074686520626c6f636b20286174207468652066696e616c697a6174696f6e2073746167652c20746f206265206578616374292e5901205468757320666f7220616c6c20696e74656e747320616e6420707572706f7365732074686520656666656374206f66207468652073657373696f6e206368616e6765206973206f6273657276656420617420746865650120626c6f636b20666f6c6c6f77696e67207468652073657373696f6e206368616e67652c20626c6f636b206e756d626572206f66207768696368207765207361766520696e20746869732073746f726167652076616c75652e28436c61696d51756575650100cd0b04000c5901204f6e6520656e74727920666f72206561636820617661696c6162696c69747920636f72652e20546865206056656344657175656020726570726573656e7473207468652061737369676e6d656e747320746f2062655101207363686564756c6564206f6e207468617420636f72652e205468652076616c756520636f6e7461696e656420686572652077696c6c206e6f742062652076616c69642061667465722074686520656e64206f666901206120626c6f636b2e2052756e74696d6520415049732073686f756c64206265207573656420746f2064657465726d696e65207363686564756c656420636f72657320666f7220746865207570636f6d696e6720626c6f636b2e000000002e145061726173011450617261735440507666416374697665566f74654d6170000104054d05dd0b040010b420416c6c2063757272656e746c792061637469766520505646207072652d636865636b696e6720766f7465732e002c20496e76617269616e743a7501202d20546865726520617265206e6f20505646207072652d636865636b696e6720766f74657320746861742065786973747320696e206c69737420627574206e6f7420696e207468652073657420616e6420766963652076657273612e44507666416374697665566f74654c6973740100ed0b040004350120546865206c697374206f6620616c6c2063757272656e746c79206163746976652050564620766f7465732e20417578696c6961727920746f2060507666416374697665566f74654d6170602e2850617261636861696e730100f10b040010690120416c6c206c6561736520686f6c64696e672070617261636861696e732e204f72646572656420617363656e64696e672062792060506172614964602e204f6e2064656d616e642070617261636861696e7320617265206e6f742820696e636c756465642e00e820436f6e7369646572207573696e6720746865205b6050617261636861696e734361636865605d2074797065206f66206d6f64696679696e672e38506172614c6966656379636c6573000104054502f50b040004bc205468652063757272656e74206c6966656379636c65206f66206120616c6c206b6e6f776e2050617261204944732e1448656164730001040545026d05040004a02054686520686561642d64617461206f66206576657279207265676973746572656420706172612e444d6f7374526563656e74436f6e746578740001040545021004000429012054686520636f6e74657874202872656c61792d636861696e20626c6f636b206e756d62657229206f6620746865206d6f737420726563656e742070617261636861696e20686561642e3c43757272656e74436f6465486173680001040545024d0504000cb4205468652076616c69646174696f6e20636f64652068617368206f66206576657279206c69766520706172612e00e420436f72726573706f6e64696e6720636f64652063616e206265207265747269657665642077697468205b60436f6465427948617368605d2e3050617374436f64654861736800010405f90b4d0504001061012041637475616c207061737420636f646520686173682c20696e646963617465642062792074686520706172612069642061732077656c6c2061732074686520626c6f636b206e756d6265722061742077686963682069744420626563616d65206f757464617465642e00e420436f72726573706f6e64696e6720636f64652063616e206265207265747269657665642077697468205b60436f6465427948617368605d2e3050617374436f64654d657461010104054502fd0b0800000c4901205061737420636f6465206f662070617261636861696e732e205468652070617261636861696e73207468656d73656c766573206d6179206e6f74206265207265676973746572656420616e796d6f72652c49012062757420776520616c736f206b65657020746865697220636f6465206f6e2d636861696e20666f72207468652073616d6520616d6f756e74206f662074696d65206173206f7574646174656420636f6465b020746f206b65657020697420617661696c61626c6520666f7220617070726f76616c20636865636b6572732e3c50617374436f64655072756e696e670100090c04001869012057686963682070617261732068617665207061737420636f64652074686174206e65656473207072756e696e6720616e64207468652072656c61792d636861696e20626c6f636b2061742077686963682074686520636f6465690120776173207265706c616365642e204e6f746520746861742074686973206973207468652061637475616c20686569676874206f662074686520696e636c7564656420626c6f636b2c206e6f74207468652065787065637465643d01206865696768742061742077686963682074686520636f6465207570677261646520776f756c64206265206170706c6965642c20616c74686f7567682074686579206d617920626520657175616c2e6d01205468697320697320746f20656e737572652074686520656e7469726520616363657074616e636520706572696f6420697320636f76657265642c206e6f7420616e206f666673657420616363657074616e636520706572696f646d01207374617274696e672066726f6d207468652074696d65206174207768696368207468652070617261636861696e20706572636569766573206120636f6465207570677261646520617320686176696e67206f636375727265642e5501204d756c7469706c6520656e747269657320666f7220612073696e676c65207061726120617265207065726d69747465642e204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e48467574757265436f64655570677261646573000104054502100400103d012054686520626c6f636b206e756d6265722061742077686963682074686520706c616e6e656420636f6465206368616e676520697320657870656374656420666f7220612070617261636861696e2e00650120546865206368616e67652077696c6c206265206170706c696564206166746572207468652066697273742070617261626c6f636b20666f72207468697320494420696e636c75646564207768696368206578656375746573190120696e2074686520636f6e74657874206f6620612072656c617920636861696e20626c6f636b20776974682061206e756d626572203e3d206065787065637465645f6174602e50467574757265436f6465557067726164657341740100090c040020ac20546865206c697374206f66207570636f6d696e672066757475726520636f64652075706772616465732e006d012045616368206974656d20697320612070616972206f66207468652070617261636861696e20616e642074686520657870656374656420626c6f636b2061742077686963682074686520757067726164652073686f756c642062655101206170706c6965642e2054686520757067726164652077696c6c206265206170706c6965642061742074686520676976656e2072656c617920636861696e20626c6f636b2e20496e20636f6e747261737420746f7501205b60467574757265436f64655570677261646573605d207468697320636f646520757067726164652077696c6c206265206170706c696564207265676172646c657373207468652070617261636861696e206d616b696e6720616e79442070726f6772657373206f72206e6f742e008c204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e38467574757265436f6465486173680001040545024d0504000c9c205468652061637475616c2066757475726520636f64652068617368206f66206120706172612e00e420436f72726573706f6e64696e6720636f64652063616e206265207265747269657665642077697468205b60436f6465427948617368605d2e5055706772616465476f41686561645369676e616c0001040545020d0c040028750120546869732069732075736564206279207468652072656c61792d636861696e20746f20636f6d6d756e696361746520746f20612070617261636861696e206120676f2d6168656164207769746820696e2074686520757067726164652c2070726f6365647572652e00750120546869732076616c756520697320616273656e74207768656e20746865726520617265206e6f207570677261646573207363686564756c6564206f7220647572696e67207468652074696d65207468652072656c617920636861696e550120706572666f726d732074686520636865636b732e20497420697320736574206174207468652066697273742072656c61792d636861696e20626c6f636b207768656e2074686520636f72726573706f6e64696e6775012070617261636861696e2063616e207377697463682069747320757067726164652066756e6374696f6e2e20417320736f6f6e206173207468652070617261636861696e277320626c6f636b20697320696e636c756465642c20746865702076616c7565206765747320726573657420746f20604e6f6e65602e006501204e4f544520746861742074686973206669656c6420697320757365642062792070617261636861696e7320766961206d65726b6c652073746f726167652070726f6f66732c207468657265666f7265206368616e67696e67c42074686520666f726d61742077696c6c2072657175697265206d6967726174696f6e206f662070617261636861696e732e60557067726164655265737472696374696f6e5369676e616c000104054502110c040024690120546869732069732075736564206279207468652072656c61792d636861696e20746f20636f6d6d756e6963617465207468617420746865726520617265207265737472696374696f6e7320666f7220706572666f726d696e677c20616e207570677261646520666f7220746869732070617261636861696e2e0059012054686973206d617920626520612062656361757365207468652070617261636861696e20776169747320666f7220746865207570677261646520636f6f6c646f776e20746f206578706972652e20416e6f746865726d0120706f74656e7469616c207573652063617365206973207768656e2077652077616e7420746f20706572666f726d20736f6d65206d61696e74656e616e63652028737563682061732073746f72616765206d6967726174696f6e29e020776520636f756c6420726573747269637420757067726164657320746f206d616b65207468652070726f636573732073696d706c65722e006501204e4f544520746861742074686973206669656c6420697320757365642062792070617261636861696e7320766961206d65726b6c652073746f726167652070726f6f66732c207468657265666f7265206368616e67696e67c42074686520666f726d61742077696c6c2072657175697265206d6967726174696f6e206f662070617261636861696e732e4055706772616465436f6f6c646f776e730100090c04000c510120546865206c697374206f662070617261636861696e73207468617420617265206177616974696e6720666f722074686569722075706772616465207265737472696374696f6e20746f20636f6f6c646f776e2e008c204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e405570636f6d696e6755706772616465730100090c0400189020546865206c697374206f66207570636f6d696e6720636f64652075706772616465732e0071012045616368206974656d20697320612070616972206f66207768696368207061726120706572666f726d73206120636f6465207570677261646520616e642061742077686963682072656c61792d636861696e20626c6f636b206974402069732065787065637465642061742e008c204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e30416374696f6e7351756575650101040510f10b04000415012054686520616374696f6e7320746f20706572666f726d20647572696e6720746865207374617274206f6620612073706563696669632073657373696f6e20696e6465782e505570636f6d696e67506172617347656e65736973000104054502d505040010a0205570636f6d696e6720706172617320696e7374616e74696174696f6e20617267756d656e74732e006501204e4f5445207468617420616674657220505646207072652d636865636b696e6720697320656e61626c65642074686520706172612067656e65736973206172672077696c6c2068617665206974277320636f646520736574610120746f20656d7074792e20496e73746561642c2074686520636f64652077696c6c20626520736176656420696e746f207468652073746f726167652072696768742061776179207669612060436f6465427948617368602e38436f646542794861736852656673010104064d0510100000000004290120546865206e756d626572206f66207265666572656e6365206f6e207468652076616c69646174696f6e20636f646520696e205b60436f6465427948617368605d2073746f726167652e28436f6465427948617368000104064d056905040010902056616c69646174696f6e20636f64652073746f7265642062792069747320686173682e00310120546869732073746f7261676520697320636f6e73697374656e742077697468205b60467574757265436f646548617368605d2c205b6043757272656e74436f646548617368605d20616e6448205b6050617374436f646548617368605d2e019d0501ad070440556e7369676e65645072696f726974793020ffffffffffffffff0001150c2f2c496e697469616c697a6572012c496e697469616c697a65720838486173496e697469616c697a65640000c804002021012057686574686572207468652070617261636861696e73206d6f64756c65732068617665206265656e20696e697469616c697a65642077697468696e207468697320626c6f636b2e0025012053656d616e746963616c6c7920612060626f6f6c602c2062757420746869732067756172616e746565732069742073686f756c64206e65766572206869742074686520747269652c6901206173207468697320697320636c656172656420696e20606f6e5f66696e616c697a656020616e64204672616d65206f7074696d697a657320604e6f6e65602076616c75657320746f20626520656d7074792076616c7565732e00710120417320612060626f6f6c602c20607365742866616c7365296020616e64206072656d6f766528296020626f7468206c65616420746f20746865206e6578742060676574282960206265696e672066616c73652c20627574206f6e657501206f66207468656d2077726974657320746f20746865207472696520616e64206f6e6520646f6573206e6f742e205468697320636f6e667573696f6e206d616b657320604f7074696f6e3c28293e60206d6f7265207375697461626c659020666f72207468652073656d616e74696373206f662074686973207661726961626c652e58427566666572656453657373696f6e4368616e6765730100190c04001c59012042756666657265642073657373696f6e206368616e67657320616c6f6e6720776974682074686520626c6f636b206e756d62657220617420776869636820746865792073686f756c64206265206170706c6965642e005d01205479706963616c6c7920746869732077696c6c20626520656d707479206f72206f6e6520656c656d656e74206c6f6e672e2041706172742066726f6d20746861742074686973206974656d206e65766572206869747334207468652073746f726167652e00690120486f776576657220746869732069732061206056656360207265676172646c65737320746f2068616e646c6520766172696f757320656467652063617365732074686174206d6179206f636375722061742072756e74696d65c0207570677261646520626f756e646172696573206f7220696620676f7665726e616e636520696e74657276656e65732e01a505000000300c446d70010c446d700c54446f776e776172644d657373616765517565756573010104054502210c040004d02054686520646f776e77617264206d657373616765732061646472657373656420666f722061206365727461696e20706172612e64446f776e776172644d65737361676551756575654865616473010104054502348000000000000000000000000000000000000000000000000000000000000000001c25012041206d617070696e6720746861742073746f7265732074686520646f776e77617264206d657373616765207175657565204d5143206865616420666f72206561636820706172612e00902045616368206c696e6b20696e207468697320636861696e20686173206120666f726d3a78206028707265765f686561642c20422c2048284d2929602c207768657265e8202d2060707265765f68656164603a206973207468652070726576696f757320686561642068617368206f72207a65726f206966206e6f6e652e2101202d206042603a206973207468652072656c61792d636861696e20626c6f636b206e756d62657220696e2077686963682061206d6573736167652077617320617070656e6465642ed4202d206048284d29603a206973207468652068617368206f6620746865206d657373616765206265696e6720617070656e6465642e4444656c6976657279466565466163746f720101040545024d0740000064a7b3b6e00d000000000000000004c42054686520666163746f7220746f206d756c7469706c792074686520626173652064656c6976657279206665652062792e00000000311048726d70011048726d70305c48726d704f70656e4368616e6e656c526571756573747300010405ad05290c040018bc2054686520736574206f662070656e64696e672048524d50206f70656e206368616e6e656c2072657175657374732e00c02054686520736574206973206163636f6d70616e6965642062792061206c69737420666f7220697465726174696f6e2e002c20496e76617269616e743a3d01202d20546865726520617265206e6f206368616e6e656c7320746861742065786973747320696e206c69737420627574206e6f7420696e207468652073657420616e6420766963652076657273612e6c48726d704f70656e4368616e6e656c52657175657374734c69737401002d0c0400006c48726d704f70656e4368616e6e656c52657175657374436f756e740101040545021010000000000c65012054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732061726520696e69746961746564206279206120676976656e2073656e64657220706172612e590120496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d732074686174206861730501206028582c205f296020617320746865206e756d626572206f66206048726d704f70656e4368616e6e656c52657175657374436f756e746020666f72206058602e7c48726d7041636365707465644368616e6e656c52657175657374436f756e740101040545021010000000000c71012054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732077657265206163636570746564206279206120676976656e20726563697069656e7420706172612e6d0120496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d732060285f2c20582960207769746855012060636f6e6669726d6564602073657420746f20747275652c20617320746865206e756d626572206f66206048726d7041636365707465644368616e6e656c52657175657374436f756e746020666f72206058602e6048726d70436c6f73654368616e6e656c526571756573747300010405ad05c804001c7101204120736574206f662070656e64696e672048524d5020636c6f7365206368616e6e656c20726571756573747320746861742061726520676f696e6720746f20626520636c6f73656420647572696e67207468652073657373696f6e2101206368616e67652e205573656420666f7220636865636b696e67206966206120676976656e206368616e6e656c206973207265676973746572656420666f7220636c6f737572652e00c02054686520736574206973206163636f6d70616e6965642062792061206c69737420666f7220697465726174696f6e2e002c20496e76617269616e743a3d01202d20546865726520617265206e6f206368616e6e656c7320746861742065786973747320696e206c69737420627574206e6f7420696e207468652073657420616e6420766963652076657273612e7048726d70436c6f73654368616e6e656c52657175657374734c69737401002d0c0400003848726d7057617465726d61726b7300010405450210040010b8205468652048524d502077617465726d61726b206173736f6369617465642077697468206561636820706172612e2c20496e76617269616e743a5501202d2065616368207061726120605060207573656420686572652061732061206b65792073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612c20202073657373696f6e2e3048726d704368616e6e656c7300010405ad05310c04000cb42048524d50206368616e6e656c2064617461206173736f6369617465642077697468206561636820706172612e2c20496e76617269616e743a7501202d2065616368207061727469636970616e7420696e20746865206368616e6e656c2073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612073657373696f6e2e6048726d70496e67726573734368616e6e656c73496e646578010104054502f10b040034710120496e67726573732f65677265737320696e646578657320616c6c6f7720746f2066696e6420616c6c207468652073656e6465727320616e642072656365697665727320676976656e20746865206f70706f7369746520736964652e1420492e652e0021012028612920696e677265737320696e64657820616c6c6f777320746f2066696e6420616c6c207468652073656e6465727320666f72206120676976656e20726563697069656e742e1d01202862292065677265737320696e64657820616c6c6f777320746f2066696e6420616c6c2074686520726563697069656e747320666f72206120676976656e2073656e6465722e003020496e76617269616e74733a5101202d20666f72206561636820696e677265737320696e64657820656e74727920666f72206050602065616368206974656d2060496020696e2074686520696e6465782073686f756c642070726573656e7420696e782020206048726d704368616e6e656c7360206173206028492c205029602e4d01202d20666f7220656163682065677265737320696e64657820656e74727920666f72206050602065616368206974656d2060456020696e2074686520696e6465782073686f756c642070726573656e7420696e782020206048726d704368616e6e656c7360206173206028502c204529602e0101202d2074686572652073686f756c64206265206e6f206f746865722064616e676c696e67206368616e6e656c7320696e206048726d704368616e6e656c73602e68202d2074686520766563746f72732061726520736f727465642e5c48726d704567726573734368616e6e656c73496e646578010104054502f10b0400004c48726d704368616e6e656c436f6e74656e747301010405ad05350c040008ac2053746f7261676520666f7220746865206d6573736167657320666f722065616368206368616e6e656c2e650120496e76617269616e743a2063616e6e6f74206265206e6f6e2d656d7074792069662074686520636f72726573706f6e64696e67206368616e6e656c20696e206048726d704368616e6e656c736020697320604e6f6e65602e4848726d704368616e6e656c446967657374730101040545023d0c0400186901204d61696e7461696e732061206d617070696e6720746861742063616e206265207573656420746f20616e7377657220746865207175657374696f6e3a20576861742070617261732073656e742061206d657373616765206174e42074686520676976656e20626c6f636b206e756d62657220666f72206120676976656e2072656365697665722e20496e76617269616e74733aa8202d2054686520696e6e657220605665633c5061726149643e60206973206e6576657220656d7074792ee8202d2054686520696e6e657220605665633c5061726149643e602063616e6e6f742073746f72652074776f2073616d652060506172614964602e6d01202d20546865206f7574657220766563746f7220697320736f7274656420617363656e64696e6720627920626c6f636b206e756d62657220616e642063616e6e6f742073746f72652074776f206974656d732077697468207468655420202073616d6520626c6f636b206e756d6265722e01a90501b1070001450c333c5061726153657373696f6e496e666f013c5061726153657373696f6e496e666f145041737369676e6d656e744b657973556e736166650100490c04000ca42041737369676e6d656e74206b65797320666f72207468652063757272656e742073657373696f6e2e6d01204e6f7465207468617420746869732041504920697320707269766174652064756520746f206974206265696e672070726f6e6520746f20276f66662d62792d6f6e65272061742073657373696f6e20626f756e6461726965732eac205768656e20696e20646f7562742c20757365206053657373696f6e73602041504920696e73746561642e544561726c6965737453746f72656453657373696f6e010010100000000004010120546865206561726c696573742073657373696f6e20666f722077686963682070726576696f75732073657373696f6e20696e666f2069732073746f7265642e2053657373696f6e7300010406104d0c04000ca42053657373696f6e20696e666f726d6174696f6e20696e206120726f6c6c696e672077696e646f772e35012053686f756c64206861766520616e20656e74727920696e2072616e676520604561726c6965737453746f72656453657373696f6e2e2e3d43757272656e7453657373696f6e496e646578602e750120446f6573206e6f74206861766520616e7920656e7472696573206265666f7265207468652073657373696f6e20696e64657820696e207468652066697273742073657373696f6e206368616e6765206e6f74696669636174696f6e2e2c4163636f756e744b6579730001040610a9010400047101205468652076616c696461746f72206163636f756e74206b657973206f66207468652076616c696461746f7273206163746976656c792070617274696369706174696e6720696e2070617261636861696e20636f6e73656e7375732e5453657373696f6e4578656375746f72506172616d730001040610ed04040004c4204578656375746f7220706172616d657465722073657420666f72206120676976656e2073657373696f6e20696e6465780000000034345061726173446973707574657301345061726173446973707574657314444c6173745072756e656453657373696f6e000010040008010120546865206c617374207072756e65642073657373696f6e2c20696620616e792e20416c6c20646174612073746f7265642062792074686973206d6f64756c6554207265666572656e6365732073657373696f6e732e2044697370757465730001080502590c5d0c040004050120416c6c206f6e676f696e67206f7220636f6e636c7564656420646973707574657320666f7220746865206c617374207365766572616c2073657373696f6e732e444261636b6572734f6e44697370757465730001080502590c610c0400089c204261636b696e6720766f7465732073746f72656420666f72206561636820646973707574652e8c20546869732073746f72616765206973207573656420666f7220736c617368696e672e20496e636c756465640001080502590c10040008450120416c6c20696e636c7564656420626c6f636b73206f6e2074686520636861696e2c2061732077656c6c2061732074686520626c6f636b206e756d62657220696e207468697320636861696e207468617459012073686f756c64206265207265766572746564206261636b20746f206966207468652063616e64696461746520697320646973707574656420616e642064657465726d696e656420746f20626520696e76616c69642e1846726f7a656e01005504040010110120576865746865722074686520636861696e2069732066726f7a656e2e2053746172747320617320604e6f6e65602e205768656e20746869732069732060536f6d65602c35012074686520636861696e2077696c6c206e6f742061636365707420616e79206e65772070617261636861696e20626c6f636b7320666f72206261636b696e67206f7220696e636c7573696f6e2c090120616e64206974732076616c756520696e6469636174657320746865206c6173742076616c696420626c6f636b206e756d62657220696e2074686520636861696e2ef82049742063616e206f6e6c7920626520736574206261636b20746f20604e6f6e656020627920676f7665726e616e636520696e74657276656e74696f6e2e01b10501b5070001650c35345061726173536c617368696e6701345061726173536c617368696e670840556e6170706c696564536c61736865730001080502590c690c040004902056616c696461746f72732070656e64696e67206469737075746520736c61736865732e4856616c696461746f72536574436f756e747300010405101004000484206056616c696461746f72536574436f756e7460207065722073657373696f6e2e01b505000001790c36684f6e44656d616e6441737369676e6d656e7450726f766964657201684f6e44656d616e6441737369676e6d656e7450726f76696465721038506172614964416666696e6974790001040545027d0c04000c7101204d617073206120605061726149646020746f2060436f7265496e6465786020616e64206b6565707320747261636b206f6620686f77206d616e792061737369676e6d656e747320746865207363686564756c65722068617320696e5d012069742773206c6f6f6b61686561642e204b656570696e6720747261636b206f66207468697320616666696e6974792070726576656e747320706172616c6c656c20657865637574696f6e206f66207468652073616d659c206050617261496460206f6e2074776f206f72206d6f72652060436f7265496e6465786065732e2c51756575655374617475730100810c64000064a7b3b6e00d000000000000000000000000000000000004dc204f766572616c6c20737461747573206f662071756575652028626f74682066726565202b20616666696e69747920656e7472696573292c46726565456e74726965730100950c0400046101205072696f7269747920717565756520666f7220616c6c206f726465727320776869636820646f6e27742079657420286f72206e6f7420616e79206d6f726529206861766520616e7920636f726520616666696e6974792e3c416666696e697479456e747269657301010405a507950c040004490120517565756520656e74726965732074686174206172652063757272656e746c7920626f756e6420746f206120706172746963756c617220636f72652064756520746f20636f726520616666696e6974792e01c50501c107044c5472616666696344656661756c7456616c75654d0740000064a7b3b6e00d000000000000000004cc205468652064656661756c742076616c756520666f72207468652073706f742074726166666963206d756c7469706c6965722e01a10c3868436f726574696d6541737369676e6d656e7450726f76696465720168436f726574696d6541737369676e6d656e7450726f76696465720834436f72655363686564756c657300010404a50ca90c0400106c205363686564756c65642061737369676e6d656e7420736574732e006d012041737369676e6d656e7473206173206f662074686520676976656e20626c6f636b206e756d6265722e20546865792077696c6c20676f20696e746f207374617465206f6e63652074686520626c6f636b206e756d626572206973d020726561636865642028616e64207265706c6163652077686174657665722077617320696e207468657265206265666f7265292e3c436f726544657363726970746f727301010404a507ad0c08000010a02041737369676e6d656e7473207768696368206172652063757272656e746c79206163746976652e00690120546865792077696c6c206265207069636b65642066726f6d206050656e64696e6741737369676e6d656e747360206f6e636520776520726561636820746865207363686564756c656420626c6f636b206e756d62657220696e58206050656e64696e6741737369676e6d656e7473602e00000001cd0c392452656769737472617201245265676973747261720c2c50656e64696e67537761700001040545024502040004642050656e64696e672073776170206f7065726174696f6e732e145061726173000104054502d10c040010050120416d6f756e742068656c64206f6e206465706f73697420666f722065616368207061726120616e6420746865206f726967696e616c206465706f7369746f722e0071012054686520676976656e206163636f756e7420494420697320726573706f6e7369626c6520666f72207265676973746572696e672074686520636f646520616e6420696e697469616c206865616420646174612c20627574206d61795501206f6e6c7920646f20736f2069662069742069736e27742079657420726567697374657265642e2028416674657220746861742c206974277320757020746f20676f7665726e616e636520746f20646f20736f2e29384e65787446726565506172614964010045021000000000046020546865206e65787420667265652060506172614964602e01c90501c507082c506172614465706f73697418400040e59c30120000000000000000000008d420546865206465706f73697420746f206265207061696420746f2072756e2061206f6e2d64656d616e642070617261636861696e2e3d0120546869732073686f756c6420696e636c7564652074686520636f737420666f722073746f72696e67207468652067656e65736973206865616420616e642076616c69646174696f6e20636f64652e48446174614465706f73697450657242797465184080f0fa0200000000000000000000000004c420546865206465706f73697420746f20626520706169642070657220627974652073746f726564206f6e20636861696e2e01d90c3c14536c6f74730114536c6f747304184c6561736573010104054502dd0c040040150120416d6f756e74732068656c64206f6e206465706f73697420666f7220656163682028706f737369626c792066757475726529206c65617365642070617261636861696e2e006101205468652061637475616c20616d6f756e74206c6f636b6564206f6e2069747320626568616c6620627920616e79206163636f756e7420617420616e792074696d6520697320746865206d6178696d756d206f66207468652901207365636f6e642076616c756573206f6620746865206974656d7320696e2074686973206c6973742077686f73652066697273742076616c756520697320746865206163636f756e742e00610120546865206669727374206974656d20696e20746865206c6973742069732074686520616d6f756e74206c6f636b656420666f72207468652063757272656e74204c6561736520506572696f642e20466f6c6c6f77696e67b0206974656d732061726520666f72207468652073756273657175656e74206c6561736520706572696f64732e006101205468652064656661756c742076616c75652028616e20656d707479206c6973742920696d706c6965732074686174207468652070617261636861696e206e6f206c6f6e6765722065786973747320286f72206e65766572b42065786973746564292061732066617220617320746869732070616c6c657420697320636f6e6365726e65642e00510120496620612070617261636861696e20646f65736e2774206578697374202a7965742a20627574206973207363686564756c656420746f20657869737420696e20746865206675747572652c207468656e20697461012077696c6c206265206c6566742d7061646465642077697468206f6e65206f72206d6f726520604e6f6e65607320746f2064656e6f74652074686520666163742074686174206e6f7468696e672069732068656c64206f6e5d01206465706f73697420666f7220746865206e6f6e2d6578697374656e7420636861696e2063757272656e746c792c206275742069732068656c6420617420736f6d6520706f696e7420696e20746865206675747572652e00dc20497420697320696c6c6567616c20666f72206120604e6f6e65602076616c756520746f20747261696c20696e20746865206c6973742e01cd0501c907082c4c65617365506572696f6410100027060004dc20546865206e756d626572206f6620626c6f636b73206f76657220776869636820612073696e676c6520706572696f64206c617374732e2c4c656173654f666673657410100000000004d420546865206e756d626572206f6620626c6f636b7320746f206f66667365742065616368206c6561736520706572696f642062792e01e10c3d4050617261735375646f577261707065720001d105000001e50c3e2041756374696f6e73012041756374696f6e73103841756374696f6e436f756e7465720100101000000000048c204e756d626572206f662061756374696f6e73207374617274656420736f206661722e2c41756374696f6e496e666f0000e0040014f820496e666f726d6174696f6e2072656c6174696e6720746f207468652063757272656e742061756374696f6e2c206966207468657265206973206f6e652e00450120546865206669727374206974656d20696e20746865207475706c6520697320746865206c6561736520706572696f6420696e646578207468617420746865206669727374206f662074686520666f7572510120636f6e746967756f7573206c6561736520706572696f6473206f6e2061756374696f6e20697320666f722e20546865207365636f6e642069732074686520626c6f636b206e756d626572207768656e207468655d012061756374696f6e2077696c6c2022626567696e20746f20656e64222c20692e652e2074686520666972737420626c6f636b206f662074686520456e64696e6720506572696f64206f66207468652061756374696f6e2e3c5265736572766564416d6f756e747300010405e90c18040008310120416d6f756e74732063757272656e746c7920726573657276656420696e20746865206163636f756e7473206f662074686520626964646572732063757272656e746c792077696e6e696e673820287375622d2972616e6765732e1c57696e6e696e670001040510ed0c04000c6101205468652077696e6e696e67206269647320666f722065616368206f66207468652031302072616e67657320617420656163682073616d706c6520696e207468652066696e616c20456e64696e6720506572696f64206f664901207468652063757272656e742061756374696f6e2e20546865206d61702773206b65792069732074686520302d626173656420696e64657820696e746f207468652053616d706c652053697a652e205468651d012066697273742073616d706c65206f662074686520656e64696e6720706572696f6420697320303b20746865206c617374206973206053616d706c652053697a65202d2031602e01d10601cd071030456e64696e67506572696f64101040190100041d0120546865206e756d626572206f6620626c6f636b73206f76657220776869636820616e2061756374696f6e206d617920626520726574726f6163746976656c7920656e6465642e3053616d706c654c656e6774681010140000000cf020546865206c656e677468206f6620656163682073616d706c6520746f2074616b6520647572696e672074686520656e64696e6720706572696f642e00d42060456e64696e67506572696f6460202f206053616d706c654c656e67746860203d20546f74616c2023206f662053616d706c657338536c6f7452616e6765436f756e74101024000000004c4c65617365506572696f6473506572536c6f741010080000000001f90c3f2443726f77646c6f616e012443726f77646c6f616e101446756e6473000104054502fd0c0400046820496e666f206f6e20616c6c206f66207468652066756e64732e204e657752616973650100f10b0400085501205468652066756e64732074686174206861766520686164206164646974696f6e616c20636f6e747269627574696f6e7320647572696e6720746865206c61737420626c6f636b2e20546869732069732075736564150120696e206f7264657220746f2064657465726d696e652077686963682066756e64732073686f756c64207375626d6974206e6577206f72207570646174656420626964732e30456e64696e6773436f756e74010010100000000004290120546865206e756d626572206f662061756374696f6e732074686174206861766520656e746572656420696e746f20746865697220656e64696e6720706572696f6420736f206661722e344e65787446756e64496e646578010010100000000004a820547261636b657220666f7220746865206e65787420617661696c61626c652066756e6420696e64657801d90601d1070c2050616c6c65744964c50a2070792f6366756e64080d01206050616c6c657449646020666f72207468652063726f77646c6f616e2070616c6c65742e20416e20617070726f7072696174652076616c756520636f756c6420626564206050616c6c65744964282a622270792f6366756e642229603c4d696e436f6e747269627574696f6e18400010a5d4e8000000000000000000000008610120546865206d696e696d756d20616d6f756e742074686174206d617920626520636f6e747269627574656420696e746f20612063726f77646c6f616e2e2053686f756c6420616c6d6f7374206365727461696e6c792062657c206174206c6561737420604578697374656e7469616c4465706f736974602e3c52656d6f76654b6579734c696d69741010f401000004e4204d6178206e756d626572206f662073746f72616765206b65797320746f2072656d6f7665207065722065787472696e7369632063616c6c2e01050d403441737369676e6564536c6f7473013441737369676e6564536c6f74731c385065726d616e656e74536c6f7473000104054502e00400041d012041737369676e6564207065726d616e656e7420736c6f74732c2077697468207468656972207374617274206c6561736520706572696f642c20616e64206475726174696f6e2e485065726d616e656e74536c6f74436f756e74010010100000000004c4204e756d626572206f662061737369676e65642028616e642061637469766529207065726d616e656e7420736c6f74732e3854656d706f72617279536c6f7473000104054502090d040004682041737369676e65642074656d706f7261727920736c6f74732e4854656d706f72617279536c6f74436f756e7401001010000000000490204e756d626572206f662061737369676e65642074656d706f7261727920736c6f74732e6041637469766554656d706f72617279536c6f74436f756e74010010100000000004fc204e756d626572206f66206163746976652074656d706f7261727920736c6f747320696e2063757272656e7420736c6f74206c6561736520706572696f642e444d617854656d706f72617279536c6f7473010010100000000004e42020546865206d6178206e756d626572206f662074656d706f7261727920736c6f747320746861742063616e2062652061737369676e65642e444d61785065726d616e656e74536c6f7473010010100000000004e020546865206d6178206e756d626572206f66207065726d616e656e7420736c6f747320746861742063616e2062652061737369676e65642e01e50601d5070c785065726d616e656e74536c6f744c65617365506572696f644c656e67746810101a00000004f820546865206e756d626572206f66206c6561736520706572696f64732061207065726d616e656e742070617261636861696e20736c6f74206c617374732e7854656d706f72617279536c6f744c65617365506572696f644c656e67746810100100000004f820546865206e756d626572206f66206c6561736520706572696f647320612074656d706f726172792070617261636861696e20736c6f74206c617374732e784d617854656d706f72617279536c6f745065724c65617365506572696f6410100500000004150120546865206d6178206e756d626572206f662074656d706f7261727920736c6f747320746f206265207363686564756c656420706572206c6561736520706572696f64732e010d0d4120436f726574696d650001ed0601d907042042726f6b657249641010ed03000004ac2054686520506172614964206f66207468652062726f6b65722073797374656d2070617261636861696e2e01110d422458636d50616c6c6574012458636d50616c6c657430305175657279436f756e746572010030200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040230150d0400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040634101000000000106820546865206578697374696e672061737365742074726170732e006101204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e65642060417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00001004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502290d10040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502290d30040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502290d2d0d04000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100310d04000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e00003d0d0400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c050202450d490d040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c65730001040200590d040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e646564010020040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e01010701dd070001650d63304d657373616765517565756501304d65737361676551756575650c30426f6f6b5374617465466f72010104054107690d74000000000000000000000000000000000000000000000000000000000004cc2054686520696e646578206f662074686520666972737420616e64206c61737420286e6f6e2d656d707479292070616765732e2c536572766963654865616400004107040004bc20546865206f726967696e2061742077686963682077652073686f756c6420626567696e20736572766963696e672e1450616765730001080505750d790d0400048820546865206d6170206f66207061676520696e646963657320746f2070616765732e013d0701e50710204865617053697a65101000000200143d01205468652073697a65206f662074686520706167653b207468697320696d706c69657320746865206d6178696d756d206d6573736167652073697a652077686963682063616e2062652073656e742e005901204120676f6f642076616c756520646570656e6473206f6e20746865206578706563746564206d6573736167652073697a65732c20746865697220776569676874732c207468652077656967687420746861742069735d0120617661696c61626c6520666f722070726f63657373696e67207468656d20616e6420746865206d6178696d616c206e6565646564206d6573736167652073697a652e20546865206d6178696d616c206d65737361676511012073697a6520697320736c696768746c79206c6f776572207468616e207468697320617320646566696e6564206279205b604d61784d6573736167654c656e4f66605d2e204d61785374616c651010300000000c5d0120546865206d6178696d756d206e756d626572206f66207374616c652070616765732028692e652e206f66206f766572776569676874206d657373616765732920616c6c6f776564206265666f72652063756c6c696e6751012063616e2068617070656e2e204f6e636520746865726520617265206d6f7265207374616c65207061676573207468616e20746869732c207468656e20686973746f726963616c207061676573206d6179206265fc2064726f707065642c206576656e206966207468657920636f6e7461696e20756e70726f636573736564206f766572776569676874206d657373616765732e3453657276696365576569676874910740010700a0db215d1333333333333333331841012054686520616d6f756e74206f66207765696768742028696620616e79292077686963682073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f72a820736572766963696e6720656e717565756564206974656d7320606f6e5f696e697469616c697a65602e00fc2054686973206d6179206265206c65676974696d6174656c7920604e6f6e656020696e207468652063617365207468617420796f752077696c6c2063616c6c5d012060536572766963655175657565733a3a736572766963655f71756575657360206d616e75616c6c79206f7220736574205b6053656c663a3a49646c654d617853657276696365576569676874605d20746f2068617665542069742072756e20696e20606f6e5f69646c65602e5049646c654d617853657276696365576569676874910740010700a0db215d133333333333333333145d0120546865206d6178696d756d20616d6f756e74206f66207765696768742028696620616e792920746f20626520757365642066726f6d2072656d61696e696e672077656967687420606f6e5f69646c656020776869636841012073686f756c642062652070726f766964656420746f20746865206d65737361676520717565756520666f7220736572766963696e6720656e717565756564206974656d7320606f6e5f69646c65602e3d012055736566756c20666f722070617261636861696e7320746f2070726f63657373206d65737361676573206174207468652073616d6520626c6f636b2074686579206172652072656365697665642e00290120496620604e6f6e65602c2069742077696c6c206e6f742063616c6c2060536572766963655175657565733a3a736572766963655f7175657565736020696e20606f6e5f69646c65602e01810d642441737365745261746501244173736574526174650458436f6e76657273696f6e52617465546f4e617469766500010402a5044d0704000c1d01204d61707320616e20617373657420746f2069747320666978656420706f696e7420726570726573656e746174696f6e20696e20746865206e61746976652062616c616e63652e004d0120452e672e20606e61746976655f616d6f756e74203d2061737365745f616d6f756e74202a20436f6e76657273696f6e52617465546f4e61746976653a3a3c543e3a3a6765742861737365745f6b696e64296001490701ed070001850d652c526f6f7454657374696e670001510701f10700006614426565667901144265656679142c417574686f7269746965730100890d04000470205468652063757272656e7420617574686f726974696573207365743856616c696461746f7253657449640100302000000000000000000474205468652063757272656e742076616c696461746f72207365742069643c4e657874417574686f7269746965730100890d040004ec20417574686f72697469657320736574207363686564756c656420746f2062652075736564207769746820746865206e6578742073657373696f6e30536574496453657373696f6e00010405301004002851012041206d617070696e672066726f6d2042454546592073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f207469653d0120746f6765746865722073657373696f6e7320616e6420424545465920736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00dc2054574f582d4e4f54453a206056616c696461746f72536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e3047656e65736973426c6f636b0100550404000cdc20426c6f636b206e756d62657220776865726520424545465920636f6e73656e73757320697320656e61626c65642f737461727465642e6901204279206368616e67696e67207468697320287468726f7567682070726976696c6567656420607365745f6e65775f67656e65736973282960292c20424545465920636f6e73656e737573206973206566666563746976656c79ac207265737461727465642066726f6d20746865206e65776c792073657420626c6f636b206e756d6265722e015507000c384d6178417574686f7269746965731010a086010004d420546865206d6178696d756d206e756d626572206f6620617574686f72697469657320746861742063616e2062652061646465642e344d61784e6f6d696e61746f727310104000000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e747269657330200c0000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01910dc80c4d6d72010c4d6d720c20526f6f74486173680100348000000000000000000000000000000000000000000000000000000000000000000458204c6174657374204d4d5220526f6f7420686173682e384e756d6265724f664c656176657301003020000000000000000004b02043757272656e742073697a65206f6620746865204d4d5220286e756d626572206f66206c6561766573292e144e6f6465730001040630340400108020486173686573206f6620746865206e6f64657320696e20746865204d4d522e002d01204e6f7465207468697320636f6c6c656374696f6e206f6e6c7920636f6e7461696e73204d4d52207065616b732c2074686520696e6e6572206e6f6465732028616e64206c656176657329bc20617265207072756e656420616e64206f6e6c792073746f72656420696e20746865204f6666636861696e2044422e00000000c93042656566794d6d724c656166013042656566794d6d724c65616608404265656679417574686f7269746965730100950db0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a02044657461696c73206f662063757272656e7420424545465920617574686f72697479207365742e5042656566794e657874417574686f7269746965730100950db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c942044657461696c73206f66206e65787420424545465920617574686f72697479207365742e00510120546869732073746f7261676520656e747279206973207573656420617320636163686520666f722063616c6c7320746f20607570646174655f62656566795f6e6578745f617574686f726974795f736574602e00000000ca404964656e746974794d69677261746f720001750701f5070000f8990d042048436865636b4e6f6e5a65726f53656e646572a10dc840436865636b5370656356657273696f6ea50d1038436865636b547856657273696f6ea90d1030436865636b47656e65736973ad0d3438436865636b4d6f7274616c697479b10d3428436865636b4e6f6e6365b90dc82c436865636b576569676874bd0dc8604368617267655472616e73616374696f6e5061796d656e74c10dc8c50d'; \ No newline at end of file diff --git a/src/testHelpers/mockRelayApiV1011000.ts b/src/testHelpers/mockRelayApiV1011000.ts new file mode 100644 index 00000000..87925b76 --- /dev/null +++ b/src/testHelpers/mockRelayApiV1011000.ts @@ -0,0 +1,6 @@ +// Copyright 2023 Parity Technologies (UK) Ltd. + +import { createApiWithAugmentations } from './createApiWithAugmentations'; +import { westendV1011000 } from './metadata/westendV1011000'; + +export const mockRelayApiV1011000 = createApiWithAugmentations(westendV1011000); diff --git a/src/types.ts b/src/types.ts index a2873954..0cabb29d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,6 +70,10 @@ export enum Direction { * Relay chain to Parachain. */ RelayToPara = 'RelayToPara', + /** + * Relay chain to an external `GlobalConsensus` chain. + */ + RelayToBridge = 'RelayToBridge', } /** From c5cbe5d94487517dd96287372fd32ba6796d3b7d Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 17 May 2024 11:30:10 -0400 Subject: [PATCH 30/44] test relay to bridge --- src/index.ts | 62 +++++++++++++++++++ .../AssetsTransferApi.spec.ts | 50 ++++++++++----- 2 files changed, 97 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index 270fc9e0..04e62756 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,65 @@ export * from './AssetTransferApi'; export * from './constructApiPromise'; export * from './types'; + +import { ApiPromise, WsProvider } from '@polkadot/api'; + +import { AssetTransferApi } from './AssetTransferApi'; + +const main = async () => { + // const specName = 'bridge-hub-kusama'; + // const specname = 'statemine'; + // const provider = new WsProvider(`wss://kusama-asset-hub-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://statemine-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://kusama.api.encointer.org`); + // const provider = new WsProvider(`wss://westend-asset-hub-rpc.polkadot.io`); + // const provider = new WsProvider(`wss://wss.api.moonbeam.network`); + // const provider = new WsProvider(`wss://sys.ibp.network/collectives-westend`); + // 'wss://moonriver.api.onfinality.io/public-ws' + const provider = new WsProvider( + 'wss://rococo-rpc.polkadot.io', + // 'wss://rococo-asset-hub-rpc.polkadot.io', + // `wss://westend-rpc.polkadot.io`, + // `wss://moonriver.api.onfinality.io/public-ws` + // `wss://bifrost-rpc.liebi.com/ws` + // `wss://rpc.shiden.astar.network` + ); + + const api = await ApiPromise.create({ provider }); + + await api.isReady; + + const assetTransferApi = new AssetTransferApi(api, 'rococo', 4); + + const payload = await assetTransferApi.createTransferTransaction( + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + '5HBuLJz9LdkUNseUEL6DLeVkx2bqEi6pQr8Ea7fS4bzx7i7E', + [`{"parents":"0","interior":{"Here":""}}`], + ['1000000000000000000'], + { + format: 'payload', + xcmVersion: 4, + sendersAddr: '5HBuLJz9LdkUNseUEL6DLeVkx2bqEi6pQr8Ea7fS4bzx7i7E', + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + }, + ); + + console.log('payload', JSON.stringify(payload)); + + // const decodedPayload = assetTransferApi.decodeExtrinsic(payload.tx, 'payload'); + // console.log('decodedPayload', decodedPayload); + + const payloadExtrinsic = api.registry.createType('ExtrinsicPayload', payload.tx, { + version: 4, + }); + + console.log('payload method to string', JSON.stringify(payloadExtrinsic.method.toHuman())); + const payloadJSON = payloadExtrinsic.method.toJSON(); + console.log('payload json', payloadJSON); +}; + +main(); diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 3f7867e7..b7cd7e09 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -1473,7 +1473,7 @@ describe('AssetTransferApi Integration Tests', () => { }; describe('V3', () => { - it('Should correctly build a transferAssets call for V3', async () => { + it('Should correctly build a transferAssetsUsingTypeAndThen call for V3', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`, @@ -1489,14 +1489,19 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', }, ); expect(res.tx).toEqual( - '0x1f0b03020109079edaa8020300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020209079edaa8020300fff9976782d46cc05630d1f6ebab18b2324d6b140002286bee0000000001a10f411f', + '0x630d03020109079edaa80203040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); }); - it('Should correctly build a payload for a transferAssets for V3', async () => { + it('Should correctly build a payload for a transferAssetsUsingTypeAndThen for V3', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, @@ -1510,13 +1515,18 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', }, ); expect(res.tx.toHex()).toEqual( - '0x11011f0b030202090200a10f0300010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b030400020109020002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x5501630d030202090500a10f03040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); - it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { + it('Should correctly build a submittable extrinsic for a transferAssetsUsingTypeAndThen for V3', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, @@ -1530,6 +1540,11 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', }, ); expect(res.tx.toRawType()).toEqual('Extrinsic'); @@ -1537,10 +1552,10 @@ describe('AssetTransferApi Integration Tests', () => { }); describe('V4', () => { - it('Should correctly build a `transferAssets` call extrinsic for V4', async () => { + it('Should correctly build a `transferAssetsUsingTypeAndThen` call extrinsic for V4', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":""}}}`, [`{"parents":"0","interior":{"Here":""}}`], 'call', 4, @@ -1551,31 +1566,36 @@ describe('AssetTransferApi Integration Tests', () => { refTime: '1000', proofSize: '2000', }, + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', }, ); expect(res.tx).toEqual( '0x1f0b040202090200a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', ); }); - it('Should correctly build a `transferAssets` payload for V4', async () => { + it('Should correctly build a `transferAssetsUsingTypeAndThen` payload for V4 test', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, - `{"parents":"1","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"1","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, [`{"parents":"0","interior":{"Here":""}}`], 'payload', 4, { - paysWithFeeDest: `{"parents":"1","interior":{"Here":""}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":[{"Parachain":"1000"}]}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":[{"Parachain":"1000"}]}}', isLiquidTokenTransfer: false, isForeignAssetsTransfer: false, + paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + assetTransferType: 'RemoteReserve', + remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + feesTransferType: 'RemoteReserve', + remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', }, ); expect(res.tx.toHex()).toEqual( - '0x0d011f0b040202090500a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109050002286bee0000000001a10f411f45022800010000cc240000040000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x3d01630d040202090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0045022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { From ea44ea449bde9c5954599a6876431d52daff7b74 Mon Sep 17 00:00:00 2001 From: marshacb Date: Mon, 20 May 2024 11:47:42 -0400 Subject: [PATCH 31/44] add relay to bridge integration tests --- .../AssetsTransferApi.spec.ts | 134 +++++++++--------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index b7cd7e09..f69a5d1a 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -1551,77 +1551,77 @@ describe('AssetTransferApi Integration Tests', () => { }); }); - describe('V4', () => { - it('Should correctly build a `transferAssetsUsingTypeAndThen` call extrinsic for V4', async () => { - const res = await bridgeBaseRelayCreateTx( - relayAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":""}}}`, - [`{"parents":"0","interior":{"Here":""}}`], - 'call', - 4, - { - isLiquidTokenTransfer: false, - isForeignAssetsTransfer: true, - weightLimit: { - refTime: '1000', - proofSize: '2000', - }, - paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - }, - ); - expect(res.tx).toEqual( - '0x1f0b040202090200a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', - ); - }); - it('Should correctly build a `transferAssetsUsingTypeAndThen` payload for V4 test', async () => { - const res = await bridgeBaseRelayCreateTx( - relayAssetsApiV1011000, - `{"parents":"1","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, - [`{"parents":"0","interior":{"Here":""}}`], - 'payload', - 4, - { - isLiquidTokenTransfer: false, - isForeignAssetsTransfer: false, - paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - }, - ); - expect(res.tx.toHex()).toEqual( - '0x3d01630d040202090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0045022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', - ); - }); - it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { - const res = await bridgeBaseRelayCreateTx( - relayAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, - [`{"parents":"0","interior":{"Here":""}}`], - 'submittable', - 4, - { - isLiquidTokenTransfer: false, - isForeignAssetsTransfer: true, - weightLimit: { - refTime: '1000', - proofSize: '2000', - }, - }, - ); - expect(res.tx.toRawType()).toEqual('Extrinsic'); - }); - }); + // describe('V4', () => { + // it('Should correctly build a `transferAssetsUsingTypeAndThen` call extrinsic for V4', async () => { + // const res = await bridgeBaseRelayCreateTx( + // relayAssetsApiV1011000, + // `{"parents":"2","interior":{"X1":{"GlobalConsensus":""}}}`, + // [`{"parents":"0","interior":{"Here":""}}`], + // 'call', + // 4, + // { + // isLiquidTokenTransfer: false, + // isForeignAssetsTransfer: true, + // weightLimit: { + // refTime: '1000', + // proofSize: '2000', + // }, + // paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + // assetTransferType: 'RemoteReserve', + // remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + // feesTransferType: 'RemoteReserve', + // remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + // }, + // ); + // expect(res.tx).toEqual( + // '0x1f0b040202090200a10f0400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0404020109020002286bee0000000001a10f411f', + // ); + // }); + // it('Should correctly build a `transferAssetsUsingTypeAndThen` payload for V4 test', async () => { + // const res = await bridgeBaseRelayCreateTx( + // relayAssetsApiV1011000, + // `{"parents":"1","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + // [`{"parents":"0","interior":{"Here":""}}`], + // 'payload', + // 4, + // { + // isLiquidTokenTransfer: false, + // isForeignAssetsTransfer: false, + // paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, + // assetTransferType: 'RemoteReserve', + // remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + // feesTransferType: 'RemoteReserve', + // remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', + // }, + // ); + // expect(res.tx.toHex()).toEqual( + // '0x3d01630d040202090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0045022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + // ); + // }); + // it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { + // const res = await bridgeBaseRelayCreateTx( + // relayAssetsApiV1011000, + // `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + // [`{"parents":"0","interior":{"Here":""}}`], + // 'submittable', + // 4, + // { + // isLiquidTokenTransfer: false, + // isForeignAssetsTransfer: true, + // weightLimit: { + // refTime: '1000', + // proofSize: '2000', + // }, + // }, + // ); + // expect(res.tx.toRawType()).toEqual('Extrinsic'); + // }); + // }); it('Should correctly error when provided an XCM version less than 3', async () => { await expect(async () => { await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, [`{"parents":"0","interior":{"Here":""}}`], 'submittable', 2, From 68d17e4d48fe5cf3a14a1daa08478a73e399987e Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 21 May 2024 13:11:37 -0400 Subject: [PATCH 32/44] update bridgeTransfer dest locations to explicitly be global consensus AssetHub locations rather than the relay chains location removed assumption that polkadots location should be intended as polkadot assethub added parseLocationStrToLocation util function updated SystemToBridge tests to explicitly provide AssetHub locations for polkadot kusama bridge cases --- .../bridgeTransfers/assetHubDOTToPolkadot.ts | 2 +- .../bridgeTransfers/assetHubKSMToPolkadot.ts | 2 +- .../bridgeTransfers/assetHubDOTToKusama.ts | 2 +- .../bridgeTransfers/assetHubKSMToKusama.ts | 2 +- .../bridgeTransfers/assetHubROCToWestend.ts | 2 +- .../bridgeTransfers/assetHubWNDToWestend.ts | 2 +- .../reserve/assetHubMUSEToRhala.ts | 2 + .../reserve/assetHubWETHToRhala.ts | 7 +- src/AssetTransferApi.ts | 11 +-- src/consts.ts | 10 --- .../transferAssetsUsingTypeAndThen.spec.ts | 8 +- src/createXcmTypes/SystemToBridge.spec.ts | 2 +- src/createXcmTypes/SystemToBridge.ts | 4 +- src/createXcmTypes/util/chainDestIsBridge.ts | 19 +++-- .../util/createXcmVersionedAssetId.ts | 5 +- ...getGlobalConsensusDestFromLocation.spec.ts | 85 ------------------- .../getGlobalConsensusDestFromLocation.ts | 41 --------- .../util/getGlobalConsensusSystemName.spec.ts | 44 +++++++--- .../util/getGlobalConsensusSystemName.ts | 9 +- .../util/parseLocationStrToLocation.spec.ts | 34 ++++++++ .../util/parseLocationStrToLocation.ts | 12 +++ .../AssetsTransferApi.spec.ts | 14 +-- src/util/resolveMultiLocation.ts | 3 +- 23 files changed, 130 insertions(+), 192 deletions(-) delete mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts delete mode 100644 src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts create mode 100644 src/createXcmTypes/util/parseLocationStrToLocation.spec.ts create mode 100644 src/createXcmTypes/util/parseLocationStrToLocation.ts diff --git a/examples/kusama/assetHub/bridgeTransfers/assetHubDOTToPolkadot.ts b/examples/kusama/assetHub/bridgeTransfers/assetHubDOTToPolkadot.ts index 10d7de76..7ee14ed8 100644 --- a/examples/kusama/assetHub/bridgeTransfers/assetHubDOTToPolkadot.ts +++ b/examples/kusama/assetHub/bridgeTransfers/assetHubDOTToPolkadot.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], ['10000000000'], diff --git a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts index 9608fdbc..5d6eb6ac 100644 --- a/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts +++ b/examples/kusama/assetHub/bridgeTransfers/assetHubKSMToPolkadot.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', [`{"parents":"1","interior":{"Here":""}}`], ['1000000000000'], diff --git a/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts b/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts index 4047a91f..0cd22918 100644 --- a/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts +++ b/examples/polkadot/assetHub/bridgeTransfers/assetHubDOTToKusama.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}`, 'Ep7uTCvpbpMDnbfTyzbMQTQQqZ5ACGx5nUKnxmBjB4ktmSa', [`DOT`], ['10000000000'], diff --git a/examples/polkadot/assetHub/bridgeTransfers/assetHubKSMToKusama.ts b/examples/polkadot/assetHub/bridgeTransfers/assetHubKSMToKusama.ts index fe25d0c2..20e60ecd 100644 --- a/examples/polkadot/assetHub/bridgeTransfers/assetHubKSMToKusama.ts +++ b/examples/polkadot/assetHub/bridgeTransfers/assetHubKSMToKusama.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}`, '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`], ['1000000000000'], diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts index 2e423cfa..f0f4467c 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubROCToWestend.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}`, '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [`{"parents":"1","interior":{"Here":""}}`], ['1000000000000'], diff --git a/examples/rococo/assetHub/bridgeTransfers/assetHubWNDToWestend.ts b/examples/rococo/assetHub/bridgeTransfers/assetHubWNDToWestend.ts index ed528f91..f5e7c6ff 100644 --- a/examples/rococo/assetHub/bridgeTransfers/assetHubWNDToWestend.ts +++ b/examples/rococo/assetHub/bridgeTransfers/assetHubWNDToWestend.ts @@ -22,7 +22,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}`, '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`], ['1000000000000'], diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts index 0d2618c2..3f922168 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts @@ -12,6 +12,8 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * from a Rococo Asset Hub (System Parachain) account * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * * The `paysWithFeeDest` value is set to pay fees with `MUSE` and the values for `assetTransferType` and `feesTransferType` + * are both set to `LocalReserve` specifying that the reserve locatiob to be used for transfers and fees is AssetHub. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts index 113238fe..5f8b1f75 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts @@ -8,10 +8,12 @@ import { TxResult } from '../../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) + * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) * from a Rococo Asset Hub (System Parachain) account * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. + * The `paysWithFeeDest` value is set to pay fees with WETH and the values for `assetTransferType` and `feesTransferType` + * are both set to `LocalReserve` specifying that the reserve locatiob to be used for transfers and fees is AssetHub. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ @@ -33,6 +35,9 @@ const main = async () => { { format: 'call', xcmVersion: 4, + paysWithFeeDest: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, + assetTransferType: 'LocalReserve', + feesTransferType: 'LocalReserve', }, ); diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index e92ad236..f7fadc74 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -82,6 +82,7 @@ import { callExistsInRuntime } from './util/callExistsInRuntime'; import { deepEqual } from './util/deepEqual'; import { sanitizeKeys } from './util/sanitizeKeys'; import { validateNumber } from './validate'; +import { parseLocationStrToLocation } from './createXcmTypes/util/parseLocationStrToLocation'; /** * Holds open an api connection to a specified chain within the ApiPromise in order to help @@ -944,12 +945,8 @@ export class AssetTransferApi { const lpTokenLocations = lpTokens as UnionXcmMultiLocation[]; // convert json into locations - const firstLpToken = JSON.parse( - JSON.stringify(lpTokenLocations[0][0]).replace(/(\d),/g, '$1'), - ) as UnionXcmMultiLocation; - const secondLpToken = JSON.parse( - JSON.stringify(lpTokenLocations[0][1]).replace(/(\d),/g, '$1'), - ) as UnionXcmMultiLocation; + const firstLpToken = parseLocationStrToLocation(JSON.stringify(lpTokenLocations[0][0]).replace(/(\d),/g, '$1')); + const secondLpToken = parseLocationStrToLocation(JSON.stringify(lpTokenLocations[0][1]).replace(/(\d),/g, '$1')); // check locations match paysWithFeeOrigin feeAsset if (deepEqual(sanitizeKeys(firstLpToken), feeAsset) || deepEqual(sanitizeKeys(secondLpToken), feeAsset)) { @@ -1052,7 +1049,7 @@ export class AssetTransferApi { : poolAssets.transfer(api, addr, assetId, amount); palletMethod = `poolAssets::${method}`; } else if (localAssetType === LocalTxType.ForeignAssets) { - const location = JSON.parse(assetId) as UnionXcmMultiLocation; + const location = parseLocationStrToLocation(assetId); tx = method === 'transferKeepAlive' ? foreignAssets.transferKeepAlive(api, addr, location, amount) diff --git a/src/consts.ts b/src/consts.ts index 36b21939..ede99132 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -76,13 +76,3 @@ export const JS_ENV = detectJsEnv(); * Supported consensus system chain names */ export const KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES = ['polkadot', 'kusama', 'westend', 'rococo', 'ethereum']; - -/** - * Global consensus locations for AssetHubs - */ -export const ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS = { - polkadot: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}', - kusama: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}', - westend: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}', - rococo: '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}', -}; diff --git a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts index 14ab3407..21c981c5 100644 --- a/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts +++ b/src/createXcmCalls/polkadotXcm/transferAssetsUsingTypeAndThen.spec.ts @@ -100,7 +100,7 @@ describe('transferAssetsUsingTypeAndThen', () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location ], amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + destChainId: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, // location destChainId, xcmVersion: 3, specName: 'asset-hub-westend', registry, @@ -139,7 +139,7 @@ describe('transferAssetsUsingTypeAndThen', () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, // Polkadot location ], amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, // location destChainId, + destChainId: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, // location destChainId, xcmVersion: 3, specName: 'asset-hub-westend', registry, @@ -221,7 +221,7 @@ describe('transferAssetsUsingTypeAndThen', () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // Polkadot location ], amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, // location destChainId, + destChainId: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, // location destChainId, xcmVersion: 4, specName: 'asset-hub-westend', registry, @@ -260,7 +260,7 @@ describe('transferAssetsUsingTypeAndThen', () => { `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, // Polkadot location ], amounts: ['1000000000000'], - destChainId: `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, // location destChainId, + destChainId: `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, // location destChainId, xcmVersion: 4, specName: 'asset-hub-westend', registry, diff --git a/src/createXcmTypes/SystemToBridge.spec.ts b/src/createXcmTypes/SystemToBridge.spec.ts index bc8a74a1..6c21ae0a 100644 --- a/src/createXcmTypes/SystemToBridge.spec.ts +++ b/src/createXcmTypes/SystemToBridge.spec.ts @@ -115,7 +115,7 @@ describe('SystemToBridge', () => { expect(destination).toStrictEqual(expectedRes); }); it('Should work for V4', () => { - const destId = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + const destId = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}`; const destination = SystemToBridge.createDest(destId, 4); diff --git a/src/createXcmTypes/SystemToBridge.ts b/src/createXcmTypes/SystemToBridge.ts index 3a3d57eb..0060fa09 100644 --- a/src/createXcmTypes/SystemToBridge.ts +++ b/src/createXcmTypes/SystemToBridge.ts @@ -31,9 +31,9 @@ import { import { dedupeAssets } from './util/dedupeAssets'; import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; import { getAssetId } from './util/getAssetId'; -import { getGlobalConsensusDestFromLocation } from './util/getGlobalConsensusDestFromLocation'; import { isRelayNativeAsset } from './util/isRelayNativeAsset'; import { isSystemChain } from './util/isSystemChain'; +import { parseLocationStrToLocation } from './util/parseLocationStrToLocation'; import { sortAssetsAscending } from './util/sortAssetsAscending'; export const SystemToBridge: ICreateXcmType = { @@ -79,7 +79,7 @@ export const SystemToBridge: ICreateXcmType = { * @param xcmVersion The accepted xcm version. */ createDest: (destId: string, xcmVersion: number): XcmDestBeneficiary => { - const destination = getGlobalConsensusDestFromLocation(destId); + const destination = parseLocationStrToLocation(destId); let dest: XcmDestBeneficiary | undefined = undefined; if (xcmVersion === 3) { diff --git a/src/createXcmTypes/util/chainDestIsBridge.ts b/src/createXcmTypes/util/chainDestIsBridge.ts index abbece5b..214ae5ca 100644 --- a/src/createXcmTypes/util/chainDestIsBridge.ts +++ b/src/createXcmTypes/util/chainDestIsBridge.ts @@ -1,6 +1,6 @@ // Copyright 2024 Parity Technologies (UK) Ltd. -import { UnionXcmMultiLocation } from '../types'; +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; /** * Determines if the dest chain is a Global Consensus origin based on the value of its dest location @@ -8,15 +8,16 @@ import { UnionXcmMultiLocation } from '../types'; * @returns boolean */ export const chainDestIsBridge = (destLocation: string): boolean => { - const location = JSON.parse(destLocation) as UnionXcmMultiLocation; + const location = parseLocationStrToLocation(destLocation); + let destIsBridge = false; - if ( - location.interior && - location.interior.X1 && - JSON.stringify(location.interior.X1).toLowerCase().includes('globalconsensus') - ) { - return true; + if (location.interior) { + destIsBridge = location.interior.X1 + ? JSON.stringify(location.interior.X1).toLowerCase().includes('globalconsensus') + : location.interior.X2 + ? JSON.stringify(location.interior.X2).toLowerCase().includes('globalconsensus') + : false; } - return false; + return destIsBridge; }; diff --git a/src/createXcmTypes/util/createXcmVersionedAssetId.ts b/src/createXcmTypes/util/createXcmVersionedAssetId.ts index ce138b4c..881b5dd2 100644 --- a/src/createXcmTypes/util/createXcmVersionedAssetId.ts +++ b/src/createXcmTypes/util/createXcmVersionedAssetId.ts @@ -2,7 +2,8 @@ import { BaseError, BaseErrorsEnum } from '../../errors'; import { resolveMultiLocation } from '../../util/resolveMultiLocation'; -import { UnionXcmMultiLocation, XcmVersionedAssetId } from '../types'; +import { XcmVersionedAssetId } from '../types'; +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; export const createXcmVersionedAssetId = ( destFeesAssetId: string | undefined, @@ -16,7 +17,7 @@ export const createXcmVersionedAssetId = ( } let remoteFeesId: XcmVersionedAssetId; - const location = JSON.parse(destFeesAssetId) as UnionXcmMultiLocation; + const location = parseLocationStrToLocation(destFeesAssetId); if (xcmVersion === 3) { remoteFeesId = { diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts deleted file mode 100644 index b967dbf9..00000000 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.spec.ts +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import { getGlobalConsensusDestFromLocation } from './getGlobalConsensusDestFromLocation'; - -describe('getGlobalConsensusDestFromLocation', () => { - it('Should correctly retrieve the global consensus dest based on the location for Polkadot', () => { - const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; - - const expected = { - parents: '2', - interior: { - X2: [ - { - GlobalConsensus: 'Polkadot', - }, - { - Parachain: '1000', - }, - ], - }, - }; - - const result = getGlobalConsensusDestFromLocation(locationStr); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the location for Kusama', () => { - const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; - const expected = { - parents: '2', - interior: { - X2: [ - { - GlobalConsensus: 'Kusama', - }, - { - Parachain: '1000', - }, - ], - }, - }; - - const result = getGlobalConsensusDestFromLocation(locationStr); - - expect(result).toEqual(expected); - }); - it('Should correctly retrieve the global consensus dest based on the location for Ethereum', () => { - const locationStr = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; - - const expected = { - parents: '2', - interior: { - X1: { - GlobalConsensus: { - Ethereum: { - chainId: '11155111', - }, - }, - }, - }, - }; - - const result = getGlobalConsensusDestFromLocation(locationStr); - - expect(result).toEqual(expected); - }); - it('Should correctly throw an error when a location is provided that does not contain a GlobalConsensus destination junction value', () => { - const locationStr = `{"parents":"1","interior":{"X1":{"Parachain":"2030"}}}`; - - const err = () => getGlobalConsensusDestFromLocation(locationStr); - - expect(err).toThrow( - `Bridge transaction location {"parents":"1","interior":{"X1":{"Parachain":"2030"}}} must contain a valid GlobalConsensus Junction`, - ); - }); - it('Should correctly throw an error when a location is provided that does not contain a valid GlobalConsensus at the 0 index', () => { - const locationStr = `{"parents":"1","interior":{"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]}}`; - - const err = () => getGlobalConsensusDestFromLocation(locationStr); - - expect(err).toThrow( - `Bridge transaction location interior {"X2":[{"Parachain":"2030"},{"GlobalConsensus":"Kusama"}]} does not contain a GlobalConsensus Junction in the first index`, - ); - }); -}); diff --git a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts b/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts deleted file mode 100644 index dcb1bd56..00000000 --- a/src/createXcmTypes/util/getGlobalConsensusDestFromLocation.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import { ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS } from '../../consts'; -import { BaseError, BaseErrorsEnum } from '../../errors'; -import { UnionXcmMultiLocation } from '../types'; - -export const getGlobalConsensusDestFromLocation = (locationStr: string): UnionXcmMultiLocation => { - if (!locationStr.toLowerCase().includes('globalconsensus')) { - throw new BaseError( - `Bridge transaction location ${locationStr} must contain a valid GlobalConsensus Junction`, - BaseErrorsEnum.InternalError, - ); - } - - let assetLocation = JSON.parse(locationStr) as UnionXcmMultiLocation; - - if (assetLocation.interior && assetLocation.interior.X1) { - const globalConsensusDestStr = JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('polkadot') - ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['polkadot'] - : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('kusama') - ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['kusama'] - : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('westend') - ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['westend'] - : JSON.stringify(assetLocation.interior.X1).toLowerCase().includes('rococo') - ? ASSETHUB_GLOBAL_CONSENSUS_LOCATIONS['rococo'] - : undefined; - - assetLocation = globalConsensusDestStr - ? (JSON.parse(globalConsensusDestStr) as UnionXcmMultiLocation) - : assetLocation; - } else { - throw new BaseError( - `Bridge transaction location interior ${JSON.stringify( - assetLocation.interior, - )} does not contain a GlobalConsensus Junction in the first index`, - BaseErrorsEnum.InternalError, - ); - } - - return assetLocation; -}; diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts index edf44c51..d59e3f61 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts @@ -3,26 +3,44 @@ import { getGlobalConsensusSystemName } from './getGlobalConsensusSystemName'; describe('getGlobalConsensusSystemName', () => { - it('Should correctly return the consensus system name for Polkadot', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; + describe('X1', () => { + it('Should correctly return the consensus system name for Polkadot', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('polkadot'); - }); - it('Should correctly return the consensus system name for Kusama', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + expect(result).toEqual('polkadot'); + }); + it('Should correctly return the consensus system name for Kusama', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Kusama"}}}`; + + const result = getGlobalConsensusSystemName(destLocation); + + expect(result).toEqual('kusama'); + }); + it('Should correctly return the consensus system name for Ethereum', () => { + const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('kusama'); + expect(result).toEqual('ethereum'); + }); }); - it('Should correctly return the consensus system name for Ethereum', () => { - const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}}}}`; + describe('X2', () => { + it('Should correctly return the consensus system name for Polkadot', () => { + const destLocation = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`; + + const result = getGlobalConsensusSystemName(destLocation); + + expect(result).toEqual('polkadot'); + }); + it('Should correctly return the consensus system name for Kusama', () => { + const destLocation = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}`; - const result = getGlobalConsensusSystemName(destLocation); + const result = getGlobalConsensusSystemName(destLocation); - expect(result).toEqual('ethereum'); + expect(result).toEqual('kusama'); + }); }); it('Should correctly throw an error when no valid consensus system name is found', () => { const destLocation = `{"parents":"2","interior":{"X1":{"GlobalConsensus":{"Cosmos":{"chainId":"0"}}}}}`; diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts index d01cc414..44c1ea89 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.ts @@ -2,13 +2,16 @@ import { KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES } from '../../consts'; import { BaseError, BaseErrorsEnum } from '../../errors'; -import { UnionXcmMultiLocation } from '../types'; +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; export const getGlobalConsensusSystemName = (destLocation: string): string => { - const location = JSON.parse(destLocation) as UnionXcmMultiLocation; + const location = parseLocationStrToLocation(destLocation); for (const systemName of KNOWN_GLOBAL_CONSENSUS_SYSTEM_NAMES) { - if (location.interior.X1 && JSON.stringify(location.interior.X1).toLowerCase().includes(systemName)) { + if ( + (location.interior.X1 && JSON.stringify(location.interior.X1).toLowerCase().includes(systemName)) || + (location.interior.X2 && JSON.stringify(location.interior.X2).toLowerCase().includes(systemName)) + ) { return systemName; } } diff --git a/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts b/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts new file mode 100644 index 00000000..06e09231 --- /dev/null +++ b/src/createXcmTypes/util/parseLocationStrToLocation.spec.ts @@ -0,0 +1,34 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { parseLocationStrToLocation } from './parseLocationStrToLocation'; + +describe('parseLocationStrToLocation', () => { + it('Should correctly return a valid UnionXcmMultilocation', () => { + const locationStr = '{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}'; + const expected = { + parents: '2', + interior: { + X2: [ + { + GlobalConsensus: 'Polkadot', + }, + { + Parachain: '1000', + }, + ], + }, + }; + 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"}]}}'; + + const err = () => parseLocationStrToLocation(locationStr); + + expect(err).toThrow( + 'Unable to parse {"parents":"2","interior":{"X2":[{GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}} as a valid location', + ); + }); +}); diff --git a/src/createXcmTypes/util/parseLocationStrToLocation.ts b/src/createXcmTypes/util/parseLocationStrToLocation.ts new file mode 100644 index 00000000..d1221a47 --- /dev/null +++ b/src/createXcmTypes/util/parseLocationStrToLocation.ts @@ -0,0 +1,12 @@ +// Copyright 2024 Parity Technologies (UK) Ltd. + +import { BaseError, BaseErrorsEnum } from '../../errors'; +import { UnionXcmMultiLocation } from '../types'; + +export const parseLocationStrToLocation = (locationStr: string): UnionXcmMultiLocation => { + try { + return JSON.parse(locationStr) as UnionXcmMultiLocation; + } catch { + throw new BaseError(`Unable to parse ${locationStr} as a valid location`, BaseErrorsEnum.InvalidInput); + } +}; diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index ff1d5b23..d943ead2 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -280,7 +280,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a payload for a transferAssets for V3', async () => { const res = await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], ['1000000000000'], 'payload', @@ -301,7 +301,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a submittable extrinsic for a transferAssets for V3', async () => { const res = await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], ['1000000000000'], 'submittable', @@ -323,7 +323,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a `transferAssets` call extrinsic for V4', async () => { const res = await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`], ['1000000000000'], 'call', @@ -344,7 +344,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a `transferAssets` payload for V4', async () => { const res = await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], ['1000000000000'], 'payload', @@ -365,7 +365,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { const res = await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], ['1000000000000'], 'submittable', @@ -386,7 +386,7 @@ describe('AssetTransferApi Integration Tests', () => { await expect(async () => { await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"2","interior":{"X1":{"GlobalConsensus":"Rococo"}}}`], ['1000000000000'], 'submittable', @@ -406,7 +406,7 @@ describe('AssetTransferApi Integration Tests', () => { await expect(async () => { await bridgeBaseSystemCreateTx( systemAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, [ `{"parents":"1","interior":{"Here":""}}`, `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Polkadot"}}}`, diff --git a/src/util/resolveMultiLocation.ts b/src/util/resolveMultiLocation.ts index 1a0fbaa1..20246f9e 100644 --- a/src/util/resolveMultiLocation.ts +++ b/src/util/resolveMultiLocation.ts @@ -4,6 +4,7 @@ import type { AnyJson } from '@polkadot/types/types'; import { SUPPORTED_XCM_VERSIONS } from '../consts'; import type { UnionXcmMultiLocation, XcmV4Junction } from '../createXcmTypes/types'; +import { parseLocationStrToLocation } from '../createXcmTypes/util/parseLocationStrToLocation'; import { BaseError, BaseErrorsEnum } from '../errors/BaseError'; import { sanitizeKeys } from './sanitizeKeys'; @@ -31,7 +32,7 @@ export const resolveMultiLocation = (multiLocation: AnyJson, xcmVersion: number) throw new BaseError(`Invalid XcmVersion for mulitLocation construction`, BaseErrorsEnum.InternalError); } - let result = JSON.parse(multiLocationStr) as UnionXcmMultiLocation; + let result = parseLocationStrToLocation(multiLocationStr); if (xcmVersion > 3 && result.interior.X1) { result = { From 2fa9e8c78413c163ec97ca652b1b13bb79a507b2 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 21 May 2024 13:19:02 -0400 Subject: [PATCH 33/44] update test description --- src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts index d59e3f61..bca19c6e 100644 --- a/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts +++ b/src/createXcmTypes/util/getGlobalConsensusSystemName.spec.ts @@ -27,14 +27,14 @@ describe('getGlobalConsensusSystemName', () => { }); }); describe('X2', () => { - it('Should correctly return the consensus system name for Polkadot', () => { + it('Should correctly return the consensus system name for Polkadot AssetHub', () => { const destLocation = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`; const result = getGlobalConsensusSystemName(destLocation); expect(result).toEqual('polkadot'); }); - it('Should correctly return the consensus system name for Kusama', () => { + it('Should correctly return the consensus system name for Kusama AssetHub', () => { const destLocation = `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Kusama"},{"Parachain":"1000"}]}}`; const result = getGlobalConsensusSystemName(destLocation); From c256e6f91bf8ae9fcbfe2b469efd086181c15c52 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 21 May 2024 13:20:29 -0400 Subject: [PATCH 34/44] lint --- src/AssetTransferApi.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/AssetTransferApi.ts b/src/AssetTransferApi.ts index f7fadc74..fb118b43 100644 --- a/src/AssetTransferApi.ts +++ b/src/AssetTransferApi.ts @@ -38,6 +38,7 @@ import { isParachain } from './createXcmTypes/util/isParachain'; import { isParachainPrimaryNativeAsset } from './createXcmTypes/util/isParachainPrimaryNativeAsset'; import { isSystemChain } from './createXcmTypes/util/isSystemChain'; import { multiLocationAssetIsParachainsNativeAsset } from './createXcmTypes/util/multiLocationAssetIsParachainsNativeAsset'; +import { parseLocationStrToLocation } from './createXcmTypes/util/parseLocationStrToLocation'; import { BaseError, BaseErrorsEnum, @@ -82,7 +83,6 @@ import { callExistsInRuntime } from './util/callExistsInRuntime'; import { deepEqual } from './util/deepEqual'; import { sanitizeKeys } from './util/sanitizeKeys'; import { validateNumber } from './validate'; -import { parseLocationStrToLocation } from './createXcmTypes/util/parseLocationStrToLocation'; /** * Holds open an api connection to a specified chain within the ApiPromise in order to help @@ -945,8 +945,12 @@ export class AssetTransferApi { const lpTokenLocations = lpTokens as UnionXcmMultiLocation[]; // convert json into locations - const firstLpToken = parseLocationStrToLocation(JSON.stringify(lpTokenLocations[0][0]).replace(/(\d),/g, '$1')); - const secondLpToken = parseLocationStrToLocation(JSON.stringify(lpTokenLocations[0][1]).replace(/(\d),/g, '$1')); + const firstLpToken = parseLocationStrToLocation( + JSON.stringify(lpTokenLocations[0][0]).replace(/(\d),/g, '$1'), + ); + const secondLpToken = parseLocationStrToLocation( + JSON.stringify(lpTokenLocations[0][1]).replace(/(\d),/g, '$1'), + ); // check locations match paysWithFeeOrigin feeAsset if (deepEqual(sanitizeKeys(firstLpToken), feeAsset) || deepEqual(sanitizeKeys(secondLpToken), feeAsset)) { From 260a657e224198af3db9b0b2d1f02376bffc93e6 Mon Sep 17 00:00:00 2001 From: marshacb Date: Tue, 21 May 2024 13:30:09 -0400 Subject: [PATCH 35/44] fix spelling --- .../foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts | 2 +- .../foreignAssetTransfers/reserve/assetHubWETHToRhala.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts index 3f922168..581535ef 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToRhala.ts @@ -13,7 +13,7 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * * The `paysWithFeeDest` value is set to pay fees with `MUSE` and the values for `assetTransferType` and `feesTransferType` - * are both set to `LocalReserve` specifying that the reserve locatiob to be used for transfers and fees is AssetHub. + * are both set to `LocalReserve` specifying that the reserve location to be used for transfers and fees is AssetHub. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts index 5f8b1f75..c22808da 100644 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts +++ b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubWETHToRhala.ts @@ -13,7 +13,7 @@ import { GREEN, PURPLE, RESET } from '../../../../colors'; * to a Rhala Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. * The `paysWithFeeDest` value is set to pay fees with WETH and the values for `assetTransferType` and `feesTransferType` - * are both set to `LocalReserve` specifying that the reserve locatiob to be used for transfers and fees is AssetHub. + * are both set to `LocalReserve` specifying that the reserve location to be used for transfers and fees is AssetHub. * * NOTE: To specify the amount of weight for the tx to use provide a `weightLimit` option containing desired values for `refTime` and `proofSize`. */ From d65cfdb7854b0440a787248a8ef20f27b4ca11f5 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 22 May 2024 09:49:08 -0400 Subject: [PATCH 36/44] remove unused code --- src/createXcmTypes/RelayToBridge.ts | 96 ----------------------------- 1 file changed, 96 deletions(-) diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts index 35c63b69..b5496b80 100644 --- a/src/createXcmTypes/RelayToBridge.ts +++ b/src/createXcmTypes/RelayToBridge.ts @@ -4,10 +4,6 @@ import type { ApiPromise } from '@polkadot/api'; import { isEthereumAddress } from '@polkadot/util-crypto'; import { BaseError, BaseErrorsEnum } from '../errors'; -import type { Registry } from '../registry'; -import { RequireOnlyOne } from '../types'; -import { resolveMultiLocation } from '../util/resolveMultiLocation'; -import { validateNumber } from '../validate'; import { CreateWeightLimitOpts, FungibleStrAsset, @@ -16,20 +12,11 @@ import { ICreateXcmType, InteriorValue, UnionXcmMultiAssets, - UnionXcmMultiLocation, XcmDestBeneficiary, - XcmV2Junctions, - XcmV3Junctions, XcmV4JunctionDestBeneficiary, - XcmV4Junctions, XcmWeight, } from './types'; -import { dedupeAssets } from './util/dedupeAssets'; -import { fetchPalletInstanceId } from './util/fetchPalletInstanceId'; -import { getAssetId } from './util/getAssetId'; -import { isRelayNativeAsset } from './util/isRelayNativeAsset'; import { parseLocationStrToLocation } from './util/parseLocationStrToLocation'; -import { sortAssetsAscending } from './util/sortAssetsAscending'; export const RelayToBridge: ICreateXcmType = { /** @@ -204,86 +191,3 @@ export const RelayToBridge: ICreateXcmType = { }, }; -/** - * Create multiassets for SystemToBridge 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. - */ -export const createSystemToBridgeAssets = async ( - api: ApiPromise, - amounts: string[], - specName: string, - assets: string[], - registry: Registry, - xcmVersion: number, - isForeignAssetsTransfer: boolean, - isLiquidTokenTransfer: boolean, -): Promise => { - let multiAssets: FungibleStrAssetType[] = []; - let multiAsset: FungibleStrAssetType; - const palletId = fetchPalletInstanceId(api, isLiquidTokenTransfer, isForeignAssetsTransfer); - const systemChainId = registry.lookupChainIdBySpecName(specName); - - for (let i = 0; i < assets.length; i++) { - let assetId: string = assets[i]; - const amount = amounts[i]; - - const { tokens } = registry.currentRelayRegistry[systemChainId]; - - const isValidInt = validateNumber(assetId); - const isRelayNative = isRelayNativeAsset(tokens, assetId); - if (!isRelayNative && !isValidInt) { - assetId = await getAssetId(api, registry, assetId, specName, xcmVersion, isForeignAssetsTransfer); - } - - let assetLocation: UnionXcmMultiLocation; - - if (isForeignAssetsTransfer) { - assetLocation = resolveMultiLocation(assetId, xcmVersion); - } else { - const parents = isRelayNative ? 1 : 0; - const interior: RequireOnlyOne = isRelayNative - ? { Here: '' } - : { - X2: [{ PalletInstance: palletId }, { GeneralIndex: assetId }], - }; - - assetLocation = { - parents, - interior, - }; - } - - if (xcmVersion < 4) { - multiAsset = { - id: { - Concrete: assetLocation, - }, - fun: { - Fungible: amount, - }, - }; - } else { - multiAsset = { - id: assetLocation, - fun: { - Fungible: amount, - }, - }; - } - - multiAssets.push(multiAsset); - } - - multiAssets = sortAssetsAscending(multiAssets) as FungibleStrAssetType[]; - - const sortedAndDedupedMultiAssets = dedupeAssets(multiAssets) as FungibleStrAssetType[]; - - return sortedAndDedupedMultiAssets; -}; From 2b2b52b21f788d1aa27f634dfe06d6401f4ae3d0 Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:09:00 -0400 Subject: [PATCH 37/44] update integration tests --- src/createXcmTypes/RelayToBridge.ts | 1 - src/integrationTests/AssetsTransferApi.spec.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts index b5496b80..bef86cd9 100644 --- a/src/createXcmTypes/RelayToBridge.ts +++ b/src/createXcmTypes/RelayToBridge.ts @@ -190,4 +190,3 @@ export const RelayToBridge: ICreateXcmType = { return await Promise.resolve(0); }, }; - diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index a336d5ba..287beeb3 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -1632,7 +1632,7 @@ describe('AssetTransferApi Integration Tests', () => { it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { const res = await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"0","interior":{"Here":""}}`], 'submittable', 4, @@ -1652,7 +1652,7 @@ describe('AssetTransferApi Integration Tests', () => { await expect(async () => { await bridgeBaseRelayCreateTx( relayAssetsApiV1011000, - `{"parents":"2","interior":{"X1":{"GlobalConsensus":"Westend"}}}`, + `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Rococo"},{"Parachain":"1000"}]}}`, [`{"parents":"0","interior":{"Here":""}}`], 'submittable', 2, From 96340cc856e2ab6627d581aa348aca401209afd6 Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:33:32 -0400 Subject: [PATCH 38/44] update examples --- .../relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts | 2 +- .../relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts b/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts index f635a02d..df6f1a4f 100644 --- a/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts +++ b/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send 1 KSM (asset with location `{"parents":"0","interior":{"Here":""}}`) + * In this example we are creating a `xcmPallet` `transferAssetsUsingTypeAndThen` call to send 1 KSM (asset with location `{"parents":"0","interior":{"Here":""}}`) * from a Kusama (Relay Chain) account * to a Polkadot Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. diff --git a/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts index ac78ed0c..fff02916 100644 --- a/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts +++ b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send 1 ROC (asset with location `{"parents":"0","interior":{"Here":""}}`) + * In this example we are creating a `xcmPallet` `transferAssetsUsingTypeAndThen` call to send 1 ROC (asset with location `{"parents":"0","interior":{"Here":""}}`) * from a Rococo (Relay Chain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. From 47e414287c196bd373a7ef7e154948e26ac64d43 Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:34:54 -0400 Subject: [PATCH 39/44] update examples --- .../kusamaKSMToPolkadotAssetHub.ts | 54 ------------------- .../rococoROCToWestendAssetHub.ts | 2 +- 2 files changed, 1 insertion(+), 55 deletions(-) delete mode 100644 examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts diff --git a/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts b/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts deleted file mode 100644 index df6f1a4f..00000000 --- a/examples/kusama/relayChain/bridgeTransfers/kusamaKSMToPolkadotAssetHub.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 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 `xcmPallet` `transferAssetsUsingTypeAndThen` call to send 1 KSM (asset with location `{"parents":"0","interior":{"Here":""}}`) - * from a Kusama (Relay Chain) account - * to a Polkadot Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that - * the tx will allow unlimited weight to be used for fees. - * The `paysWithFeeDest` value is set to pay fees with KSM and the values for `assetTransferType` and `feesTransferType` - * are both set to the `RemoteReserve` location of Kusama AssetHub, specifying that the reserve location to be used for transferring and fees is Kusama 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 { api, specName, safeXcmVersion } = await constructApiPromise('wss://kusama-rpc.polkadot.io'); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion); - - let callInfo: TxResult<'call'>; - try { - callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Polkadot"},{"Parachain":"1000"}]}}`, - '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', - [`{"parents":"0","interior":{"Here":""}}`], - ['1000000000000'], - { - format: 'call', - xcmVersion: 4, - paysWithFeeDest: `{"parents":"0","interior":{"Here":""}}`, - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"0","interior":{"X1":{"Parachain":"1000"}}}', - }, - ); - - 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/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts index fff02916..5d4c9dfa 100644 --- a/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts +++ b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts @@ -8,7 +8,7 @@ import { TxResult } from '../../../../src/types'; import { GREEN, PURPLE, RESET } from '../../../colors'; /** - * In this example we are creating a `xcmPallet` `transferAssetsUsingTypeAndThen` call to send 1 ROC (asset with location `{"parents":"0","interior":{"Here":""}}`) + * In this example we are creating an `xcmPallet` `transferAssetsUsingTypeAndThen` call to send 1 ROC (asset with location `{"parents":"0","interior":{"Here":""}}`) * from a Rococo (Relay Chain) account * to a Westend Asset Hub account, where the `xcmVersion` is set to 4 and no `weightLimit` option is provided declaring that * the tx will allow unlimited weight to be used for fees. From c65f53b2d6cb856f02350173b311d985592683c9 Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:38:05 -0400 Subject: [PATCH 40/44] remove examples --- .../reserve/assetHubMUSEToBifrost.ts | 59 ------------------- .../teleport/assetHubHOPToTrappist.ts | 49 --------------- .../teleport/assetHubWETHToBridgeHub.ts | 53 ----------------- 3 files changed, 161 deletions(-) delete mode 100644 examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts delete mode 100644 examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts delete mode 100644 examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts diff --git a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts b/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts deleted file mode 100644 index 1c73c283..00000000 --- a/examples/rococo/assetHub/foreignAssetTransfers/reserve/assetHubMUSEToBifrost.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * 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 `polkadotXcm` pallet `transferAssetsUsingTypeAndThen` call to send MUSE (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`) - * from a Rococo Asset Hub (System Parachain) account - * to a Bifrost Polkadot (Parachain) testnet account, where the `xcmVersion` is set to 4, and there is no - * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. - * We provide a `paysWithFeeDest` asset location for MUSE which will be used to pay for fees on the destination chain. - * We also provide a value of `RemoteReserve` for the `assetTransferType` and `feeTransferType` options declaring a custom reserve location for both - * the `remoteReserveAssetTransferTypeLocation` and `remoteReserveFeesTransferTypeLocation` options. - * - * 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 { api, specName, chainName, safeXcmVersion } = await constructApiPromise( - 'wss://rococo-asset-hub-rpc.polkadot.io', - ); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { - chainName, - }); - - let callInfo: TxResult<'call'>; - try { - callInfo = await assetApi.createTransferTransaction( - `2030`, - '0x6E733286C3Dc52C67b8DAdFDd634eD9c3Fb05B5B', - [`{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}`], - ['1000000000000'], - { - format: 'call', - xcmVersion: 4, - paysWithFeeDest: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', - assetTransferType: 'RemoteReserve', - remoteReserveAssetTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', - feesTransferType: 'RemoteReserve', - remoteReserveFeesTransferTypeLocation: '{"parents":"1","interior":{"X1":{"Parachain":"3369"}}}', - }, - ); - - 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/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts deleted file mode 100644 index ec1461e4..00000000 --- a/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubHOPToTrappist.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * 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 `polkadotXcm` pallet `transferAssets` call to send HOP (foreign asset with location `{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`) - * from a Rococo Asset Hub (System Parachain) account - * to a Trappist Testnet (ParaChain) account, where the `xcmVersion` is set to 4, and there is no - * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. - * - * 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 { api, specName, safeXcmVersion, chainName } = await constructApiPromise( - 'wss://rococo-asset-hub-rpc.polkadot.io', - ); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { chainName }); - - let callInfo: TxResult<'call'>; - try { - callInfo = await assetApi.createTransferTransaction( - '1836', - '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - [`{"parents":"1","interior":{"X1":{"Parachain":"1836"}}}`], - ['1000000000000'], - { - format: 'call', - xcmVersion: 4, - }, - ); - - 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/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts b/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts deleted file mode 100644 index 5673e81b..00000000 --- a/examples/rococo/assetHub/foreignAssetTransfers/teleport/assetHubWETHToBridgeHub.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * 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 `polkadotXcm` pallet `transferAssets` call to send WETH (foreign asset with location `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`) - * from a Rococo Asset Hub (System Parachain) account - * to a Rococo BridgeHub (System ParaChain) account, where the `xcmVersion` is set to 4, and there is no - * `weightLimit` option provided which declares that the tx will allow unlimited weight to be used for fees. - * - * 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 { api, specName, chainName, safeXcmVersion } = await constructApiPromise( - 'wss://rococo-asset-hub-rpc.polkadot.io', - ); - const assetApi = new AssetTransferApi(api, specName, safeXcmVersion, { - chainName, - }); - - let callInfo: TxResult<'call'>; - try { - callInfo = await assetApi.createTransferTransaction( - '1013', - '5EWNeodpcQ6iYibJ3jmWVe85nsok1EDG8Kk3aFg8ZzpfY1qX', - [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - ], - ['1000000000000'], - { - format: 'call', - xcmVersion: 4, - }, - ); - - 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()); From 2755b7b6dcea594edff830229025710c67f8fabb Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:42:23 -0400 Subject: [PATCH 41/44] update RelayToBridge inline docs remove unused util function --- src/createXcmTypes/RelayToBridge.ts | 4 -- .../createDefaultXcmOnDestination.spec.ts | 72 ------------------- .../util/createDefaultXcmOnDestination.ts | 44 ------------ 3 files changed, 120 deletions(-) delete mode 100644 src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts delete mode 100644 src/createXcmTypes/util/createDefaultXcmOnDestination.ts diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts index bef86cd9..fee25fbd 100644 --- a/src/createXcmTypes/RelayToBridge.ts +++ b/src/createXcmTypes/RelayToBridge.ts @@ -116,9 +116,6 @@ export const RelayToBridge: ICreateXcmType = { * * @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): Promise => { const multiAssets = []; @@ -184,7 +181,6 @@ export const RelayToBridge: ICreateXcmType = { * Returns the correct `feeAssetItem` based on XCM direction. * * @param api ApiPromise - * @param opts Options that are used for fee asset construction. */ createFeeAssetItem: async (_: ApiPromise): Promise => { return await Promise.resolve(0); diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts deleted file mode 100644 index b34e70fb..00000000 --- a/src/createXcmTypes/util/createDefaultXcmOnDestination.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import { UnionXcmMultiLocation } from '../types'; -import { createDefaultXcmOnDestination } from './createDefaultXcmOnDestination'; - -describe('createDefaultXcmOnDestination', () => { - it('Should correctly construct the default XCM message for V3', () => { - const assetIds = [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - ]; - const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; - - const beneficiary = { - parents: 0, - interior: { - X1: { AccountId32: { id: accountId } }, - }, - } as UnionXcmMultiLocation; - - const xcmVersion = 3; - - const expected = { - V3: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: 1, - }, - }, - beneficiary, - }, - }, - ], - }; - - expect(createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion)).toEqual(expected); - }); - it('Should correctly construct the default XCM message for V4', () => { - const assetIds = [ - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xfff9976782d46cc05630d1f6ebab18b2324d6b14"}}]}}`, - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":{"Ethereum":{"chainId":"11155111"}}},{"AccountKey20":{"network":null,"key":"0xc3d088842dcf02c13699f936bb83dfbbc6f721ab"}}]}}`, - ]; - const accountId = '0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b'; - - const beneficiary = { - parents: 0, - interior: { - X1: { AccountId32: { id: accountId } }, - }, - } as UnionXcmMultiLocation; - - const xcmVersion = 4; - - const expected = { - V4: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: 2, - }, - }, - beneficiary, - }, - }, - ], - }; - - expect(createDefaultXcmOnDestination(assetIds, beneficiary, xcmVersion)).toEqual(expected); - }); -}); diff --git a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts b/src/createXcmTypes/util/createDefaultXcmOnDestination.ts deleted file mode 100644 index 00503d68..00000000 --- a/src/createXcmTypes/util/createDefaultXcmOnDestination.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2024 Parity Technologies (UK) Ltd. - -import type { AnyJson } from '@polkadot/types/types'; - -import { UnionXcmMultiLocation } from '../types'; - -export const createDefaultXcmOnDestination = ( - assets: string[], - beneficiary: UnionXcmMultiLocation, - xcmVersion: number, -): AnyJson => { - const defaultDestXcm: AnyJson = - xcmVersion === 3 - ? { - V3: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: assets.length, - }, - }, - beneficiary, - }, - }, - ], - } - : { - V4: [ - { - depositAsset: { - assets: { - Wild: { - AllCounted: assets.length, - }, - }, - beneficiary, - }, - }, - ], - }; - - return defaultDestXcm; -}; From e380a036bccd8012e06a7355a0c802ef03078616 Mon Sep 17 00:00:00 2001 From: marshacb Date: Fri, 24 May 2024 00:47:47 -0400 Subject: [PATCH 42/44] update metadata files --- src/testHelpers/adjustedMockRelayApiV1011000.ts | 2 +- src/testHelpers/mockRelayApiV1007001.ts | 2 +- src/testHelpers/mockRelayApiV1011000.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/testHelpers/adjustedMockRelayApiV1011000.ts b/src/testHelpers/adjustedMockRelayApiV1011000.ts index e24ca07e..d74b00b1 100644 --- a/src/testHelpers/adjustedMockRelayApiV1011000.ts +++ b/src/testHelpers/adjustedMockRelayApiV1011000.ts @@ -1,4 +1,4 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. +// Copyright 2024 Parity Technologies (UK) Ltd. import type { ApiPromise } from '@polkadot/api'; import type { Header } from '@polkadot/types/interfaces'; diff --git a/src/testHelpers/mockRelayApiV1007001.ts b/src/testHelpers/mockRelayApiV1007001.ts index 5a740f6d..c11444e4 100644 --- a/src/testHelpers/mockRelayApiV1007001.ts +++ b/src/testHelpers/mockRelayApiV1007001.ts @@ -1,4 +1,4 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. +// Copyright 2024 Parity Technologies (UK) Ltd. import { createApiWithAugmentations } from './createApiWithAugmentations'; import { westendV1007001 } from './metadata/westendV1007001'; diff --git a/src/testHelpers/mockRelayApiV1011000.ts b/src/testHelpers/mockRelayApiV1011000.ts index 87925b76..c2a567c9 100644 --- a/src/testHelpers/mockRelayApiV1011000.ts +++ b/src/testHelpers/mockRelayApiV1011000.ts @@ -1,4 +1,4 @@ -// Copyright 2023 Parity Technologies (UK) Ltd. +// Copyright 2024 Parity Technologies (UK) Ltd. import { createApiWithAugmentations } from './createApiWithAugmentations'; import { westendV1011000 } from './metadata/westendV1011000'; From 82558158425f10afec274c745eef9b764d3c7e92 Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 12 Jun 2024 09:35:57 -0400 Subject: [PATCH 43/44] update dest parents value from 2 to 1 for RelayToBridge transfers --- .../bridgeTransfers/rococoROCToWestendAssetHub.ts | 2 +- src/createXcmTypes/RelayToBridge.spec.ts | 4 ++-- src/createXcmTypes/RelayToBridge.ts | 8 ++++---- src/integrationTests/AssetsTransferApi.spec.ts | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts index 5d4c9dfa..de0e9c35 100644 --- a/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts +++ b/examples/rococo/relayChain/bridgeTransfers/rococoROCToWestendAssetHub.ts @@ -24,7 +24,7 @@ const main = async () => { let callInfo: TxResult<'call'>; try { callInfo = await assetApi.createTransferTransaction( - `{"parents":"2","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}`, + `{"parents":"1","interior":{"X2":[{"GlobalConsensus":"Westend"},{"Parachain":"1000"}]}}`, '13EoPU88424tufnjevEYbbvZ7sGV3q1uhuN4ZbUaoTsnLHYt', [`{"parents":"0","interior":{"Here":""}}`], ['1000000000000'], diff --git a/src/createXcmTypes/RelayToBridge.spec.ts b/src/createXcmTypes/RelayToBridge.spec.ts index 690effc5..43f479ce 100644 --- a/src/createXcmTypes/RelayToBridge.spec.ts +++ b/src/createXcmTypes/RelayToBridge.spec.ts @@ -99,7 +99,7 @@ describe('RelayToBridge', () => { const expectedRes = { V3: { - parents: 2, + parents: 1, interior: { X1: { GlobalConsensus: { @@ -121,7 +121,7 @@ describe('RelayToBridge', () => { const expectedRes = { V4: { - parents: 2, + parents: 1, interior: { X2: [ { diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts index fee25fbd..9a159804 100644 --- a/src/createXcmTypes/RelayToBridge.ts +++ b/src/createXcmTypes/RelayToBridge.ts @@ -69,7 +69,7 @@ export const RelayToBridge: ICreateXcmType = { destination.interior && destination.interior.X1 ? { V3: { - parents: 2, + parents: 1, interior: { X1: destination.interior.X1 as InteriorValue, }, @@ -77,7 +77,7 @@ export const RelayToBridge: ICreateXcmType = { } : { V3: { - parents: 2, + parents: 1, interior: { X2: destination.interior.X2 as InteriorValue, }, @@ -87,7 +87,7 @@ export const RelayToBridge: ICreateXcmType = { if (destination.interior && destination.interior.X1) { dest = { V4: { - parents: 2, + parents: 1, interior: { X1: [destination.interior.X1 as XcmV4JunctionDestBeneficiary], }, @@ -96,7 +96,7 @@ export const RelayToBridge: ICreateXcmType = { } else if (destination.interior && destination.interior.X2) { dest = { V4: { - parents: 2, + parents: 1, interior: { X2: destination.interior.X2 as XcmV4JunctionDestBeneficiary[], }, diff --git a/src/integrationTests/AssetsTransferApi.spec.ts b/src/integrationTests/AssetsTransferApi.spec.ts index 287beeb3..0d0caea3 100644 --- a/src/integrationTests/AssetsTransferApi.spec.ts +++ b/src/integrationTests/AssetsTransferApi.spec.ts @@ -1528,7 +1528,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx).toEqual( - '0x630d03020109079edaa80203040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x630d03010109079edaa80203040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); }); @@ -1554,7 +1554,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx.toHex()).toEqual( - '0x5501630d030202090500a10f03040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x5501630d030102090500a10f03040000000002286bee0303000100a10f030000000303000100a10f03040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f45022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a submittable extrinsic for a transferAssetsUsingTypeAndThen for V3', async () => { @@ -1605,7 +1605,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx).toEqual( - '0x630d040202090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', + '0x630d040102090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b01a10f411f', ); }); it('Should correctly build a `transferAssetsUsingTypeAndThen` payload for V4 test', async () => { @@ -1626,7 +1626,7 @@ describe('AssetTransferApi Integration Tests', () => { }, ); expect(res.tx.toHex()).toEqual( - '0x3d01630d040202090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0045022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', + '0x3d01630d040102090500a10f040400000002286bee0304000100a10f0400000304000100a10f04040d01020400010100f5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b0045022800995d0f00180000000000000000000000000000000000000000000000000000000000000000000000be2554aa8a0151eb4d706308c47d16996af391e4c5e499c7cbef24259b7d4503', ); }); it('Should correctly build a `transferAssets` submittable extrinsic for a transferAssets for V4', async () => { From 1e7e6a29209b069fb4270a890484bbadf870fe6e Mon Sep 17 00:00:00 2001 From: marshacb Date: Wed, 12 Jun 2024 13:21:08 -0400 Subject: [PATCH 44/44] update check to explicitly check for version 3 --- src/createXcmTypes/RelayToBridge.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/createXcmTypes/RelayToBridge.ts b/src/createXcmTypes/RelayToBridge.ts index 9a159804..92e289bb 100644 --- a/src/createXcmTypes/RelayToBridge.ts +++ b/src/createXcmTypes/RelayToBridge.ts @@ -122,7 +122,7 @@ export const RelayToBridge: ICreateXcmType = { let multiAsset: FungibleStrAssetType; const amount = amounts[0]; - if (xcmVersion < 4) { + if (xcmVersion === 3) { multiAsset = { fun: { Fungible: amount,